1. 07 Mar, 2024 5 commits
    • Oliver Upton's avatar
      Merge branch kvm-arm64/vfio-normal-nc into kvmarm/next · 9bd8d7df
      Oliver Upton authored
      * kvm-arm64/vfio-normal-nc:
        : Normal-NC support for vfio-pci @ stage-2, courtesy of Ankit Agrawal
        :
        : KVM's policy to date has been that any and all MMIO mapping at stage-2
        : is treated as Device-nGnRE. This is primarily done due to concerns of
        : the guest triggering uncontainable failures in the system if they manage
        : to tickle the device / memory system the wrong way, though this is
        : unnecessarily restrictive for devices that can be reasoned as 'safe'.
        :
        : Unsurprisingly, the Device-* mapping can really hurt the performance of
        : assigned devices that can handle Gathering, and can be an outright
        : correctness issue if the guest driver does unaligned accesses.
        :
        : Rather than opening the floodgates to the full ecosystem of devices that
        : can be exposed to VMs, take the conservative approach and allow PCI
        : devices to be mapped as Normal-NC since it has been determined to be
        : 'safe'.
        vfio: Convey kvm that the vfio-pci device is wc safe
        KVM: arm64: Set io memory s2 pte as normalnc for vfio pci device
        mm: Introduce new flag to indicate wc safe
        KVM: arm64: Introduce new flag for non-cacheable IO memory
      Signed-off-by: default avatarOliver Upton <oliver.upton@linux.dev>
      9bd8d7df
    • Oliver Upton's avatar
      Merge branch kvm-arm64/lpi-xarray into kvmarm/next · 8dbc4110
      Oliver Upton authored
      * kvm-arm64/lpi-xarray:
        : xarray-based representation of vgic LPIs
        :
        : KVM's linked-list of LPI state has proven to be a bottleneck in LPI
        : injection paths, due to lock serialization when acquiring / releasing a
        : reference on an IRQ.
        :
        : Start the tedious process of reworking KVM's LPI injection by replacing
        : the LPI linked-list with an xarray, leveraging this to allow RCU readers
        : to walk it outside of the spinlock.
        KVM: arm64: vgic: Don't acquire the lpi_list_lock in vgic_put_irq()
        KVM: arm64: vgic: Ensure the irq refcount is nonzero when taking a ref
        KVM: arm64: vgic: Rely on RCU protection in vgic_get_lpi()
        KVM: arm64: vgic: Free LPI vgic_irq structs in an RCU-safe manner
        KVM: arm64: vgic: Use atomics to count LPIs
        KVM: arm64: vgic: Get rid of the LPI linked-list
        KVM: arm64: vgic-its: Walk the LPI xarray in vgic_copy_lpi_list()
        KVM: arm64: vgic-v3: Iterate the xarray to find pending LPIs
        KVM: arm64: vgic: Use xarray to find LPI in vgic_get_lpi()
        KVM: arm64: vgic: Store LPIs in an xarray
      Signed-off-by: default avatarOliver Upton <oliver.upton@linux.dev>
      8dbc4110
    • Oliver Upton's avatar
      Merge branch kvm-arm64/vm-configuration into kvmarm/next · 0d874858
      Oliver Upton authored
      * kvm-arm64/vm-configuration: (29 commits)
        : VM configuration enforcement, courtesy of Marc Zyngier
        :
        : Userspace has gained the ability to control the features visible
        : through the ID registers, yet KVM didn't take this into account as the
        : effective feature set when determing trap / emulation behavior. This
        : series adds:
        :
        :  - Mechanism for testing the presence of a particular CPU feature in the
        :    guest's ID registers
        :
        :  - Infrastructure for computing the effective value of VNCR-backed
        :    registers, taking into account the RES0 / RES1 bits for a particular
        :    VM configuration
        :
        :  - Implementation of 'fine-grained UNDEF' controls that shadow the FGT
        :    register definitions.
        KVM: arm64: Don't initialize idreg debugfs w/ preemption disabled
        KVM: arm64: Fail the idreg iterator if idregs aren't initialized
        KVM: arm64: Make build-time check of RES0/RES1 bits optional
        KVM: arm64: Add debugfs file for guest's ID registers
        KVM: arm64: Snapshot all non-zero RES0/RES1 sysreg fields for later checking
        KVM: arm64: Make FEAT_MOPS UNDEF if not advertised to the guest
        KVM: arm64: Make AMU sysreg UNDEF if FEAT_AMU is not advertised to the guest
        KVM: arm64: Make PIR{,E0}_EL1 UNDEF if S1PIE is not advertised to the guest
        KVM: arm64: Make TLBI OS/Range UNDEF if not advertised to the guest
        KVM: arm64: Streamline save/restore of HFG[RW]TR_EL2
        KVM: arm64: Move existing feature disabling over to FGU infrastructure
        KVM: arm64: Propagate and handle Fine-Grained UNDEF bits
        KVM: arm64: Add Fine-Grained UNDEF tracking information
        KVM: arm64: Rename __check_nv_sr_forward() to triage_sysreg_trap()
        KVM: arm64: Use the xarray as the primary sysreg/sysinsn walker
        KVM: arm64: Register AArch64 system register entries with the sysreg xarray
        KVM: arm64: Always populate the trap configuration xarray
        KVM: arm64: nv: Move system instructions to their own sys_reg_desc array
        KVM: arm64: Drop the requirement for XARRAY_MULTI
        KVM: arm64: nv: Turn encoding ranges into discrete XArray stores
        ...
      Signed-off-by: default avatarOliver Upton <oliver.upton@linux.dev>
      0d874858
    • Oliver Upton's avatar
      Merge branch kvm-arm64/misc into kvmarm/next · a040adfb
      Oliver Upton authored
      * kvm-arm64/misc:
        : Miscellaneous updates
        :
        :  - Fix handling of features w/ nonzero safe values in set_id_regs
        :    selftest
        :
        :  - Cleanup the unused kern_hyp_va() asm macro
        :
        :  - Differentiate nVHE and hVHE in boot-time message
        :
        :  - Several selftests cleanups
        :
        :  - Drop bogus return value from kvm_arch_create_vm_debugfs()
        :
        :  - Make save/restore of SPE and TRBE control registers affect EL1 state
        :    in hVHE mode
        :
        :  - Typos
        KVM: arm64: Fix TRFCR_EL1/PMSCR_EL1 access in hVHE mode
        KVM: selftests: aarch64: Remove unused functions from vpmu test
        KVM: arm64: Fix typos
        KVM: Get rid of return value from kvm_arch_create_vm_debugfs()
        KVM: selftests: Print timer ctl register in ISTATUS assertion
        KVM: selftests: Fix GUEST_PRINTF() format warnings in ARM code
        KVM: arm64: removed unused kern_hyp_va asm macro
        KVM: arm64: add comments to __kern_hyp_va
        KVM: arm64: print Hyp mode
        KVM: arm64: selftests: Handle feature fields with nonzero minimum value correctly
      Signed-off-by: default avatarOliver Upton <oliver.upton@linux.dev>
      a040adfb
    • Oliver Upton's avatar
      Merge branch kvm-arm64/feat_e2h0 into kvmarm/next · 262cd16e
      Oliver Upton authored
      * kvm-arm64/feat_e2h0:
        : Support for FEAT_E2H0, courtesy of Marc Zyngier
        :
        : As described in the cover letter:
        :
        :   Since ARMv8.1, the architecture has grown the VHE feature, which makes
        :   EL2 a superset of EL1. With ARMv9.5 (and retroactively allowed from
        :   ARMv8.1), the architecture allows implementations to have VHE as the
        :   *only* implemented behaviour, meaning that HCR_EL2.E2H can be
        :   implemented as RES1. As a follow-up, HCR_EL2.NV1 can also be
        :   implemented as RES0, making the VHE-ness of the architecture
        :   recursive.
        :
        : This series adds support for detecting the architectural feature of E2H
        : being RES1, leveraging the existing infrastructure for handling
        : out-of-spec CPUs that are VHE-only. Additionally, the (incomplete) NV
        : infrastructure in KVM is updated to enforce E2H=1 for guest hypervisors
        : on implementations that do not support NV1.
        arm64: cpufeatures: Fix FEAT_NV check when checking for FEAT_NV1
        arm64: cpufeatures: Only check for NV1 if NV is present
        arm64: cpufeatures: Add missing ID_AA64MMFR4_EL1 to __read_sysreg_by_encoding()
        KVM: arm64: Handle Apple M2 as not having HCR_EL2.NV1 implemented
        KVM: arm64: Force guest's HCR_EL2.E2H RES1 when NV1 is not implemented
        KVM: arm64: Expose ID_AA64MMFR4_EL1 to guests
        arm64: Treat HCR_EL2.E2H as RES1 when ID_AA64MMFR4_EL1.E2H0 is negative
        arm64: cpufeature: Detect HCR_EL2.NV1 being RES0
        arm64: cpufeature: Add ID_AA64MMFR4_EL1 handling
        arm64: sysreg: Add layout for ID_AA64MMFR4_EL1
        arm64: cpufeature: Correctly display signed override values
        arm64: cpufeatures: Correctly handle signed values
        arm64: Add macro to compose a sysreg field value
      Signed-off-by: default avatarOliver Upton <oliver.upton@linux.dev>
      262cd16e
  2. 01 Mar, 2024 1 commit
  3. 29 Feb, 2024 1 commit
  4. 27 Feb, 2024 2 commits
    • Oliver Upton's avatar
      KVM: arm64: Don't initialize idreg debugfs w/ preemption disabled · 5c1ebe9a
      Oliver Upton authored
      Testing KVM with DEBUG_ATOMIC_SLEEP enabled doesn't get far before hitting the
      first splat:
      
        BUG: sleeping function called from invalid context at kernel/locking/rwsem.c:1578
        in_atomic(): 1, irqs_disabled(): 0, non_block: 0, pid: 13062, name: vgic_lpi_stress
        preempt_count: 1, expected: 0
        2 locks held by vgic_lpi_stress/13062:
         #0: ffff080084553240 (&vcpu->mutex){+.+.}-{3:3}, at: kvm_vcpu_ioctl+0xc0/0x13f0
         #1: ffff800080485f08 (&kvm->arch.config_lock){+.+.}-{3:3}, at: kvm_arch_vcpu_ioctl+0xd60/0x1788
        CPU: 19 PID: 13062 Comm: vgic_lpi_stress Tainted: G        W  O       6.8.0-dbg-DEV #1
        Call trace:
         dump_backtrace+0xf8/0x148
         show_stack+0x20/0x38
         dump_stack_lvl+0xb4/0xf8
         dump_stack+0x18/0x40
         __might_resched+0x248/0x2a0
         __might_sleep+0x50/0x88
         down_write+0x30/0x150
         start_creating+0x90/0x1a0
         __debugfs_create_file+0x5c/0x1b0
         debugfs_create_file+0x34/0x48
         kvm_reset_sys_regs+0x120/0x1e8
         kvm_reset_vcpu+0x148/0x270
         kvm_arch_vcpu_ioctl+0xddc/0x1788
         kvm_vcpu_ioctl+0xb6c/0x13f0
         __arm64_sys_ioctl+0x98/0xd8
         invoke_syscall+0x48/0x108
         el0_svc_common+0xb4/0xf0
         do_el0_svc+0x24/0x38
         el0_svc+0x54/0x128
         el0t_64_sync_handler+0x68/0xc0
         el0t_64_sync+0x1a8/0x1b0
      
      kvm_reset_vcpu() disables preemption as it needs to unload vCPU state
      from the CPU to twiddle with it, which subsequently explodes when
      taking the parent inode's rwsem while creating the idreg debugfs file.
      
      Fix it by moving the initialization to kvm_arch_create_vm_debugfs().
      
      Fixes: 89176658 ("KVM: arm64: Add debugfs file for guest's ID registers")
      Reviewed-by: default avatarMarc Zyngier <maz@kernel.org>
      Link: https://lore.kernel.org/r/20240227094115.1723330-3-oliver.upton@linux.devSigned-off-by: default avatarOliver Upton <oliver.upton@linux.dev>
      5c1ebe9a
    • Oliver Upton's avatar
      KVM: arm64: Fail the idreg iterator if idregs aren't initialized · 29ef55ce
      Oliver Upton authored
      Return an error to userspace if the VM's ID register values haven't been
      initialized in preparation for changing the debugfs file initialization
      order.
      Reviewed-by: default avatarMarc Zyngier <maz@kernel.org>
      Link: https://lore.kernel.org/r/20240227094115.1723330-2-oliver.upton@linux.devSigned-off-by: default avatarOliver Upton <oliver.upton@linux.dev>
      29ef55ce
  5. 24 Feb, 2024 5 commits
    • Ankit Agrawal's avatar
      vfio: Convey kvm that the vfio-pci device is wc safe · a39d3a96
      Ankit Agrawal authored
      The VM_ALLOW_ANY_UNCACHED flag is implemented for ARM64,
      allowing KVM stage 2 device mapping attributes to use Normal-NC
      rather than DEVICE_nGnRE, which allows guest mappings supporting
      write-combining attributes (WC). ARM does not architecturally
      guarantee this is safe, and indeed some MMIO regions like the GICv2
      VCPU interface can trigger uncontained faults if Normal-NC is used.
      
      To safely use VFIO in KVM the platform must guarantee full safety
      in the guest where no action taken against a MMIO mapping can
      trigger an uncontained failure. The expectation is that most VFIO PCI
      platforms support this for both mapping types, at least in common
      flows, based on some expectations of how PCI IP is integrated. So
      make vfio-pci set the VM_ALLOW_ANY_UNCACHED flag.
      Suggested-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
      Acked-by: default avatarJason Gunthorpe <jgg@nvidia.com>
      Acked-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
      Acked-by: default avatarAlex Williamson <alex.williamson@redhat.com>
      Reviewed-by: default avatarDavid Hildenbrand <david@redhat.com>
      Reviewed-by: default avatarMarc Zyngier <maz@kernel.org>
      Signed-off-by: default avatarAnkit Agrawal <ankita@nvidia.com>
      Link: https://lore.kernel.org/r/20240224150546.368-5-ankita@nvidia.comSigned-off-by: default avatarOliver Upton <oliver.upton@linux.dev>
      a39d3a96
    • Ankit Agrawal's avatar
      KVM: arm64: Set io memory s2 pte as normalnc for vfio pci device · 8c47ce3e
      Ankit Agrawal authored
      To provide VM with the ability to get device IO memory with NormalNC
      property, map device MMIO in KVM for ARM64 at stage2 as NormalNC.
      Having NormalNC S2 default puts guests in control (based on [1],
      "Combining stage 1 and stage 2 memory type attributes") of device
      MMIO regions memory mappings. The rules are summarized below:
      ([(S1) - stage1], [(S2) - stage 2])
      
      S1           |  S2           | Result
      NORMAL-WB    |  NORMAL-NC    | NORMAL-NC
      NORMAL-WT    |  NORMAL-NC    | NORMAL-NC
      NORMAL-NC    |  NORMAL-NC    | NORMAL-NC
      DEVICE<attr> |  NORMAL-NC    | DEVICE<attr>
      
      Still this cannot be generalized to non PCI devices such as GICv2.
      There is insufficient information and uncertainity in the behavior
      of non PCI driver. A driver must indicate support using the
      new flag VM_ALLOW_ANY_UNCACHED.
      
      Adapt KVM to make use of the flag VM_ALLOW_ANY_UNCACHED as indicator to
      activate the S2 setting to NormalNc.
      
      [1] section D8.5.5 of DDI0487J_a_a-profile_architecture_reference_manual.pdf
      Suggested-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
      Acked-by: default avatarJason Gunthorpe <jgg@nvidia.com>
      Reviewed-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
      Reviewed-by: default avatarMarc Zyngier <maz@kernel.org>
      Signed-off-by: default avatarAnkit Agrawal <ankita@nvidia.com>
      Link: https://lore.kernel.org/r/20240224150546.368-4-ankita@nvidia.comSigned-off-by: default avatarOliver Upton <oliver.upton@linux.dev>
      8c47ce3e
    • Ankit Agrawal's avatar
      mm: Introduce new flag to indicate wc safe · 5c656fcd
      Ankit Agrawal authored
      The VM_ALLOW_ANY_UNCACHED flag is implemented for ARM64, allowing KVM
      stage 2 device mapping attributes to use NormalNC rather than
      DEVICE_nGnRE, which allows guest mappings supporting write-combining
      attributes (WC). ARM does not architecturally guarantee this is safe,
      and indeed some MMIO regions like the GICv2 VCPU interface can trigger
      uncontained faults if NormalNC is used.
      
      Even worse, the expectation is that there are platforms where even
      DEVICE_nGnRE can allow uncontained faults in corner cases. Unfortunately
      existing ARM IP requires platform integration to take responsibility to
      prevent this.
      
      To safely use VFIO in KVM the platform must guarantee full safety in the
      guest where no action taken against a MMIO mapping can trigger an
      uncontained failure. The assumption is that most VFIO PCI platforms
      support this for both mapping types, at least in common flows, based
      on some expectations of how PCI IP is integrated. This can be enabled
      more broadly, for instance into vfio-platform drivers, but only after
      the platform vendor completes auditing for safety.
      
      The VMA flag VM_ALLOW_ANY_UNCACHED was found to be the simplest and
      cleanest way to communicate the information from VFIO to KVM that
      mapping the region in S2 as NormalNC is safe. KVM consumes it to
      activate the code that does the S2 mapping as NormalNC.
      Suggested-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
      Reviewed-by: default avatarJason Gunthorpe <jgg@nvidia.com>
      Reviewed-by: default avatarMarc Zyngier <maz@kernel.org>
      Acked-by: default avatarDavid Hildenbrand <david@redhat.com>
      Signed-off-by: default avatarAnkit Agrawal <ankita@nvidia.com>
      Link: https://lore.kernel.org/r/20240224150546.368-3-ankita@nvidia.comSigned-off-by: default avatarOliver Upton <oliver.upton@linux.dev>
      5c656fcd
    • Ankit Agrawal's avatar
      KVM: arm64: Introduce new flag for non-cacheable IO memory · c034ec84
      Ankit Agrawal authored
      Currently, KVM for ARM64 maps at stage 2 memory that is considered device
      (i.e. it is not RAM) with DEVICE_nGnRE memory attributes; this setting
      overrides (as per the ARM architecture [1]) any device MMIO mapping
      present at stage 1, resulting in a set-up whereby a guest operating
      system cannot determine device MMIO mapping memory attributes on its
      own but it is always overridden by the KVM stage 2 default.
      
      This set-up does not allow guest operating systems to select device
      memory attributes independently from KVM stage-2 mappings
      (refer to [1], "Combining stage 1 and stage 2 memory type attributes"),
      which turns out to be an issue in that guest operating systems
      (e.g. Linux) may request to map devices MMIO regions with memory
      attributes that guarantee better performance (e.g. gathering
      attribute - that for some devices can generate larger PCIe memory
      writes TLPs) and specific operations (e.g. unaligned transactions)
      such as the NormalNC memory type.
      
      The default device stage 2 mapping was chosen in KVM for ARM64 since
      it was considered safer (i.e. it would not allow guests to trigger
      uncontained failures ultimately crashing the machine) but this
      turned out to be asynchronous (SError) defeating the purpose.
      
      Failures containability is a property of the platform and is independent
      from the memory type used for MMIO device memory mappings.
      
      Actually, DEVICE_nGnRE memory type is even more problematic than
      Normal-NC memory type in terms of faults containability in that e.g.
      aborts triggered on DEVICE_nGnRE loads cannot be made, architecturally,
      synchronous (i.e. that would imply that the processor should issue at
      most 1 load transaction at a time - it cannot pipeline them - otherwise
      the synchronous abort semantics would break the no-speculation attribute
      attached to DEVICE_XXX memory).
      
      This means that regardless of the combined stage1+stage2 mappings a
      platform is safe if and only if device transactions cannot trigger
      uncontained failures and that in turn relies on platform capabilities
      and the device type being assigned (i.e. PCIe AER/DPC error containment
      and RAS architecture[3]); therefore the default KVM device stage 2
      memory attributes play no role in making device assignment safer
      for a given platform (if the platform design adheres to design
      guidelines outlined in [3]) and therefore can be relaxed.
      
      For all these reasons, relax the KVM stage 2 device memory attributes
      from DEVICE_nGnRE to Normal-NC.
      
      The NormalNC was chosen over a different Normal memory type default
      at stage-2 (e.g. Normal Write-through) to avoid cache allocation/snooping.
      
      Relaxing S2 KVM device MMIO mappings to Normal-NC is not expected to
      trigger any issue on guest device reclaim use cases either (i.e. device
      MMIO unmap followed by a device reset) at least for PCIe devices, in that
      in PCIe a device reset is architected and carried out through PCI config
      space transactions that are naturally ordered with respect to MMIO
      transactions according to the PCI ordering rules.
      
      Having Normal-NC S2 default puts guests in control (thanks to
      stage1+stage2 combined memory attributes rules [1]) of device MMIO
      regions memory mappings, according to the rules described in [1]
      and summarized here ([(S1) - stage1], [(S2) - stage 2]):
      
      S1           |  S2           | Result
      NORMAL-WB    |  NORMAL-NC    | NORMAL-NC
      NORMAL-WT    |  NORMAL-NC    | NORMAL-NC
      NORMAL-NC    |  NORMAL-NC    | NORMAL-NC
      DEVICE<attr> |  NORMAL-NC    | DEVICE<attr>
      
      It is worth noting that currently, to map devices MMIO space to user
      space in a device pass-through use case the VFIO framework applies memory
      attributes derived from pgprot_noncached() settings applied to VMAs, which
      result in device-nGnRnE memory attributes for the stage-1 VMM mappings.
      
      This means that a userspace mapping for device MMIO space carried
      out with the current VFIO framework and a guest OS mapping for the same
      MMIO space may result in a mismatched alias as described in [2].
      
      Defaulting KVM device stage-2 mappings to Normal-NC attributes does not
      change anything in this respect, in that the mismatched aliases would
      only affect (refer to [2] for a detailed explanation) ordering between
      the userspace and GuestOS mappings resulting stream of transactions
      (i.e. it does not cause loss of property for either stream of
      transactions on its own), which is harmless given that the userspace
      and GuestOS access to the device is carried out through independent
      transactions streams.
      
      A Normal-NC flag is not present today. So add a new kvm_pgtable_prot
      (KVM_PGTABLE_PROT_NORMAL_NC) flag for it, along with its
      corresponding PTE value 0x5 (0b101) determined from [1].
      
      Lastly, adapt the stage2 PTE property setter function
      (stage2_set_prot_attr) to handle the NormalNC attribute.
      
      The entire discussion leading to this patch series may be followed through
      the following links.
      Link: https://lore.kernel.org/all/20230907181459.18145-3-ankita@nvidia.com
      Link: https://lore.kernel.org/r/20231205033015.10044-1-ankita@nvidia.com
      
      [1] section D8.5.5 - DDI0487J_a_a-profile_architecture_reference_manual.pdf
      [2] section B2.8 - DDI0487J_a_a-profile_architecture_reference_manual.pdf
      [3] sections 1.7.7.3/1.8.5.2/appendix C - DEN0029H_SBSA_7.1.pdf
      Suggested-by: default avatarJason Gunthorpe <jgg@nvidia.com>
      Acked-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
      Acked-by: default avatarWill Deacon <will@kernel.org>
      Reviewed-by: default avatarMarc Zyngier <maz@kernel.org>
      Signed-off-by: default avatarAnkit Agrawal <ankita@nvidia.com>
      Link: https://lore.kernel.org/r/20240224150546.368-2-ankita@nvidia.comSigned-off-by: default avatarOliver Upton <oliver.upton@linux.dev>
      c034ec84
    • Bjorn Helgaas's avatar
      KVM: arm64: Fix typos · 75841d89
      Bjorn Helgaas authored
      Fix typos, most reported by "codespell arch/arm64".  Only touches comments,
      no code changes.
      Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
      Cc: James Morse <james.morse@arm.com>
      Cc: Suzuki K Poulose <suzuki.poulose@arm.com>
      Cc: Zenghui Yu <yuzenghui@huawei.com>
      Cc: Catalin Marinas <catalin.marinas@arm.com>
      Cc: Will Deacon <will@kernel.org>
      Cc: linux-arm-kernel@lists.infradead.org
      Cc: kvmarm@lists.linux.dev
      Reviewed-by: default avatarZenghui Yu <yuzenghui@huawei.com>
      Reviewed-by: default avatarRandy Dunlap <rdunlap@infradead.org>
      Link: https://lore.kernel.org/r/20240103231605.1801364-6-helgaas@kernel.orgSigned-off-by: default avatarOliver Upton <oliver.upton@linux.dev>
      75841d89
  6. 23 Feb, 2024 11 commits
  7. 22 Feb, 2024 1 commit
  8. 19 Feb, 2024 14 commits