summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2026-01-12x86/paravirt: Move paravirt_sched_clock() related code into tsc.cJuergen Gross
The only user of paravirt_sched_clock() is in tsc.c, so move the code from paravirt.c and paravirt.h to tsc.c. Signed-off-by: Juergen Gross <jgross@suse.com> Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de> Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org> Link: https://patch.msgid.link/20260105110520.21356-13-jgross@suse.com
2026-01-12KVM: x86: Hide KVM_IRQCHIP_KERNEL behind CONFIG_KVM_IOAPIC=ySean Christopherson
Enumerate KVM_IRQCHIP_KERNEL if and only if support for an in-kernel I/O APIC is enabled, as all usage is likewise guarded by CONFIG_KVM_IOAPIC=y. Link: https://patch.msgid.link/20251206004311.479939-10-seanjc@google.com Signed-off-by: Sean Christopherson <seanjc@google.com>
2026-01-12KVM: x86: Bury ioapic.h definitions behind CONFIG_KVM_IOAPICSean Christopherson
Now that almost everything in ioapic.h is used only by code guarded by CONFIG_KVM_IOAPIC=y, bury (almost) the entire thing behind the Kconfig. Link: https://patch.msgid.link/20251206004311.479939-9-seanjc@google.com Signed-off-by: Sean Christopherson <seanjc@google.com>
2026-01-12KVM: x86: Fold "struct dest_map" into "struct rtc_status"Sean Christopherson
Drop "struct dest_map" and fold its members into its one and only user, "struct rtc_status". Tracking "pending" EOIs and associated vCPUs is very much a hack for legacy RTC behavior, and should never be needed for other IRQ delivery. In addition to making it more obvious why KVM tracks target vCPUs, this will allow burying the "struct rtc_status" definition behind CONFIG_KVM_IOAPIC=y, which in turn will make it even harder for KVM to misuse the structure. No functional change intended. Link: https://patch.msgid.link/20251206004311.479939-8-seanjc@google.com Signed-off-by: Sean Christopherson <seanjc@google.com>
2026-01-12KVM: x86: Add a wrapper to handle common case of IRQ delivery without dest_mapSean Christopherson
Turn kvm_irq_delivery_to_apic() into a wrapper that passes NULL for the @dest_map param, as only the ugly I/O APIC RTC hackery needs to know which vCPUs received the IRQ. No functional change intended. Link: https://patch.msgid.link/20251206004311.479939-7-seanjc@google.com Signed-off-by: Sean Christopherson <seanjc@google.com>
2026-01-12KVM: x86: Drop MAX_NR_RESERVED_IOAPIC_PINS, use KVM_MAX_IRQ_ROUTES directlySean Christopherson
Directly use KVM_MAX_IRQ_ROUTES when checking the number of routes being defined by userspace when creating a split IRQCHIP. The restriction has nothing to do with the I/O APIC, e.g. most modern userspace usage is for routing MSIs. Breaking the unnecessary dependency on the I/O APIC will allow burying all of ioapic.h behind CONFIG_KVM_IOAPIC=y. No functional change intended. Link: https://patch.msgid.link/20251206004311.479939-6-seanjc@google.com Signed-off-by: Sean Christopherson <seanjc@google.com>
2026-01-12KVM: x86: Drop guest-triggerable ASSERT()s on I/O APIC access alignmentSean Christopherson
Drop the asserts on the guest-controlled address being 16-byte aligned when emulating I/O APIC accesses, as the ASSERT()s are guest-triggerable and ultimately pointless since KVM requires exact register matches, i.e. will ultimately ignore unaligned accesses anyways. Drop the ASSERT() definition itself now that all users are gone. For all intents and purposes, no functional change intended. Link: https://patch.msgid.link/20251206004311.479939-5-seanjc@google.com Signed-off-by: Sean Christopherson <seanjc@google.com>
2026-01-12KVM: x86: Drop ASSERT() on I/O APIC EOIs being only for LEVEL_to WARN_ON_ONCESean Christopherson
Remove kvm_ioapic_update_eoi_one()'s ASSERT() that the vector's entry is configured to be level-triggered, as KVM intercepts and forward EOIs to the I/O APIC even for edge-triggered IRQs (see kvm_ioapic_scan_entry()), and nothing guarantees the local APIC's TMR register is synchronized with the I/O APIC redirection table, i.e. the @trigger_mode check just out of sight doesn't provide any meaningful protection. Given that roughly half of the historic ASSERT()s are/were guest- and/or user-triggerable, it's safe to assume no one has run meaningful workloads with DEBUG=1, i.e. that the ASSERT() has been dead code since it was added 18+ years ago. Opportunistically drop the unnecessary forward declaration of kvm_ioapic_update_eoi_one(). For all intents and purposes, no functional change intended. Link: https://patch.msgid.link/20251206004311.479939-4-seanjc@google.com Signed-off-by: Sean Christopherson <seanjc@google.com>
2026-01-12KVM: x86: Drop guest/user-triggerable asserts on IRR/ISR vectorsSean Christopherson
Remove the ASSERT()s in apic_find_highest_i{r,s}r() that exist to detect illegal vectors (0-15 are reserved and never recognized by the local APIC), as the asserts, if they were ever to be enabled by #defining DEBUG, can be trivially triggered from both the guest and from userspace, and ultimately because the ASSERT()s are useless. In large part due to lack of emulation for the Error Status Register and its "delayed" read semantics, KVM doesn't filter out bad IRQs (IPIs or otherwise) when IRQs are sent or received. Instead, probably by dumb luck on KVM's part, KVM effectively ignores pending illegal vectors in the IRR due vector 0-15 having priority '0', and thus never being higher priority than PPR. As for ISR, a misbehaving userspace could stuff illegal vector bits, but again the end result is mostly benign (aside from userspace likely breaking the VM), as processing illegal vectors "works" and doesn't cause functional problems. Regardless of the safety and correctness of KVM's illegal vector handling, one thing is for certain: the ASSERT()s have done absolutely nothing to help detect such issues since they were added 18+ years ago by commit 97222cc83163 ("KVM: Emulate local APIC in kernel"). For all intents and purposes, no functional change intended. Link: https://patch.msgid.link/20251206004311.479939-3-seanjc@google.com Signed-off-by: Sean Christopherson <seanjc@google.com>
2026-01-12KVM: x86: Drop ASSERT()s on APIC/vCPU being non-NULLSean Christopherson
Remove ASSERT()s on vCPU and APIC structures being non-NULL in the local APIC code as the DEBUG=1 path of ASSERT() ends with BUG(), i.e. isn't meaningfully better for debugging than a NULL pointer dereference. For all intents and purposes, no functional change intended. Link: https://patch.msgid.link/20251206004311.479939-2-seanjc@google.com Signed-off-by: Sean Christopherson <seanjc@google.com>
2026-01-12KVM: x86: Enforce use of EXPORT_SYMBOL_FOR_KVM_INTERNALSean Christopherson
Add a (gnarly) inline "script" in the Makefile to fail the build if there is EXPORT_SYMBOL_GPL or EXPORT_SYMBOL usage in virt/kvm or arch/x86/kvm beyond the known-good/expected exports for other modules. Remembering to use EXPORT_SYMBOL_FOR_KVM_INTERNAL is surprisingly difficult, and hoping to detect "bad" exports via code review is not a robust long-term strategy. Jump through a pile of hoops to coerce make into printing a human-friendly error message, with the offending files+lines cleanly separated. E.g. where <srctree> is the resolution of $(srctree), i.e. '.' for in-tree builds, and the absolute path for out-of-tree-builds: <srctree>/arch/x86/kvm/Makefile:97: *** ERROR *** found 2 unwanted occurrences of EXPORT_SYMBOL_GPL: <srctree>/arch/x86/kvm/x86.c:686:EXPORT_SYMBOL_GPL(__kvm_set_user_return_msr); <srctree>/arch/x86/kvm/x86.c:703:EXPORT_SYMBOL_GPL(kvm_set_user_return_msr); in directories: <srctree>/arch/x86/kvm <srctree>/virt/kvm Use EXPORT_SYMBOL_FOR_KVM_INTERNAL, not EXPORT_SYMBOL_GPL. Stop. and <srctree>/arch/x86/kvm/Makefile:98: *** ERROR *** found 1 unwanted occurrences of EXPORT_SYMBOL: <srctree>/arch/x86/kvm/x86.c:709:EXPORT_SYMBOL(kvm_get_user_return_msr); in directories: <srctree>/arch/x86/kvm <srctree>/virt/kvm Use EXPORT_SYMBOL_FOR_KVM_INTERNAL, not EXPORT_SYMBOL. Stop. Put the enforcement in x86's Makefile even though the rule itself applies to virt/kvm, as putting the enforcement in virt/kvm/Makefile.kvm would effectively require exempting every architecture except x86. PPC is the only other architecture with sub-modules, and PPC hasn't been switched to use EXPORT_SYMBOL_FOR_KVM_INTERNAL (and given its nearly-orphaned state, likely never will). And for KVM architectures without sub-modules, that means that, barring truly spurious exports, the exports are intended for non-KVM usage and thus shouldn't be using EXPORT_SYMBOL_FOR_KVM_INTERNAL. Tested-by: Chao Gao <chao.gao@intel.com> Link: https://patch.msgid.link/20251121190514.293385-1-seanjc@google.com Signed-off-by: Sean Christopherson <seanjc@google.com>
2026-01-12net: octeon_ep_vf: fix free_irq dev_id mismatch in IRQ rollbackKery Qi
octep_vf_request_irqs() requests MSI-X queue IRQs with dev_id set to ioq_vector. If request_irq() fails part-way, the rollback loop calls free_irq() with dev_id set to 'oct', which does not match the original dev_id and may leave the irqaction registered. This can keep IRQ handlers alive while ioq_vector is later freed during unwind/teardown, leading to a use-after-free or crash when an interrupt fires. Fix the error path to free IRQs with the same ioq_vector dev_id used during request_irq(). Fixes: 1cd3b407977c ("octeon_ep_vf: add Tx/Rx processing and interrupt support") Signed-off-by: Kery Qi <qikeyu2017@gmail.com> Link: https://patch.msgid.link/20260108164256.1749-2-qikeyu2017@gmail.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2026-01-12drm/xe/device: Convert wait for lmem init into an assertBalasubramani Vivekanandan
Prior to lmem init check, driver is waiting for the pcode uncore_init status. uncore_init status will be flagged after the complete boot and initialization of the SoC by the pcode. uncore_init confirms that lmem init and mmio unblock has been already completed. It makes no sense to check for lmem init after the pcode uncore_init check. So change the wait for lmem init check into an assert which confirms lmem init is set. Signed-off-by: Balasubramani Vivekanandan <balasubramani.vivekanandan@intel.com> Reviewed-by: Matt Roper <matthew.d.roper@intel.com> Link: https://patch.msgid.link/20251219145024.2955946-2-balasubramani.vivekanandan@intel.com Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
2026-01-12NFS: Don't immediately return directory delegations when disabledAnna Schumaker
The function nfs_inode_evict_delegation() immediately and synchronously returns a delegation when called. This means we can't call it from nfs4_have_delegation(), since that function could be called under a lock. Instead we should mark the delegation for return and let the state manager handle it for us. Fixes: b6d2a520f463 ("NFS: Add a module option to disable directory delegations") Signed-off-by: Anna Schumaker <anna.schumaker@oracle.com> Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
2026-01-12HID: sony: add support for bluetooth Rock Band 4 PS4 guitarsRosalie Wanders
This commit adds support for the PDP Jaguar and MadCatz Stratocaster. Signed-off-by: Rosalie Wanders <rosalie@mailbox.org> Signed-off-by: Jiri Kosina <jkosina@suse.com>
2026-01-12PCI: Provide pci_free_irq_vectors() stubBoqun Feng
473b9f331718 ("rust: pci: fix build failure when CONFIG_PCI_MSI is disabled") fixed a build error by providing Rust helpers when CONFIG_PCI_MSI is not set. However the Rust helpers rely on pci_free_irq_vectors(), which is only available when CONFIG_PCI=y. When CONFIG_PCI is not set, there is already a stub for pci_alloc_irq_vectors(). Add a similar stub for pci_free_irq_vectors(). Fixes: 473b9f331718 ("rust: pci: fix build failure when CONFIG_PCI_MSI is disabled") Reported-by: FUJITA Tomonori <fujita.tomonori@gmail.com> Closes: https://lore.kernel.org/rust-for-linux/20251209014312.575940-1-fujita.tomonori@gmail.com/ Reported-by: kernel test robot <lkp@intel.com> Closes: https://lore.kernel.org/oe-kbuild-all/202512220740.4Kexm4dW-lkp@intel.com/ Reported-by: Liang Jie <liangjie@lixiang.com> Closes: https://lore.kernel.org/rust-for-linux/20251222034415.1384223-1-buaajxlj@163.com/ Signed-off-by: Boqun Feng <boqun.feng@gmail.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Reviewed-by: Drew Fustini <fustini@kernel.org> Reviewed-by: David Gow <davidgow@google.com> Reviewed-by: Joel Fernandes <joelagnelf@nvidia.com> Reviewed-by: Danilo Krummrich <dakr@kernel.org> Link: https://patch.msgid.link/20251226113938.52145-1-boqun.feng@gmail.com
2026-01-12Documentation/trace: Fix links to other documentsPetr Vorel
Link to another document does not require 'file:'. Removing it fixes links in generated html docs. Signed-off-by: Petr Vorel <pvorel@suse.cz> Signed-off-by: Jonathan Corbet <corbet@lwn.net> Message-ID: <20260111223643.174812-2-pvorel@suse.cz>
2026-01-12Documentation: bug-hunting.rst: Remove wrong 'file:' syntaxPetr Vorel
Link to another document does not require 'file:', therefore it was shown in generated html. Preformatted text requires just ``...``. Signed-off-by: Petr Vorel <pvorel@suse.cz> Signed-off-by: Jonathan Corbet <corbet@lwn.net> Message-ID: <20260111223643.174812-1-pvorel@suse.cz>
2026-01-12MAINTAINERS: Update for the doc subsystemShuah Khan
Adding myself as a reviewer for doc subsystem. Signed-off-by: Shuah Khan <skhan@linuxfoundation.org> Signed-off-by: Jonathan Corbet <corbet@lwn.net> Message-ID: <20260106231316.24474-1-skhan@linuxfoundation.org>
2026-01-12CREDITS: add whitespace before opening parenthesesDiego Viola
in order to maintain consistent formatting across the file. Signed-off-by: Diego Viola <diego.viola@gmail.com> Signed-off-by: Jonathan Corbet <corbet@lwn.net> Message-ID: <20260107080411.59483-1-diego.viola@gmail.com>
2026-01-12regulator: dummy, make dummy_regulator_driver staticBen Dooks
When converting to faux_device the dummy_regulator_driver was made non-static however it isn't exported or defined anywhere outside the file it is in. Make it static to avoid the following sparse warning: drivers/regulator/dummy.c:59:24: warning: symbol 'dummy_regulator_driver' was not declared. Should it be static? Fixes: dcd2a9a5550ef556c8 ("regulator: dummy: convert to use the faux device interface") Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk> Link: https://patch.msgid.link/20260112154909.601987-1-ben.dooks@codethink.co.uk Signed-off-by: Mark Brown <broonie@kernel.org>
2026-01-12ASoC: codecs: rtq9128: Add compatible changes for rtq9154ChiYuan Huang
Although rtq9154 only modify the outter package, some register settings related to the channel order definition are still different. Use the chip model ID code to seperate these changes. Signed-off-by: ChiYuan Huang <cy_huang@richtek.com> Link: https://patch.msgid.link/ca3a07c8987a033c3d505f5d79956d0e935ea03f.1768180827.git.cy_huang@richtek.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-01-12ASoC: dt-bindings: rtq9128: Add rtq9154 backward compatibleChiYuan Huang
Add rtq9154 backward compatible support. Signed-off-by: ChiYuan Huang <cy_huang@richtek.com> Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com> Link: https://patch.msgid.link/ab31e3965e9cb50ecdc14d5ea90d70dc26d1d187.1768180827.git.cy_huang@richtek.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-01-12ASoC: codecs: rtq9128: Modify the chip initial settingChiYuan Huang
Modify the chip initial setting to default enable DC load detection function. This function is the chip specific feature that can detect the output open/short. Signed-off-by: ChiYuan Huang <cy_huang@richtek.com> Link: https://patch.msgid.link/340c88ae78edeb76cde812453c9a72d28b73e9f4.1768180827.git.cy_huang@richtek.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-01-12Merge patch series "initrd: remove half of classic initrd support"Christian Brauner
Askar Safin <safinaskar@gmail.com> says: This patchset will not affect anyone, who showed up in these lists. See [5] for details. Intro ==== This patchset removes half of classic initrd (initial RAM disk) support, i. e. linuxrc code path, which was deprecated in 2020. Initramfs still stays, RAM disk itself (brd) still stays. And other half of initrd stays, too. init/do_mounts* are listed in VFS entry in MAINTAINERS, so I think this patchset should go through VFS tree. I tested the patchset on 8 (!!!) archs in Qemu (see details below). If you still use initrd, see below for workaround. In 2020 deprecation notice was put to linuxrc initrd code path. In v1 I tried to remove initrd fully, but Nicolas Schichan reported that he still uses other code path (root=/dev/ram0 one) on million devices [4]. root=/dev/ram0 code path did not contain deprecation notice. So, in this version of patchset I remove deprecated code path, i. e. linuxrc one, while keeping other, i. e. root=/dev/ram0 one. Also I put deprecation notice to remaining code path, i. e. to root=/dev/ram0 one. I plan to send patches for full removal of initrd after one year, i. e. in January 2027 (of course, initramfs will still work). Also, I tried to make this patchset small to make sure it can be reverted easily. I plan to send cleanups later. Details ==== Other user-visible changes: - Removed kernel command line parameters "load_ramdisk" and "prompt_ramdisk", which did nothing and were deprecated - Removed /proc/sys/kernel/real-root-dev . It was used for initrd only - Command line parameters "noinitrd" and "ramdisk_start=" are deprecated Testing ==== I tested my patchset on many architectures in Qemu using my Rust program, heavily based on mkroot [1]. I used the following cross-compilers: aarch64-linux-musleabi armv4l-linux-musleabihf armv5l-linux-musleabihf armv7l-linux-musleabihf i486-linux-musl i686-linux-musl mips-linux-musl mips64-linux-musl mipsel-linux-musl powerpc-linux-musl powerpc64-linux-musl powerpc64le-linux-musl riscv32-linux-musl riscv64-linux-musl s390x-linux-musl sh4-linux-musl sh4eb-linux-musl x86_64-linux-musl taken from this directory [2]. So, as you can see, there are 18 triplets, which correspond to 8 subdirs in arch/. For every triplet I tested that: - Initramfs still works (both builtin and external) - Direct boot from disk still works - Remaining initrd code path (root=/dev/ram0) still works Workaround ==== If "retain_initrd" is passed to kernel, then initramfs/initrd, passed by bootloader, is retained and becomes available after boot as read-only magic file /sys/firmware/initrd [3]. No copies are involved. I. e. /sys/firmware/initrd is simply a reference to original blob passed by bootloader. This works even if initrd/initramfs is not recognized by kernel in any way, i. e. even if it is not valid cpio archive, nor a fs image supported by classic initrd. This works both with my patchset and without it. This means that you can emulate classic initrd so: link builtin initramfs to kernel; in /init in this initramfs copy /sys/firmware/initrd to some file in / and loop-mount it. This is even better than classic initrd, because: - You can use fs not supported by classic initrd, for example erofs - One copy is involved (from /sys/firmware/initrd to some file in /) as opposed to two when using classic initrd Still, I don't recommend using this workaround, because I want everyone to migrate to proper modern initramfs. But still you can use this workaround if you want. Also: it is not possible to directly loop-mount /sys/firmware/initrd . Theoretically kernel can be changed to allow this (and/or to make it writable), but I think nobody needs this. And I don't want to implement this. On Qemu's -initrd and GRUB's initrd ==== Don't panic, this patchset doesn't remove initramfs (which is used by nearly all Linux distros). And I don't have plans to remove it. Qemu's -initrd option and GRUB's initrd command refer to initrd bootloader mechanism, which is used to load both initrd and (external) initramfs. So, if you use Qemu's -initrd or GRUB's initrd, then you likely use them to pass initramfs, and thus you are safe. v1: https://lore.kernel.org/lkml/20250913003842.41944-1-safinaskar@gmail.com/ v1 -> v2 changes: - A lot. I removed most patches, see cover letter for details v2: https://lore.kernel.org/lkml/20251010094047.3111495-1-safinaskar@gmail.com/ v2 -> v3 changes: - Commit messages - Expanded docs for "noinitrd" - Added link to /sys/firmware/initrd workaround to pr_warn v3: https://lore.kernel.org/lkml/20251017060956.1151347-1-safinaskar@gmail.com/ v3 -> v4 changes: - Changed "September 2026" to "January 2027" (i. e. after 2026 LTS release) [1] https://github.com/landley/toybox/tree/master/mkroot [2] https://landley.net/toybox/downloads/binaries/toolchains/latest [3] https://lore.kernel.org/all/20231207235654.16622-1-graf@amazon.com/ [4] https://lore.kernel.org/lkml/20250918152830.438554-1-nschichan@freebox.fr/ [5] https://lore.kernel.org/lkml/20251022082604.25437-1-safinaskar@gmail.com/ * patches from https://patch.msgid.link/20251119222407.3333257-1-safinaskar@gmail.com: init: remove /proc/sys/kernel/real-root-dev initrd: remove deprecated code path (linuxrc) init: remove deprecated "load_ramdisk" and "prompt_ramdisk" command line parameters Link: https://patch.msgid.link/20251119222407.3333257-1-safinaskar@gmail.com Signed-off-by: Christian Brauner <brauner@kernel.org>
2026-01-12init: remove /proc/sys/kernel/real-root-devAskar Safin
It is not used anymore. Signed-off-by: Askar Safin <safinaskar@gmail.com> Link: https://patch.msgid.link/20251119222407.3333257-4-safinaskar@gmail.com Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Christian Brauner <brauner@kernel.org>
2026-01-12initrd: remove deprecated code path (linuxrc)Askar Safin
Remove linuxrc initrd code path, which was deprecated in 2020. Initramfs and (non-initial) RAM disks (i. e. brd) still work. Both built-in and bootloader-supplied initramfs still work. Non-linuxrc initrd code path (i. e. using /dev/ram as final root filesystem) still works, but I put deprecation message into it. Also I deprecate command line parameters "noinitrd" and "ramdisk_start=". Signed-off-by: Askar Safin <safinaskar@gmail.com> Link: https://patch.msgid.link/20251119222407.3333257-3-safinaskar@gmail.com Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Christian Brauner <brauner@kernel.org>
2026-01-12selftests: ublk: add end-to-end integrity testCaleb Sander Mateos
Add test case loop_08 to verify the ublk integrity data flow. It uses the kublk loop target to create a ublk device with integrity on top of backing data and integrity files. It then writes to the whole device with fio configured to generate integrity data. Then it reads back the whole device with fio configured to verify the integrity data. It also verifies that injected guard, reftag, and apptag corruptions are correctly detected. Signed-off-by: Caleb Sander Mateos <csander@purestorage.com> Reviewed-by: Ming Lei <ming.lei@redhat.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
2026-01-12selftests: ublk: add integrity params testCaleb Sander Mateos
Add test case null_04 to exercise all the different integrity params. It creates 4 different ublk devices with different combinations of integrity arguments and verifies their integrity limits via sysfs and the metadata_size utility. Signed-off-by: Caleb Sander Mateos <csander@purestorage.com> Reviewed-by: Ming Lei <ming.lei@redhat.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
2026-01-12selftests: ublk: add integrity data support to loop targetCaleb Sander Mateos
To perform and end-to-end test of integrity information through a ublk device, we need to actually store it somewhere and retrieve it. Add this support to kublk's loop target. It uses a second backing file for the integrity data corresponding to the data stored in the first file. The integrity file is initialized with byte 0xFF, which ensures the app and reference tags are set to the "escape" pattern to disable the bio-integrity-auto guard and reftag checks until the blocks are written. The integrity file is opened without O_DIRECT since it will be accessed at sub-block granularity. Each incoming read/write results in a pair of reads/writes, one to the data file, and one to the integrity file. If either backing I/O fails, the error is propagated to the ublk request. If both backing I/Os read/write some bytes, the ublk request is completed with the smaller of the number of blocks accessed by each I/O. Signed-off-by: Caleb Sander Mateos <csander@purestorage.com> Reviewed-by: Ming Lei <ming.lei@redhat.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
2026-01-12selftests: ublk: support non-O_DIRECT backing filesCaleb Sander Mateos
A subsequent commit will add support for using a backing file to store integrity data. Since integrity data is accessed in intervals of metadata_size, which may be much smaller than a logical block on the backing device, direct I/O cannot be used. Add an argument to backing_file_tgt_init() to specify the number of files to open for direct I/O. The remaining files will use buffered I/O. For now, continue to request direct I/O for all the files. Signed-off-by: Caleb Sander Mateos <csander@purestorage.com> Reviewed-by: Ming Lei <ming.lei@redhat.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
2026-01-12selftests: ublk: implement integrity user copy in kublkCaleb Sander Mateos
If integrity data is enabled for kublk, allocate an integrity buffer for each I/O. Extend ublk_user_copy() to copy the integrity data between the ublk request and the integrity buffer if the ublksrv_io_desc indicates that the request has integrity data. Signed-off-by: Caleb Sander Mateos <csander@purestorage.com> Reviewed-by: Ming Lei <ming.lei@redhat.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
2026-01-12selftests: ublk: add kublk support for integrity paramsCaleb Sander Mateos
Add integrity param command line arguments to kublk. Plumb these to struct ublk_params for the null and fault_inject targets, as they don't need to actually read or write the integrity data. Forbid the integrity params for loop or stripe until the integrity data copy is implemented. Signed-off-by: Caleb Sander Mateos <csander@purestorage.com> Reviewed-by: Ming Lei <ming.lei@redhat.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
2026-01-12selftests: ublk: add utility to get block device metadata sizeCaleb Sander Mateos
Some block device integrity parameters are available in sysfs, but others are only accessible using the FS_IOC_GETLBMD_CAP ioctl. Add a metadata_size utility program to print out the logical block metadata size, PI offset, and PI size within the metadata. Example output: $ metadata_size /dev/ublkb0 metadata_size: 64 pi_offset: 56 pi_tuple_size: 8 Signed-off-by: Caleb Sander Mateos <csander@purestorage.com> Reviewed-by: Ming Lei <ming.lei@redhat.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
2026-01-12selftests: ublk: display UBLK_F_INTEGRITY supportCaleb Sander Mateos
Add support for printing the UBLK_F_INTEGRITY feature flag in the human-readable kublk features output. Signed-off-by: Caleb Sander Mateos <csander@purestorage.com> Reviewed-by: Ming Lei <ming.lei@redhat.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
2026-01-12ublk: optimize ublk_user_copy() on daemon taskCaleb Sander Mateos
ublk user copy syscalls may be issued from any task, so they take a reference count on the struct ublk_io to check whether it is owned by the ublk server and prevent a concurrent UBLK_IO_COMMIT_AND_FETCH_REQ from completing the request. However, if the user copy syscall is issued on the io's daemon task, a concurrent UBLK_IO_COMMIT_AND_FETCH_REQ isn't possible, so the atomic reference count dance is unnecessary. Check for UBLK_IO_FLAG_OWNED_BY_SRV to ensure the request is dispatched to the sever and obtain the request from ublk_io's req field instead of looking it up on the tagset. Skip the reference count increment and decrement. Commit 8a8fe42d765b ("ublk: optimize UBLK_IO_REGISTER_IO_BUF on daemon task") made an analogous optimization for ublk zero copy buffer registration. Signed-off-by: Caleb Sander Mateos <csander@purestorage.com> Reviewed-by: Ming Lei <ming.lei@redhat.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
2026-01-12ublk: support UBLK_F_INTEGRITYStanley Zhang
Now that all the components of the ublk integrity feature have been implemented, add UBLK_F_INTEGRITY to UBLK_F_ALL, conditional on block layer integrity support (CONFIG_BLK_DEV_INTEGRITY). This allows ublk servers to create ublk devices with UBLK_F_INTEGRITY set and UBLK_U_CMD_GET_FEATURES to report the feature as supported. Signed-off-by: Stanley Zhang <stazhang@purestorage.com> [csander: make feature conditional on CONFIG_BLK_DEV_INTEGRITY] Signed-off-by: Caleb Sander Mateos <csander@purestorage.com> Reviewed-by: Ming Lei <ming.lei@redhat.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
2026-01-12ublk: implement integrity user copyStanley Zhang
Add a function ublk_copy_user_integrity() to copy integrity information between a request and a user iov_iter. This mirrors the existing ublk_copy_user_pages() but operates on request integrity data instead of regular data. Check UBLKSRV_IO_INTEGRITY_FLAG in iocb->ki_pos in ublk_user_copy() to choose between copying data or integrity data. [csander: change offset units from data bytes to integrity data bytes, fix CONFIG_BLK_DEV_INTEGRITY=n build, rebase on user copy refactor] Signed-off-by: Stanley Zhang <stazhang@purestorage.com> Signed-off-by: Caleb Sander Mateos <csander@purestorage.com> Reviewed-by: Ming Lei <ming.lei@redhat.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
2026-01-12ublk: move offset check out of __ublk_check_and_get_req()Caleb Sander Mateos
__ublk_check_and_get_req() checks that the passed in offset is within the data length of the specified ublk request. However, only user copy (ublk_check_and_get_req()) supports accessing ublk request data at a nonzero offset. Zero-copy buffer registration (ublk_register_io_buf()) always passes 0 for the offset, so the check is unnecessary. Move the check from __ublk_check_and_get_req() to ublk_check_and_get_req(). Signed-off-by: Caleb Sander Mateos <csander@purestorage.com> Reviewed-by: Ming Lei <ming.lei@redhat.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
2026-01-12ublk: inline ublk_check_and_get_req() into ublk_user_copy()Caleb Sander Mateos
ublk_check_and_get_req() has a single callsite in ublk_user_copy(). It takes a ton of arguments in order to pass local variables from ublk_user_copy() to ublk_check_and_get_req() and vice versa. And more are about to be added. Combine the functions to reduce the argument passing noise. Signed-off-by: Caleb Sander Mateos <csander@purestorage.com> Reviewed-by: Ming Lei <ming.lei@redhat.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
2026-01-12ublk: split out ublk_user_copy() helperCaleb Sander Mateos
ublk_ch_read_iter() and ublk_ch_write_iter() are nearly identical except for the iter direction. Split out a helper function ublk_user_copy() to reduce the code duplication as these functions are about to get larger. Signed-off-by: Caleb Sander Mateos <csander@purestorage.com> Reviewed-by: Ming Lei <ming.lei@redhat.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
2026-01-12ublk: split out ublk_copy_user_bvec() helperCaleb Sander Mateos
Factor a helper function ublk_copy_user_bvec() out of ublk_copy_user_pages(). It will be used for copying integrity data too. Signed-off-by: Caleb Sander Mateos <csander@purestorage.com> Reviewed-by: Ming Lei <ming.lei@redhat.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
2026-01-12ublk: set UBLK_IO_F_INTEGRITY in ublksrv_io_descCaleb Sander Mateos
Indicate to the ublk server when an incoming request has integrity data by setting UBLK_IO_F_INTEGRITY in the ublksrv_io_desc's op_flags field. Signed-off-by: Caleb Sander Mateos <csander@purestorage.com> Reviewed-by: Ming Lei <ming.lei@redhat.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
2026-01-12ublk: support UBLK_PARAM_TYPE_INTEGRITY in device creationStanley Zhang
Add a feature flag UBLK_F_INTEGRITY for a ublk server to request integrity/metadata support when creating a ublk device. The ublk server can also check for the feature flag on the created device or the result of UBLK_U_CMD_GET_FEATURES to tell if the ublk driver supports it. UBLK_F_INTEGRITY requires UBLK_F_USER_COPY, as user copy is the only data copy mode initially supported for integrity data. Add UBLK_PARAM_TYPE_INTEGRITY and struct ublk_param_integrity to struct ublk_params to specify the integrity params of a ublk device. UBLK_PARAM_TYPE_INTEGRITY requires UBLK_F_INTEGRITY and a nonzero metadata_size. The LBMD_PI_CAP_* and LBMD_PI_CSUM_* values from the linux/fs.h UAPI header are used for the flags and csum_type fields. If the UBLK_PARAM_TYPE_INTEGRITY flag is set, validate the integrity parameters and apply them to the blk_integrity limits. The struct ublk_param_integrity validations are based on the checks in blk_validate_integrity_limits(). Any invalid parameters should be rejected before being applied to struct blk_integrity. [csander: drop redundant pi_tuple_size field, use block metadata UAPI constants, add param validation] Signed-off-by: Stanley Zhang <stazhang@purestorage.com> Signed-off-by: Caleb Sander Mateos <csander@purestorage.com> Reviewed-by: Ming Lei <ming.lei@redhat.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
2026-01-12ublk: move ublk flag check functions earlierCaleb Sander Mateos
ublk_dev_support_user_copy() will be used in ublk_validate_params(). Move these functions next to ublk_{dev,queue}_is_zoned() to avoid needing to forward-declare them. Signed-off-by: Caleb Sander Mateos <csander@purestorage.com> Reviewed-by: Ming Lei <ming.lei@redhat.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
2026-01-12blk-integrity: take const pointer in blk_integrity_rq()Caleb Sander Mateos
blk_integrity_rq() doesn't modify the struct request passed in, so allow a const pointer to be passed. Use a matching signature for the !CONFIG_BLK_DEV_INTEGRITY version. Signed-off-by: Caleb Sander Mateos <csander@purestorage.com> Reviewed-by: Ming Lei <ming.lei@redhat.com> Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
2026-01-12landlock: Clarify documentation for the IOCTL access rightGünther Noack
Move the description of the LANDLOCK_ACCESS_FS_IOCTL_DEV access right together with the file access rights. This group of access rights applies to files (in this case device files), and they can be added to file or directory inodes using landlock_add_rule(2). The check for that works the same for all file access rights, including LANDLOCK_ACCESS_FS_IOCTL_DEV. Invoking ioctl(2) on directory FDs can not currently be restricted with Landlock. Having it grouped separately in the documentation is a remnant from earlier revisions of the LANDLOCK_ACCESS_FS_IOCTL_DEV patch set. Link: https://lore.kernel.org/all/20260108.Thaex5ruach2@digikod.net/ Signed-off-by: Günther Noack <gnoack3000@gmail.com> Link: https://lore.kernel.org/r/20260111175203.6545-2-gnoack3000@gmail.com Signed-off-by: Mickaël Salaün <mic@digikod.net>
2026-01-12cxl/hdm: Fix potential infinite loop in __cxl_dpa_reserve()Li Ming
In __cxl_dpa_reserve(), it will check if the new resource range is included in one of paritions of the cxl memory device. cxlds->nr_paritions is used to represent how many partitions information the cxl memory device has. In the loop, if driver cannot find a partition including the new resource range, it will be an infinite loop. [ dj: Removed incorrect fixes tag ] Fixes: 991d98f17d31 ("cxl: Make cxl_dpa_alloc() DPA partition number agnostic") Signed-off-by: Li Ming <ming.li@zohomail.com> Reviewed-by: Ira Weiny <ira.weiny@intel.com> Reviewed-by: Dave Jiang <dave.jiang@intel.com> Link: https://patch.msgid.link/20260112120526.530232-1-ming.li@zohomail.com Signed-off-by: Dave Jiang <dave.jiang@intel.com>
2026-01-12Merge patch series "fs: add immutable rootfs"Christian Brauner
Christian Brauner <brauner@kernel.org> says: Currently pivot_root() doesn't work on the real rootfs because it cannot be unmounted. Userspace has to do a recursive removal of the initramfs contents manually before continuing the boot. Really all we want from the real rootfs is to serve as the parent mount for anything that is actually useful such as the tmpfs or ramfs for initramfs unpacking or the rootfs itself. There's no need for the real rootfs to actually be anything meaningful or useful. Add a immutable rootfs called "nullfs" that can be selected via the "nullfs_rootfs" kernel command line option. The kernel will mount a tmpfs/ramfs on top of it, unpack the initramfs and fire up userspace which mounts the rootfs and can then just do: chdir(rootfs); pivot_root(".", "."); umount2(".", MNT_DETACH); and be done with it. (Ofc, userspace can also choose to retain the initramfs contents by using something like pivot_root(".", "/initramfs") without unmounting it.) Technically this also means that the rootfs mount in unprivileged namespaces doesn't need to become MNT_LOCKED anymore as it's guaranteed that the immutable rootfs remains permanently empty so there cannot be anything revealed by unmounting the covering mount. In the future this will also allow us to create completely empty mount namespaces without risking to leak anything. systemd already handles this all correctly as it tries to pivot_root() first and falls back to MS_MOVE only when that fails. This goes back to various discussion in previous years and a LPC 2024 presentation about this very topic. * patches from https://patch.msgid.link/20260112-work-immutable-rootfs-v2-0-88dd1c34a204@kernel.org: docs: mention nullfs fs: add immutable rootfs fs: add init_pivot_root() fs: ensure that internal tmpfs mount gets mount id zero Link: https://patch.msgid.link/20260112-work-immutable-rootfs-v2-0-88dd1c34a204@kernel.org Signed-off-by: Christian Brauner <brauner@kernel.org>
2026-01-12docs: mention nullfsChristian Brauner
Add a section about nullfs and how it enables pivot_root() to work. Link: https://patch.msgid.link/20260112-work-immutable-rootfs-v2-4-88dd1c34a204@kernel.org Signed-off-by: Christian Brauner <brauner@kernel.org>