Platform Software Patches and Configurations: Grace#
This section provides information about software patches and configuration settings that are required or recommended for I/O virtualization on the Grace platform.
Linux Kernel Patches#
This section provides information about the Linux Kernel patches that support I/O virtualization on the Grace platform.
Note
The patches and configurations in the Grace bare metal section are also relevant to host and guest virtual environments.
Upstream Linux Kernel#
The tables in this section list Linux kernel patches that are upstream, which means that the patches are accepted into the main Linux kernel branch, or that have been posted to the Linux Kernel Mailing List (LKML) and are currently undergoing the community review process.
Note
There might be circumstances where additional, dependent patches are required to support the patches listed in these tables (for example, when the patch listed is part of a larger series). Additionally, there might be situations where not all of the patches included in the series were taken upstream. These are typically documented in follow-on LKML discussion.
The LKML discussion and Git description are pulled directly from their respective source and are intended to help with searches and comparisons. These strings might contain spelling and grammatical errors.
Guest Kernel I/O Virtualization: General Fixes and Enablement#
The following table contains patches that are required for guest I/O virtualization support on the Grace platform. Note that these patches must also be present on the host.
LKML Discussion |
Git Commit |
Git Description |
Minimum Linux Kernel Release |
|---|---|---|---|
dax/kmem: Fix leak of memory-hotplug resources |
v6.3 |
||
arm64/smmu: use TLBI ASID when invalidating entire range |
v6.6 |
||
mmu_notifiers: fixup comment in mmu_interval_read_begin() |
|||
mmu_notifiers: call invalidate_range() when invalidating TLBs |
|||
mmu_notifiers: don’t invalidate secondary TLBs as part of mmu_notifier_invalidate_range_end() |
|||
mmu_notifiers: rename invalidate_range notifier |
Host Kernel I/O Virtualization: GPU Passthrough#
The following table contains patches that are required for GPU passthrough support on the Grace platform. This support includes host GPU passthrough, vGPU (including QoS), and MIG. Note that GPU passthrough also requires the guest and host kernel core SMMU virtualization support in the tables below.
LKML Discussion |
Git Commit |
Git Description |
Minimum Linux Kernel Release |
|---|---|---|---|
vfio/pci: rename and export do_io_rw() |
v6.9 |
||
vfio/pci: rename and export range_intersect_range |
|||
vfio/nvgrace-gpu: Add vfio pci variant module for grace hopper |
|||
KVM: arm64: Introduce new flag for non-cacheable IO memory |
|||
mm: Introduce new flag to indicate wc safe |
|||
KVM: arm64: Set io memory s2 pte as normalnc for vfio pci device |
|||
vfio: Convey kvm that the vfio-pci device is wc safe |
|||
vfio/nvgrace-gpu: Convey kvm to map device memory region as noncached |
|||
vfio/nvgrace-gpu: Add a new GH200 SKU to the devid table |
v6.13 |
||
vfio/nvgrace-gpu: Read dvsec register to determine need for uncached resmem |
v6.14 |
||
vfio/nvgrace-gpu: Expose the blackwell device PF BAR1 to the VM |
|||
vfio/nvgrace-gpu: Check the HBM training and C2C link status |
|||
vfio/nvgrace-gpu: Add GB200 SKU to the devid table |
|||
KVM: arm64: Rename the device variable to s2_force_noncacheable |
v6.17 |
||
KVM: arm64: Assume non-PFNMAP/MIXEDMAP VMAs can be mapped cacheable |
|||
KVM: arm64: Block cacheable PFNMAP mapping |
|||
KVM: arm64: Allow cacheable stage 2 mapping using VMA flags |
|||
KVM: arm64: Expose new KVM cap for cacheable PFNMAP |
|||
vfio/nvgrace-gpu: Add GB300 SKU to the devid table |
v6.18 |
||
KVM: arm64: VM exit to userspace to handle SEA |
v6.19 |
||
KVM: selftests: Test for KVM_EXIT_ARM_SEA |
|||
Documentation: kvm: new UAPI for handling SEA |
|||
mm: change ghes code to allow poison of non-struct pfn |
|||
mm: handle poisoning of pfn without struct pages |
|||
vfio: refactor vfio_pci_mmap_huge_fault function |
|||
vfio/nvgrace-gpu: Add support for huge pfnmap |
|||
vfio: use vfio_pci_core_setup_barmap to map bar in mmap |
|||
vfio/nvgrace-gpu: split the code to wait for GPU ready |
|||
vfio/nvgrace-gpu: Inform devmem unmapped after reset |
|||
vfio/nvgrace-gpu: wait for the GPU mem to be ready |
|||
mm: fixup pfnmap memory failure handling to use pgoff |
|||
vfio/nvgrace-gpu: register device memory for poison handling |
v7.0 |
||
mm: add stubs for PFNMAP memory failure registration functions |
Guest Kernel I/O Virtualization: Core SMMU#
The following table contains patches that are required for guest core SMMU virtualization support on the Grace platform. Note that these patches must also be present on the host.
LKML Discussion |
Git Commit |
Git Description |
Minimum Linux Kernel Release |
|---|---|---|---|
iommu/arm-smmu-v3: Convert to domain_alloc_sva() |
v6.11 |
||
iommu/arm-smmu-v3: Start building a generic PASID layer |
|||
iommu/arm-smmu-v3: Make smmu_domain->devices into an allocated list |
|||
iommu/arm-smmu-v3: Make changing domains be hitless for ATS |
|||
iommu/arm-smmu-v3: Add ssid to struct arm_smmu_master_domain |
|||
iommu/arm-smmu-v3: Do not use master->sva_enable to restrict attaches |
|||
iommu/arm-smmu-v3: Thread SSID through the arm_smmu_attach_*() interface |
|||
iommu/arm-smmu-v3: Make SVA allocate a normal arm_smmu_domain |
|||
iommu/arm-smmu-v3: Keep track of arm_smmu_master_domain for SVA |
|||
iommu/arm-smmu-v3: Put the SVA mmu notifier in the smmu_domain |
|||
iommu/arm-smmu-v3: Allow IDENTITY/BLOCKED to be set while PASID is used |
|||
iommu/arm-smmu-v3: Test the STE S1DSS functionality |
|||
iommu/arm-smmu-v3: Allow a PASID to be set when RID is IDENTITY/BLOCKED |
|||
iommu/arm-smmu-v3: Allow setting a S1 domain to a PASID |
|||
iommu/arm-smmuv3: Update comments about ATS and bypass |
v6.14 |
||
Fix mmu notifiers for range-based invalidates |
|||
iommu/tegra241-cmdqv: Fix warnings due to dmam_free_coherent() |
v6.15 |
||
iommu/arm-smmu-v3: Fix smmu_domain->nr_ats_masters decrement |
v6.17 |
Host Kernel I/O Virtualization: Core SMMU#
The following table contains patches that are required for host core SMMU virtualization support (SMMUv3 and IOMMUFD) on the Grace platform. This support includes ATS and PASID functionality, which is required by CUDA on the Grace platform.
LKML Discussion |
Git Commit |
Git Description |
Minimum Linux Kernel Release |
|---|---|---|---|
iommu/arm-smmu-v3: Fix size calculation in arm_smmu_mm_invalidate_range() |
v5.18 |
||
iommu: Introduce the domain op enforce_cache_coherency() |
v5.19 |
||
vfio: Move the Intel no-snoop control off of IOMMU_CACHE |
|||
iommu: Redefine IOMMU_CAP_CACHE_COHERENCY as the cap flag for IOMMU_CACHE |
|||
vfio: Require that devices support DMA cache coherence |
|||
iommu: Add DMA ownership management interfaces |
|||
driver core: Add dma_cleanup callback in bus_type |
|||
amba: Stop sharing platform_dma_configure() |
|||
bus: platform,amba,fsl-mc,PCI: Add device DMA ownership management |
|||
PCI: pci_stub: Set driver_managed_dma |
|||
PCI: portdrv: Set driver_managed_dma |
|||
vfio: Set DMA ownership for VFIO devices |
|||
vfio: Remove use of vfio_group_viable() |
|||
vfio: Delete the unbound_list |
|||
vfio: Remove iommu group notifier |
|||
iommu: Remove iommu group changes notifier |
|||
vfio: Delete container_q |
|||
vfio: Make vfio_(un)register_notifier accept a vfio_device |
|||
vfio/ccw: Remove mdev from struct channel_program |
|||
vfio/mdev: Pass in a struct vfio_device * to vfio_pin/unpin_pages() |
|||
vfio/mdev: Pass in a struct vfio_device * to vfio_dma_rw() |
|||
drm/i915/gvt: Change from vfio_group_(un)pin_pages to vfio_(un)pin_pages |
|||
vfio: Remove dead code |
|||
vfio: Remove calls to vfio_group_add_container_user() |
|||
kvm/vfio: Move KVM_DEV_VFIO_GROUP_* ioctls into functions |
|||
kvm/vfio: Store the struct file in the kvm_vfio_group |
|||
vfio: Change vfio_external_user_iommu_id() to vfio_file_iommu_group() |
|||
vfio: Remove vfio_external_group_match_file() |
|||
vfio: Change vfio_external_check_extension() to vfio_file_enforced_coherent() |
|||
vfio: Change vfio_group_set_kvm() to vfio_file_set_kvm() |
|||
kvm/vfio: Remove vfio_group from kvm |
|||
vfio/pci: Use the struct file as the handle not the vfio_group |
|||
vfio: Add missing locking for struct vfio_group::kvm |
|||
vfio: Change struct vfio_group::opened from an atomic to bool |
|||
vfio: Split up vfio_group_get_device_fd() |
|||
vfio: Fully lock struct vfio_group::container |
|||
vfio: Simplify the life cycle of the group FD |
|||
vfio: Change struct vfio_group::container_users to a non-atomic int |
|||
vfio: Replace the DMA unmapping notifier with a callback |
v6.0 |
||
vfio: Replace the iommu notifier with a device list |
|||
vfio: Make vfio_unpin_pages() return void |
|||
drm/i915/gvt: Replace roundup with DIV_ROUND_UP |
|||
vfio/ap: Pass in physical address of ind to ap_aqic() |
|||
vfio/ccw: Only pass in contiguous pages |
|||
vfio: Pass in starting IOVA to vfio_pin/unpin_pages API |
|||
vfio/ap: Change saved_pfn to saved_iova |
|||
vfio/ccw: Change pa_pfn list to pa_iova list |
|||
vfio: Rename user_iova of vfio_dma_rw() |
|||
vfio/ccw: Add kmap_local_page() for memcpy |
|||
vfio: Replace phys_pfn with pages for vfio_pin_pages() |
|||
vfio/pci: Split linux/vfio_pci_core.h |
v6.1 |
||
vfio/pci: Rename vfio_pci_register_dev_region() |
|||
vfio/pci: Simplify the is_intx/msi/msix/etc defines |
|||
vfio-pci: Fix vfio_pci_ioeventfd() to return int |
|||
vfio-pci: Break up vfio_pci_core_ioctl() into one function per ioctl |
|||
vfio-pci: Re-indent what was vfio_pci_core_ioctl() |
|||
vfio-pci: Replace ‘void __user *’ with proper types in the ioctl functions |
|||
vfio: Fold VFIO_GROUP_GET_DEVICE_FD into vfio_group_get_device_fd() |
|||
vfio: Fold VFIO_GROUP_SET_CONTAINER into vfio_group_set_container() |
|||
vfio: Follow the naming pattern for vfio_group_ioctl_unset_container() |
|||
vfio: Split VFIO_GROUP_GET_STATUS into a function |
|||
net/mlx5: Introduce ifc bits for page tracker |
|||
net/mlx5: Query ADV_VIRTUALIZATION capabilities |
|||
vfio: Introduce DMA logging uAPIs |
|||
vfio: Add an IOVA bitmap support |
|||
vfio: Introduce the DMA logging feature support |
|||
vfio/mlx5: Init QP based resources for dirty tracking |
|||
vfio/mlx5: Create and destroy page tracker object |
|||
vfio/mlx5: Report dirty pages from tracker |
|||
vfio/mlx5: Manage error scenarios on tracker |
|||
vfio/mlx5: Set the driver DMA logging callbacks |
|||
vfio: Add helpers for unifying vfio_device life cycle |
|||
vfio/pci: Use the new device life cycle helpers |
|||
vfio/mlx5: Use the new device life cycle helpers |
|||
vfio/hisi_acc: Use the new device life cycle helpers |
|||
vfio/mdpy: Use the new device life cycle helpers |
|||
vfio/mtty: Use the new device life cycle helpers |
|||
vfio/mbochs: Use the new device life cycle helpers |
|||
drm/i915/gvt: Use the new device life cycle helpers |
|||
vfio/ap: Use the new device life cycle helpers |
|||
vfio/fsl-mc: Use the new device life cycle helpers |
|||
vfio/platform: Use the new device life cycle helpers |
|||
vfio/amba: Use the new device life cycle helpers |
|||
vfio/ccw: Use the new device life cycle helpers |
|||
vfio: Rename vfio_device_put() and vfio_device_try_get() |
|||
vfio: Add struct device to vfio_device |
|||
drm/i915/gvt: fix a memory leak in intel_gvt_init_vgpu_types |
|||
drm/i915/gvt: simplify vgpu configuration management |
|||
vfio/mdev: make mdev.h standalone includable |
|||
vfio/mdev: embedd struct mdev_parent in the parent data structure |
|||
vfio/mdev: simplify mdev_type handling |
|||
vfio/mdev: remove mdev_from_dev |
|||
vfio/mdev: unexport mdev_bus_type |
|||
vfio/mdev: remove mdev_parent_dev |
|||
vfio/mdev: remove mtype_get_parent_dev |
|||
vfio/mdev: consolidate all the device_api sysfs into the core code |
|||
vfio/mdev: consolidate all the name sysfs into the core code |
|||
vfio/mdev: consolidate all the available_instance sysfs into the core code |
|||
vfio/mdev: consolidate all the description sysfs into the core code |
|||
vfio/mdev: add mdev available instance checking to the core |
|||
vfio: Remove the vfio_group->users and users_comp |
|||
vfio: Change vfio_group->group_rwsem to a mutex |
|||
vfio: Add header guards and includes to drivers/vfio/vfio.h |
|||
vfio: Rename __vfio_group_unset_container() |
|||
vfio: Split the container logic into vfio_container_attach_group() |
|||
vfio: Remove #ifdefs around CONFIG_VFIO_NOIOMMU |
|||
vfio: Split out container code from the init/cleanup functions |
|||
vfio: Rename vfio_ioctl_check_extension() |
|||
vfio: Split the register_device ops call into functions |
|||
vfio: Move container code into drivers/vfio/container.c |
|||
iommu/amd: Drop unnecessary checks in amd_iommu_attach_device() |
v6.2 |
||
iommu: Add return value rules to attach_dev op and APIs |
|||
iommu: Regulate EINVAL in ->attach_dev callback functions |
|||
iommu: Use EINVAL for incompatible device/domain in ->attach_dev |
|||
iommu: Propagate return value in ->attach_dev callback functions |
|||
iommu: Add max_pasids field in struct iommu_device |
|||
iommu: Add max_pasids field in struct dev_iommu |
|||
iommu: Remove SVM_FLAG_SUPERVISOR_MODE support |
|||
PCI: Enable PASID only when ACS RR & UF enabled on upstream path |
|||
iommu: Add attach/detach_dev_pasid iommu interfaces |
|||
iommu: Add IOMMU SVA domain support |
|||
iommu/vt-d: Add SVA domain support |
|||
arm-smmu-v3/sva: Add SVA domain support |
|||
iommu/sva: Refactoring iommu_sva_bind/unbind_device() |
|||
iommu: Remove SVA related callbacks from iommu ops |
|||
iommu: Prepare IOMMU domain for IOPF |
|||
iommu: Per-domain I/O page fault handling |
|||
iommu: Rename iommu-sva-lib.{c,h} |
|||
iommu: Add IOMMU_CAP_ENFORCE_CACHE_COHERENCY |
|||
iommu: Add device-centric DMA ownership interfaces |
|||
interval-tree: Add a utility to iterate over spans in an interval tree |
|||
scripts/kernel-doc: support EXPORT_SYMBOL_NS_GPL() with -export |
|||
iommufd: Document overview of iommufd |
|||
iommufd: File descriptor, context, kconfig and makefiles |
|||
kernel/user: Allow user_struct::locked_vm to be usable for iommufd |
|||
iommufd: PFN handling for iopt_pages |
|||
iommufd: Algorithms for PFN storage |
|||
iommufd: Data structure to provide IOVA to PFN mapping |
|||
iommufd: IOCTLs for the io_pagetable |
|||
iommufd: Add a HW pagetable object |
|||
iommufd: Add kAPI toward external drivers for physical devices |
|||
iommufd: Add kAPI toward external drivers for kernel access |
|||
iommufd: vfio container FD ioctl compatibility |
|||
iommufd: Add kernel support for testing iommufd |
|||
iommufd: Add some fault injection points |
|||
iommufd: Add additional invariant assertions |
|||
iommufd: Add a selftest |
|||
vfio: Move vfio_device driver open/close code to a function |
|||
vfio: Move vfio_device_assign_container() into vfio_device_first_open() |
|||
vfio: Rename vfio_device_assign/unassign_container() |
|||
vfio: Use IOMMU_CAP_ENFORCE_CACHE_COHERENCY for vfio_file_enforced_coherent() |
|||
vfio-iommufd: Allow iommufd to be used in place of a container fd |
|||
vfio-iommufd: Support iommufd for physical VFIO devices |
|||
vfio-iommufd: Support iommufd for emulated VFIO devices |
|||
vfio: Move container related MODULE_ALIAS statements into container.c |
|||
vfio: Make vfio_container optionally compiled |
|||
iommufd: Allow iommufd to supply /dev/vfio/vfio |
|||
iommu: Add a gfp parameter to iommu_map() |
v6.3 |
||
iommu: Remove iommu_map_atomic() |
|||
iommu: Add a gfp parameter to iommu_map_sg() |
|||
iommu/dma: Use the gfp parameter in __iommu_dma_alloc_noncontiguous() |
|||
iommufd: Use GFP_KERNEL_ACCOUNT for iommu_map() |
|||
iommu/intel: Add a gfp parameter to alloc_pgtable_page() |
|||
iommu/intel: Support the gfp argument to the map_pages op |
|||
iommu/intel: Use GFP_KERNEL in sleepable contexts |
|||
iommu/s390: Push the gfp parameter to the kmem_cache_alloc()’s |
|||
iommu/s390: Use GFP_KERNEL in sleepable contexts |
|||
vfio: Support VFIO_NOIOMMU with iommufd |
|||
genirq/msi: Add msi_device_has_isolated_msi() |
|||
iommu: Add iommu_group_has_isolated_msi() |
|||
vfio/type1: Convert to iommu_group_has_isolated_msi() |
|||
iommufd: Convert to msi_device_has_isolated_msi() |
|||
genirq/irqdomain: Remove unused irq_domain_check_msi_remap() code |
|||
genirq/msi: Rename IRQ_DOMAIN_MSI_REMAP to IRQ_DOMAIN_ISOLATED_MSI |
|||
iommu/x86: Replace IOMMU_CAP_INTR_REMAP with IRQ_DOMAIN_FLAG_ISOLATED_MSI |
|||
irq/s390: Add arch_is_isolated_msi() for s390 |
|||
iommu: Remove IOMMU_CAP_INTR_REMAP |
|||
iommufd: Make sure to zero vfio_iommu_type1_info before copying to user |
|||
iommufd: Do not add the same hwpt to the ioas->hwpt_list twice |
|||
iommufd: Assert devices_lock for iommufd_hw_pagetable_has_group() |
|||
iommufd: Add iommufd_lock_obj() around the auto-domains hwpts |
|||
iommufd: Check for uptr overflow |
|||
iommufd: Fix unpinning of pages when an access is present |
|||
iommufd: Do not corrupt the pfn list when doing batch carry |
|||
iommufd/selftest: Cover domain unmap with huge pages and access |
|||
iommufd: Assert devices_lock for iommufd_hw_pagetable_has_group()iommufd: Assert devices_lock for iommufd_hw_pagetable_has_group() |
v6.4 |
||
iommufd: Add iommufd_lock_obj() around the auto-domains hwpts |
|||
iommufd: Consistently manage hwpt_item |
|||
iommufd: Move ioas related HWPT destruction into iommufd_hw_pagetable_destroy() |
|||
iommufd: Move iommufd_device to iommufd_private.h |
|||
iommufd: Make iommufd_hw_pagetable_alloc() do iopt_table_add_domain() |
|||
iommufd/selftest: Rename the sefltest ‘device_id’ to ‘stdev_id’ |
|||
iommufd/selftest: Rename domain_id to stdev_id for FIXTURE iommufd_ioas |
|||
iommufd/selftest: Rename domain_id to hwpt_id for FIXTURE iommufd_mock_domain |
|||
iommufd/selftest: Rename the remaining mock device_id’s to stdev_id |
|||
iommufd/selftest: Make selftest create a more complete mock device |
|||
iommufd/selftest: Add a selftest for iommufd_device_attach() with a hwpt argument |
|||
iommufd/selftest: Catch overflow of uptr and length |
|||
iommu/iommufd: Pass iommufd_ctx pointer in iommufd_get_ioas() |
|||
iommufd: Create access in vfio_iommufd_emulated_bind() |
|||
vfio-iommufd: No need to record iommufd_ctx in vfio_device |
|||
vfio-iommufd: Make vfio_iommufd_emulated_bind() return iommufd_access ID |
|||
vfio/mdev: Uses the vfio emulated iommufd ops set in the mdev sample drivers |
|||
vfio: Check the presence for iommufd callbacks in __vfio_register_dev() |
|||
iommufd/selftest: Set varaiable mock_iommu_device storage-class-specifier to static |
|||
vfio/pci: Update comment around group_fd get in vfio_pci_ioctl_pci_hot_reset() |
v6.6 |
||
vfio/pci: Move the existing hot reset logic to be a helper |
|||
iommufd: Reserve all negative IDs in the iommufd xarray |
|||
iommufd: Add iommufd_ctx_has_group() |
|||
iommufd: Add helper to retrieve iommufd_ctx and devid |
|||
vfio: Mark cdev usage in vfio_device |
|||
vfio: Add helper to search vfio_device in a dev_set |
|||
vfio/pci: Extend VFIO_DEVICE_GET_PCI_HOT_RESET_INFO for vfio device cdev |
|||
vfio/pci: Copy hot-reset device info to userspace in the devices loop |
|||
vfio/pci: Allow passing zero-length fd array in VFIO_DEVICE_PCI_HOT_RESET |
|||
vfio: Allocate per device file structure |
|||
vfio: Refine vfio file kAPIs for KVM |
|||
vfio: Accept vfio device file in the KVM facing kAPI |
|||
kvm/vfio: Prepare for accepting vfio device fd |
|||
kvm/vfio: Accept vfio device file from userspace |
|||
vfio: Pass struct vfio_device_file * to vfio_device_open/close() |
|||
vfio: Block device access via device fd until device is opened |
|||
vfio: Add cdev_device_open_cnt to vfio_group |
|||
vfio: Make vfio_df_open() single open for device cdev path |
|||
vfio-iommufd: Move noiommu compat validation out of vfio_iommufd_bind() |
|||
vfio-iommufd: Split bind/attach into two steps |
|||
vfio: Record devid in vfio_device_file |
|||
vfio-iommufd: Add detach_ioas support for physical VFIO devices |
|||
iommufd/device: Add iommufd_access_detach() API |
|||
vfio-iommufd: Add detach_ioas support for emulated VFIO devices |
|||
vfio: Move vfio_device_group_unregister() to be the first operation in unregister |
|||
vfio: Move device_del() before waiting for the last vfio_device registration refcount |
|||
vfio: Add cdev for vfio_device |
|||
vfio: Test kvm pointer in _vfio_device_get_kvm_safe() |
|||
iommufd: Add iommufd_ctx_from_fd() |
|||
vfio: Avoid repeated user pointer cast in vfio_device_fops_unl_ioctl() |
|||
vfio: Add VFIO_DEVICE_BIND_IOMMUFD |
|||
vfio: Add VFIO_DEVICE_[AT|DE]TACH_IOMMUFD_PT |
|||
vfio: Move the IOMMU_CAP_CACHE_COHERENCY check in __vfio_register_dev() |
|||
vfio: Compile vfio_group infrastructure optionally |
|||
docs: vfio: Add vfio device cdev description |
|||
iommufd: Move isolated msi enforcement to iommufd_device_bind() |
|||
iommufd: Add iommufd_group |
|||
iommufd: Replace the hwpt->devices list with iommufd_group |
|||
iommu: Export iommu_get_resv_regions() |
|||
iommufd: Keep track of each device’s reserved regions instead of groups |
|||
iommufd: Use the iommufd_group to avoid duplicate MSI setup |
|||
iommufd: Make sw_msi_start a group global |
|||
iommufd: Move putting a hwpt to a helper function |
|||
iommufd: Add enforced_cache_coherency to iommufd_hw_pagetable_alloc() |
|||
iommufd: Allow a hwpt to be aborted after allocation |
|||
iommufd: Fix locking around hwpt allocation |
|||
iommufd: Reorganize iommufd_device_attach into iommufd_device_change_pt |
|||
iommu: Introduce a new iommu_group_replace_domain() API |
|||
iommufd: Add iommufd_device_replace() |
|||
iommufd: Make destroy_rwsem use a lock class per object type |
|||
iommufd/selftest: Test iommufd_device_replace() |
|||
iommufd: Add IOMMU_HWPT_ALLOC |
|||
iommufd/selftest: Return the real idev id from selftest mock_domain |
|||
iommufd/selftest: Add a selftest for IOMMU_HWPT_ALLOC |
|||
vfio: Do not allow !ops->dma_unmap in vfio_pin/unpin_pages() |
|||
iommufd: Allow passing in iopt_access_list_id to iopt_remove_access() |
|||
iommufd: Add iommufd_access_change_ioas(_id) helpers |
|||
iommufd: Use iommufd_access_change_ioas in iommufd_access_destroy_object |
|||
iommufd: Add iommufd_access_replace() API |
|||
iommufd/selftest: Add IOMMU_TEST_OP_ACCESS_REPLACE_IOAS coverage |
|||
vfio: Support IO page table replacement |
|||
iommu: Move dev_iommu_ops() to private header |
|||
iommu: Add new iommu op to get iommu hardware information |
|||
iommufd: Add IOMMU_GET_HW_INFO |
|||
iommufd/selftest: Add coverage for IOMMU_GET_HW_INFO ioctl |
|||
iommu/vt-d: Implement hw_info for iommu capability query |
|||
iommu: Add IOMMU_DOMAIN_NESTED |
v6.7 |
||
iommufd: Rename IOMMUFD_OBJ_HW_PAGETABLE to IOMMUFD_OBJ_HWPT_PAGING |
|||
iommufd/device: Wrap IOMMUFD_OBJ_HWPT_PAGING-only configurations |
|||
iommufd: Derive iommufd_hwpt_paging from iommufd_hw_pagetable |
|||
iommufd: Share iommufd_hwpt_alloc with IOMMUFD_OBJ_HWPT_NESTED |
|||
iommu: Pass in parent domain with user_data to domain_alloc_user op |
|||
iommufd: Add a nested HW pagetable object |
|||
iommu: Add iommu_copy_struct_from_user helper |
|||
iommufd/selftest: Add nested domain allocation for mock domain |
|||
iommufd/selftest: Add coverage for IOMMU_HWPT_ALLOC with nested HWPTs |
|||
iommu/arm-smmu-v3: Move ctx_desc out of s1_cfg |
|||
iommu/arm-smmu-v3: Replace s1_cfg with cdtab_cfg |
|||
iommu/arm-smmu-v3: Encapsulate ctx_desc_cfg init in alloc_cd_tables |
|||
iommu/arm-smmu-v3: move stall_enabled to the cd table |
|||
iommu/arm-smmu-v3: Refactor write_ctx_desc |
|||
iommu/arm-smmu-v3: Move CD table to arm_smmu_master |
|||
iommu/arm-smmu-v3: Cleanup arm_smmu_domain_finalise |
|||
iommu/arm-smmu-v3: Update comment about STE liveness |
|||
iommu/arm-smmu-v3: Rename cdcfg to cd_table |
|||
iommu: Add new iommu op to create domains owned by userspace |
|||
iommufd: Use the domain_alloc_user() op for domain allocation |
|||
iommufd: Flow user flags for domain allocation to domain_alloc_user() |
|||
iommufd: Support allocating nested parent domain |
|||
iommufd/selftest: Add domain_alloc_user() support in iommu mock |
|||
iommu/vt-d: Add domain_alloc_user op |
|||
iommu/vt-d: Enhance capability check for nested parent domain allocation |
|||
iommufd: Correct IOMMU_HWPT_ALLOC_NEST_PARENT description |
|||
vfio/iova_bitmap: Export more API symbols |
|||
vfio: Move iova_bitmap into iommufd |
|||
iommufd/iova_bitmap: Move symbols to IOMMUFD namespace |
|||
iommu: Add iommu_domain ops for dirty tracking |
|||
iommufd: Add a flag to enforce dirty tracking on attach |
|||
iommufd: Add IOMMU_HWPT_SET_DIRTY_TRACKING |
|||
iommufd: Add IOMMU_HWPT_GET_DIRTY_BITMAP |
|||
iommufd: Add capabilities to IOMMU_GET_HW_INFO |
|||
iommufd: Add a flag to skip clearing of IOPTE dirty |
|||
iommu/amd: Add domain_alloc_user based domain allocation |
|||
iommu/amd: Access/Dirty bit support in IOPTEs |
|||
iommu/vt-d: Access/Dirty bit support for SS domains |
|||
iommufd/selftest: Expand mock_domain with dev_flags |
|||
iommufd/selftest: Test IOMMU_HWPT_ALLOC_DIRTY_TRACKING |
|||
iommufd/selftest: Test IOMMU_HWPT_SET_DIRTY_TRACKING |
|||
iommufd/selftest: Test IOMMU_HWPT_GET_DIRTY_BITMAP |
|||
iommufd/selftest: Test out_capabilities in IOMMU_GET_HW_INFO |
|||
iommufd/selftest: Test IOMMU_HWPT_GET_DIRTY_BITMAP_NO_CLEAR flag |
|||
iommufd/selftest: Fix page-size check in iommufd_test_dirty() |
|||
iommu: Add cache_invalidate_user op |
v6.8 |
||
iommufd: Add IOMMU_HWPT_INVALIDATE |
|||
iommu: Add iommu_copy_struct_from_user_array helper |
|||
iommufd/selftest: Add mock_domain_cache_invalidate_user support |
|||
iommufd/selftest: Add IOMMU_TEST_OP_MD_CHECK_IOTLB test op |
|||
iommufd/selftest: Add coverage for IOMMU_HWPT_INVALIDATE ioctl |
|||
iommufd: Add data structure for Intel VT-d stage-1 cache invalidation |
|||
iommu/vt-d: Add iotlb flush for nested domain |
|||
iommu: Change kconfig around IOMMU_SVA |
|||
iommu/vt-d: Remove mm->pasid in intel_sva_bind_mm() |
|||
iommu: Add mm_get_enqcmd_pasid() helper function |
|||
mm: Add structure to keep sva information |
|||
iommu: Support mm PASID 1:n with sva domains |
|||
mm: Deprecate pasid field |
|||
iommu: Move iommu fault data to linux/iommu.h |
v6.9 |
||
iommu/arm-smmu-v3: Remove unrecoverable faults reporting |
|||
iommu: Remove unrecoverable fault data |
|||
iommu: Cleanup iopf data structure definitions |
|||
iommu: Merge iopf_device_param into iommu_fault_param |
|||
iommu: Remove iommu_[un]register_device_fault_handler() |
|||
iommu: Merge iommu_fault_event and iopf_fault |
|||
iommu: Prepare for separating SVA and IOPF |
|||
iommu: Make iommu_queue_iopf() more generic |
|||
iommu: Separate SVA and IOPF |
|||
iommu: Refine locking for per-device fault data management |
|||
iommu: Use refcount for fault data access |
|||
iommu: Improve iopf_queue_remove_device() |
|||
iommu: Track iopf group instead of last fault |
|||
iommu: Make iopf_group_response() return void |
|||
iommu: Make iommu_report_device_fault() return void |
|||
iommu/arm-smmu-v3: Make STE programming independent of the callers |
|||
iommu/arm-smmu-v3: Consolidate the STE generation for abort/bypass |
|||
iommu/arm-smmu-v3: Move the STE generation for S1 and S2 domains into functions |
|||
iommu/arm-smmu-v3: Build the whole STE in arm_smmu_make_s2_domain_ste() |
|||
iommu/arm-smmu-v3: Hold arm_smmu_asid_lock during all of attach_dev |
|||
iommu/arm-smmu-v3: Compute the STE only once for each master |
|||
iommu/arm-smmu-v3: Do not change the STE twice during arm_smmu_attach_dev() |
|||
iommu/arm-smmu-v3: Put writing the context descriptor in the right order |
|||
iommu/arm-smmu-v3: Pass smmu_domain to arm_enable/disable_ats() |
|||
iommu/arm-smmu-v3: Remove arm_smmu_master->domain |
|||
iommu/arm-smmu-v3: Check that the RID domain is S1 in SVA |
|||
iommu/arm-smmu-v3: Add a global static IDENTITY domain |
|||
iommu/arm-smmu-v3: Add a global static BLOCKED domain |
|||
iommu/arm-smmu-v3: Use the identity/blocked domain during release |
|||
iommu/arm-smmu-v3: Pass arm_smmu_domain and arm_smmu_device to finalize |
|||
iommu/arm-smmu-v3: Convert to domain_alloc_paging() |
|||
iommu/arm-smmu-v3: Add an ops indirection to the STE code |
v6.10 |
||
iommu/arm-smmu-v3: Make CD programming use arm_smmu_write_entry() |
|||
iommu/arm-smmu-v3: Move the CD generation for S1 domains into a function |
|||
iommu/arm-smmu-v3: Consolidate clearing a CD table entry |
|||
iommu/arm-smmu-v3: Make arm_smmu_alloc_cd_ptr() |
|||
iommu/arm-smmu-v3: Allocate the CD table entry in advance |
|||
iommu/arm-smmu-v3: Move the CD generation for SVA into a function |
|||
iommu/arm-smmu-v3: Build the whole CD in arm_smmu_make_s1_cd() |
|||
iommu/arm-smmu-v3: Add unit tests for arm_smmu_write_entry |
|||
iommu/arm-smmu-v3: Add a type for the CD entry |
|||
iommu/arm-smmu-v3: Do not ATC invalidate the entire domain |
|||
iommu/arm-smmu-v3: Do not allow a SVA domain to be set on the wrong PASID |
|||
iommu: Introduce domain attachment handle |
v6.11 |
||
iommu: Remove sva handle list |
|||
iommu: Add attach handle to struct iopf_group |
|||
iommu: Extend domain attach group with handle support |
|||
iommufd: Add fault and response message definitions |
|||
iommufd: Add iommufd fault object |
|||
iommufd: Fault-capable hwpt attach/detach/replace |
|||
iommufd: Associate fault object with iommufd_hw_pgtable |
|||
iommufd/selftest: Add IOPF support for mock device |
|||
iommufd/selftest: Add coverage for IOPF test |
|||
iommu/arm-smmu-v3: Add support for domain_alloc_user fn |
|||
iommu/arm-smmu-v3: Add feature detection for HTTU |
|||
iommu/io-pgtable-arm: Add read_and_clear_dirty() support |
|||
iommu/arm-smmu-v3: Add support for dirty tracking in domain alloc |
|||
iommu/arm-smmu-v3: Enable HTTU for stage1 with io-pgtable mapping |
|||
iommufd/selftest: Fix dirty bitmap tests with u8 bitmaps |
|||
iommufd/selftest: Fix iommufd_test_dirty() to handle <u8 bitmaps |
|||
iommufd/selftest: Add tests for <= u8 bitmap sizes |
|||
iommufd/selftest: Fix tests to use MOCK_PAGE_SIZE based buffer sizes |
|||
iommufd/selftest: Do not record head iova to better match iommu drivers |
|||
iommufd/iova_bitmap: Check iova_bitmap_done() after set ahead |
|||
iommufd/iova_bitmap: Cache mapped length in iova_bitmap_map struct |
|||
iommufd/iova_bitmap: Move initial pinning to iova_bitmap_for_each() |
|||
iommufd/iova_bitmap: Consolidate iova_bitmap_set exit conditionals |
|||
iommufd/iova_bitmap: Dynamic pinning on iova_bitmap_set() |
|||
iommufd/iova_bitmap: Remove iterator logic |
|||
iommu/arm-smmu-v3: Do not zero the strtab twice |
|||
iommu/arm-smmu-v3: Shrink the strtab l1_desc array |
|||
iommu/arm-smmu-v3: Add arm_smmu_strtab_l1/2_idx() |
v6.12 |
||
iommu/arm-smmu-v3: Add types for each level of the 2 level stream table |
|||
iommu/arm-smmu-v3: Reorganize struct arm_smmu_strtab_cfg |
|||
iommu/arm-smmu-v3: Remove strtab_base/cfg |
|||
iommu/arm-smmu-v3: Do not use devm for the cd table allocations |
|||
iommu/arm-smmu-v3: Shrink the cdtab l1_desc array |
|||
iommu/arm-smmu-v3: Add types for each level of the CD table |
|||
iommu/arm-smmu-v3: Reorganize struct arm_smmu_ctx_desc_cfg |
|||
iommu/arm-smmu-v3: Use the new rb tree helpers |
|||
iommufd/device: Enforce reserved IOVA also when attached to hwpt_nested |
|||
iommu/arm-smmu-v3: Fix a NULL vs IS_ERR() check |
|||
iommufd: Reorder include files |
|||
iommufd/selftest: Fix buffer read overrrun in the dirty test |
|||
iommufd: Protect against overflow of ALIGN() during iova allocation |
|||
iommufd: Check the domain owner of the parent before creating a nesting domain |
|||
iommu/arm-smmu-v3: Fix last_sid_idx calculation for sid_bits==32 |
|||
iommu/arm-smmu-v3: Convert comma to semicolon |
|||
vfio: Remove VFIO_TYPE1_NESTING_IOMMU |
v6.13 |
||
ACPICA: IORT: Update for revision E.f |
|||
ACPI/IORT: Support CANWBS memory access flag |
|||
iommu/arm-smmu-v3: Report IOMMU_CAP_ENFORCE_CACHE_COHERENCY for CANWBS |
|||
iommu/arm-smmu-v3: Support IOMMU_GET_HW_INFO via struct arm_smmu_hw_info |
|||
iommu/arm-smmu-v3: Implement IOMMU_HWPT_ALLOC_NEST_PARENT |
|||
iommu/arm-smmu-v3: Expose the arm_smmu_attach interface |
|||
iommu/arm-smmu-v3: Support IOMMU_VIOMMU_ALLOC |
|||
iommu/arm-smmu-v3: Support IOMMU_DOMAIN_NESTED |
|||
iommu/arm-smmu-v3: Use S2FWB for NESTED domains |
|||
iommu/arm-smmu-v3: Allow ATS for IOMMU_DOMAIN_NESTED |
|||
iommu/arm-smmu-v3: Support IOMMU_HWPT_INVALIDATE using a VIOMMU object |
|||
iommufd: Move struct iommufd_object to public iommufd header |
|||
iommufd: Move _iommufd_object_alloc helper to a sharable file |
|||
iommufd: Introduce IOMMUFD_OBJ_VIOMMU and its related struct |
|||
iommufd: Verify object in iommufd_object_finalize/abort() |
|||
iommufd/viommu: Add IOMMU_VIOMMU_ALLOC ioctl |
|||
iommufd: Add alloc_domain_nested op to iommufd_viommu_ops |
|||
iommufd: Allow pt_id to carry viommu_id for IOMMU_HWPT_ALLOC |
|||
iommufd/selftest: Add container_of helpers |
|||
iommufd/selftest: Prepare for mock_viommu_alloc_domain_nested() |
|||
iommufd/selftest: Add refcount to mock_iommu_device |
|||
iommufd/selftest: Add IOMMU_VIOMMU_TYPE_SELFTEST |
|||
iommufd/selftest: Add IOMMU_VIOMMU_ALLOC test coverage |
|||
Documentation: userspace-api: iommufd: Update vIOMMU |
|||
iommufd/viommu: Add IOMMUFD_OBJ_VDEVICE and IOMMU_VDEVICE_ALLOC ioctl |
|||
iommufd/selftest: Add IOMMU_VDEVICE_ALLOC test coverage |
|||
iommu/viommu: Add cache_invalidate to iommufd_viommu_ops |
|||
iommufd: Allow hwpt_id to carry viommu_id for IOMMU_HWPT_INVALIDATE |
|||
iommu: Add iommu_copy_struct_from_full_user_array helper |
|||
iommufd/viommu: Add iommufd_viommu_find_dev helper |
|||
iommufd/selftest: Add mock_viommu_cache_invalidate |
|||
iommufd/selftest: Add IOMMU_TEST_OP_DEV_CHECK_CACHE test command |
|||
iommufd/selftest: Add vIOMMU coverage for IOMMU_HWPT_INVALIDATE ioctl |
|||
Documentation: userspace-api: iommufd: Update vDEVICE |
|||
iommu: Pass old domain to set_dev_pasid op |
|||
iommu/vt-d: Add a helper to flush cache for updating present pasid entry |
|||
iommu/vt-d: Refactor the pasid setup helpers |
|||
iommu/vt-d: Add pasid replace helpers |
|||
iommu/vt-d: Consolidate the struct dev_pasid_info add/remove |
|||
iommu/vt-d: Add iommu_domain_did() to get did |
|||
iommu/vt-d: Make intel_iommu_set_dev_pasid() to handle domain replacement |
|||
iommu/vt-d: Limit intel_iommu_set_dev_pasid() for paging domain |
|||
iommu/vt-d: Make intel_svm_set_dev_pasid() support domain replacement |
|||
iommu/vt-d: Make identity_domain_set_dev_pasid() to handle domain replacement |
|||
iommu/vt-d: Add set_dev_pasid callback for nested domain |
|||
iommu/arm-smmu-v3: Make set_dev_pasid() op support replace |
|||
iommu: Make set_dev_pasid op support domain replacement |
|||
iommu: Add ops->domain_alloc_nested() |
|||
iommu: Rename ops->domain_alloc_user() to domain_alloc_paging_flags() |
|||
iommu/arm-smmu-v3: Import IOMMUFD module namespace |
|||
iommu: Add ops->domain_alloc_nested() |
|||
iommu: Rename ops->domain_alloc_user() to domain_alloc_paging_flags() |
|||
iommufd: Fix out_fput in iommufd_fault_alloc() |
|||
iommufd/selftest: Cover IOMMU_FAULT_QUEUE_ALLOC in iommufd_fail_nth |
|||
iommu: Refactor __iommu_domain_alloc() |
|||
iommu: Introduce iommu_paging_domain_alloc_flags() |
|||
iommu: Add new flag to explictly request PASID capable domain |
|||
iommu/arm-smmu-v3: Enhance domain_alloc_user() to allocate PASID capable domain |
|||
iommu/amd: Add helper function to check GIOSUP/GTSUP |
|||
iommu/amd: Move V2 page table support check to early_amd_iommu_init() |
|||
iommu/amd: Separate page table setup from domain allocation |
|||
iommu/amd: Pass page table type as param to pdom_setup_pgtable() |
|||
iommu/amd: Enhance amd_iommu_domain_alloc_user() |
|||
iommu/amd: Implement global identity domain |
|||
iommu: Put domain allocation in __iommu_group_alloc_blocking_domain() |
|||
iommu: Create __iommu_alloc_identity_domain() |
|||
iommu/arm-smmu-v3: Introduce struct arm_smmu_event |
v6.14 |
||
iommu/arm-smmu-v3: Log better event records |
|||
iommu/arm-smmu-v3: Remove arm_smmu_domain_finalise() during attach |
|||
iommu/arm-smmu-v3: Make domain_alloc_paging_flags() directly determine the S1/S2 |
|||
iommu/arm-smmu-v3: Remove domain_alloc_paging() |
|||
iommufd/selftest: Remove domain_alloc_paging() |
|||
iommufd: Deal with IOMMU_HWPT_FAULT_ID_VALID in iommufd core |
|||
iommufd: Keep OBJ/IOCTL lists in an alphabetical order |
|||
iommufd/fault: Destroy response and mutex in iommufd_fault_destroy() |
|||
iommufd/fault: Use a separate spinlock to protect fault->deliver list |
|||
iommufd: Fix struct iommu_hwpt_pgfault init and padding |
|||
iommu: Prevent pasid attach if no ops->remove_dev_pasid |
|||
iommu: Consolidate the ops->remove_dev_pasid usage into a helper |
|||
iommu: Detaching pasid by attaching to the blocked_domain |
|||
iommu/arm-smmu-v3: Make the blocked domain support PASID |
|||
iommu/vt-d: Make the blocked domain support PASID |
|||
iommu/amd: Make the blocked domain support PASID |
|||
iommu: Remove the remove_dev_pasid op |
|||
genirq/msi: Store the IOMMU IOVA directly in msi_desc instead of iommu_cookie |
v6.15 |
||
genirq/msi: Refactor iommu_dma_compose_msi_msg() |
|||
iommu: Make iommu_dma_prepare_msi() into a generic operation |
|||
irqchip: Have CONFIG_IRQ_MSI_IOMMU be selected by irqchips that need it |
|||
iommu: Turn fault_data to iommufd private pointer |
|||
iommufd: Implement sw_msi support natively |
|||
iommufd: Make attach_handle generic than fault specific |
|||
iommufd/fault: Remove iommufd_fault_domain_attach/detach/replace_dev() |
|||
iommu: Sort out domain user data |
|||
iommufd: Move iommufd_sw_msi and related functions to driver.c |
|||
iommu: Drop sw_msi from iommu_domain |
|||
iommu: Require passing new handles to APIs supporting handle |
|||
iommu: Introduce a replace API for device pasid |
|||
iommufd: Pass @pasid through the device attach/replace path |
|||
iommufd/device: Only add reserved_iova in non-pasid path |
|||
iommufd/device: Replace idev->igroup with local variable |
|||
iommufd/device: Add helper to detect the first attach of a group |
|||
iommufd/device: Wrap igroup->hwpt and igroup->device_list into attach struct |
|||
iommufd/device: Replace device_list with device_array |
|||
iommufd/device: Add pasid_attach array to track per-PASID attach |
|||
iommufd: Enforce PASID-compatible domain in PASID path |
|||
iommufd: Support pasid attach/replace |
|||
iommufd: Enforce PASID-compatible domain for RID |
|||
iommu/vt-d: Add IOMMU_HWPT_ALLOC_PASID support |
|||
iommufd: Allow allocating PASID-compatible domain |
|||
iommufd/selftest: Add set_dev_pasid in mock iommu |
|||
iommufd/selftest: Add a helper to get test device |
|||
iommufd/selftest: Add test ops to test pasid attach/detach |
|||
iommufd/selftest: Add coverage for iommufd pasid attach/detach |
|||
ida: Add ida_find_first_range() |
|||
vfio-iommufd: Support pasid [at|de]tach for physical VFIO devices |
|||
vfio: VFIO_DEVICE_[AT|DE]TACH_IOMMUFD_PT support pasid |
|||
iommufd: Extend IOMMU_GET_HW_INFO to report PASID capability |
|||
iommufd/selftest: Add coverage for reporting max_pasid_log2 via IOMMU_HW_INFO |
|||
iommu/arm-smmu-v3: Fix iommu_device_probe bug due to duplicated stream ids |
|||
iommu/arm-smmu-v3: Fix incorrect return in arm_smmu_attach_dev |
v6.16 |
||
PCI/P2PDMA: Refactor the p2pdma mapping helpers |
|||
dma-mapping: move the PCI P2PDMA mapping helpers to pci-p2pdma.h |
|||
iommu: generalize the batched sync after map interface |
|||
iommu: add kernel-doc for iommu_unmap_fast |
|||
dma-mapping: Provide an interface to allow allocate IOVA |
|||
iommu/dma: Factor out a iommu_dma_map_swiotlb helper |
|||
dma-mapping: Implement link/unlink ranges API |
|||
dma-mapping: add a dma_need_unmap helper |
|||
docs: core-api: document the IOVA-based API |
|||
dma-mapping: introduce new DMA attribute to indicate MMIO memory |
v6.18 |
||
iommu/dma: implement DMA_ATTR_MMIO for dma_iova_link(). |
|||
dma-debug: refactor to use physical addresses for page mapping |
|||
dma-mapping: rename trace_dma_*map_page to trace_dma_*map_phys |
|||
iommu/dma: rename iommu_dma_*map_page to iommu_dma_*map_phys |
|||
iommu/dma: implement DMA_ATTR_MMIO for iommu_dma_(un)map_phys() |
|||
dma-mapping: convert dma_direct_*map_page to be phys_addr_t based |
|||
kmsan: convert kmsan_handle_dma to use physical addresses |
|||
dma-mapping: implement DMA_ATTR_MMIO for dma_(un)map_page_attrs() |
|||
xen: swiotlb: Open code map_resource callback |
|||
dma-mapping: export new dma_*map_phys() interface |
|||
mm/hmm: migrate to physical address-based DMA mapping API |
|||
mm/hmm: properly take MMIO path |
|||
PCI/P2PDMA: Separate the mmap() support from the core logic |
v6.19 |
||
PCI/P2PDMA: Simplify bus address mapping API |
|||
PCI/P2PDMA: Refactor to separate core P2P functionality from memory allocation |
|||
PCI/P2PDMA: Provide an access to pci_p2pdma_map_type() function |
|||
PCI/P2PDMA: Document DMABUF model |
|||
dma-buf: provide phys_vec to scatter-gather mapping routine |
|||
vfio: Export vfio device get and put registration helpers |
|||
vfio/pci: Share the core device pointer while invoking feature functions |
|||
vfio/pci: Enable peer-to-peer DMA transactions by default |
|||
vfio/pci: Add dma-buf export support for MMIO regions |
|||
vfio/nvgrace: Support get_dmabuf_phys |
|||
dma-buf: fix integer overflow in fill_sg_entry() for buffers >= 8GiB |
|||
vfio/pci: Add vfio_pci_dma_buf_iommufd_map() |
|||
iommufd: Add DMABUF to iopt_pages |
|||
iommufd: Do not map/unmap revoked DMABUFs |
|||
iommufd: Allow a DMABUF to be revoked |
|||
iommufd: Allow MMIO pages in a batch |
|||
iommufd: Have pfn_reader process DMABUF iopt_pages |
|||
iommufd: Have iopt_map_file_pages convert the fd to a file |
|||
iommufd: Accept a DMABUF through IOMMU_IOAS_MAP_FILE |
|||
iommufd/selftest: Add some tests for the dmabuf flow |
|||
iommu/arm-smmu-v3-iommufd: Allow attaching nested domain for GBPA cases |
|||
mm/hugetlb: fix incorrect error return from hugetlb_reserve_pages() |
|||
iommu/arm-smmu-v3-iommufd: Allow attaching nested domain for GBPA cases |
|||
iommu/arm-smmu-v3: Add update_safe bits to fix STE update sequence |
v7.0 |
||
iommu/arm-smmu-v3: Mark STE MEV safe when computing the update sequence |
|||
iommu/arm-smmu-v3: Mark EATS_TRANS safe when computing the update sequence |
|||
iommu/arm-smmu-v3-test: Add nested s1bypass/s1dssbypass coverage |
|||
iommu/arm-smmu-v3: Do not set disable_ats unless vSTE is Translate |
|||
iommu: Add device ATS supported capability |
v7.1 |
||
iommufd: Report ATS not supported status via IOMMU_GET_HW_INFO |
Guest Kernel I/O Virtualization: vCMDQ#
The following table contains patches that are required for guest vCMDQ support on the Grace platform. Note that these patches must also be present on the host.
LKML Discussion |
Git Commit |
Git Description |
Minimum Linux Kernel Release |
|---|---|---|---|
iommu/arm-smmu-v3: Issue a batch of commands to the same cmdq |
v6.12 |
||
iommu/arm-smmu-v3: Pass in cmdq pointer to arm_smmu_cmdq_build_sync_cmd |
|||
iommu/arm-smmu-v3: Pass in cmdq pointer to arm_smmu_cmdq_init |
|||
iommu/arm-smmu-v3: Make symbols public for CONFIG_TEGRA241_CMDQV |
|||
iommu/arm-smmu-v3: Add ARM_SMMU_OPT_TEGRA241_CMDQV |
|||
iommu/arm-smmu-v3: Add acpi_smmu_iort_probe_model for impl |
|||
iommu/arm-smmu-v3: Add struct arm_smmu_impl_ops |
|||
iommu/arm-smmu-v3: Add in-kernel support for NVIDIA Tegra241 (Grace) CMDQV |
|||
iommu/arm-smmu-v3: Start a new batch if new command is not supported |
|||
iommu/tegra241-cmdqv: Limit CMDs for VCMDQs of a guest owned VINTF |
|||
iommu/tegra241-cmdqv: Fix -Wformat-truncation warnings in lvcmdq_error_header |
|||
iommu/tegra241-cmdqv: Fix ioremap() error handling in probe() |
|||
iommu/tegra241-cmdqv: Do not allocate vcmdq until dma_set_mask_and_coherent |
|||
iommu/tegra241-cmdqv: Drop static at local variable |
|||
iommu/tegra241-cmdqv: Fix alignment failure at max_n_shift |
v6.13 |
||
iommu/tegra241-cmdqv: do not use smp_processor_id in preemptible context |
|||
iommu/tegra241-cmdqv: Staticize cmdqv_debugfs_dir |
|||
iommu/tegra241-cmdqv: Fix unused variable warning |
|||
iommu/tegra241-cmdqv: Read SMMU IDR1.CMDQS instead of hardcoding |
Host Kernel I/O Virtualization: vCMDQ#
The following table contains patches that are required for host vCMDQ support on the Grace platform.
LKML Discussion |
Git Commit |
Git Description |
Minimum Linux Kernel Release |
|---|---|---|---|
iommufd/fault: Move two fault functions out of the header |
v6.15 |
||
iommufd/fault: Add an iommufd_fault_init() helper |
|||
iommufd: Abstract an iommufd_eventq from iommufd_fault |
|||
iommufd: Rename fault.c to eventq.c |
|||
iommufd: Add IOMMUFD_OBJ_VEVENTQ and IOMMUFD_CMD_VEVENTQ_ALLOC |
|||
iommufd/viommu: Add iommufd_viommu_get_vdev_id helper |
|||
iommufd/viommu: Add iommufd_viommu_report_event helper |
|||
iommufd/selftest: Require vdev_id when attaching to a nested domain |
|||
iommufd/selftest: Add IOMMU_TEST_OP_TRIGGER_VEVENT for vEVENTQ coverage |
|||
iommufd/selftest: Add IOMMU_VEVENTQ_ALLOC test coverage |
|||
Documentation: userspace-api: iommufd: Update FAULT and VEVENTQ |
|||
iommu/arm-smmu-v3: Introduce struct arm_smmu_vmaster |
|||
iommu/arm-smmu-v3: Report events that belong to devices attached to vIOMMU |
|||
iommu/arm-smmu-v3: Set MEV bit in nested STE for DoS mitigations |
|||
iommufd: Initialize the flags of vevent in iommufd_viommu_report_event() |
|||
iommufd: Balance veventq->num_events inc/dec |
|||
iommufd: Report unmapped bytes in the error path of iopt_unmap_iova_range |
v6.17 |
||
iommufd: Correct virt_id kdoc at struct iommu_vdevice_alloc |
|||
iommufd/viommu: Explicitly define vdev->virt_id |
|||
iommu: Use enum iommu_hw_info_type for type in hw_info op |
|||
iommu: Add iommu_copy_struct_to_user helper |
|||
iommu: Pass in a driver-level user data structure to viommu_init op |
|||
iommufd/viommu: Allow driver-specific user data for a vIOMMU object |
|||
iommufd/selftest: Support user_data in mock_viommu_alloc |
|||
iommufd/selftest: Add coverage for viommu data |
|||
iommufd/access: Add internal APIs for HW queue to use |
|||
iommufd/access: Bypass access->ops->unmap for internal use |
|||
iommufd/viommu: Add driver-defined vDEVICE support |
|||
iommufd/viommu: Introduce IOMMUFD_OBJ_HW_QUEUE and its related struct |
|||
iommufd/viommu: Add IOMMUFD_CMD_HW_QUEUE_ALLOC ioctl |
|||
iommufd/driver: Add iommufd_hw_queue_depend/undepend() helpers |
|||
iommufd/selftest: Add coverage for IOMMUFD_CMD_HW_QUEUE_ALLOC |
|||
iommufd: Add mmap interface |
|||
iommufd/selftest: Add coverage for the new mmap interface |
|||
Documentation: userspace-api: iommufd: Update HW QUEUE |
|||
iommu: Allow an input type in hw_info op |
|||
iommufd: Allow an input data_type via iommu_hw_info |
|||
iommufd/selftest: Update hw_info coverage for an input data_type |
|||
iommu/arm-smmu-v3-iommufd: Add vsmmu_size/type and vsmmu_init impl ops |
|||
iommu/arm-smmu-v3-iommufd: Add hw_info to impl_ops |
|||
iommu/tegra241-cmdqv: Use request_threaded_irq |
|||
iommu/tegra241-cmdqv: Simplify deinit flow in tegra241_cmdqv_remove_vintf() |
|||
iommu/tegra241-cmdqv: Do not statically map LVCMDQs |
|||
iommu/tegra241-cmdqv: Add user-space use support |
|||
iommu/tegra241-cmdqv: Add IOMMU_VEVENTQ_TYPE_TEGRA241_CMDQV support |
|||
iommu/tegra241-cmdqv: import IOMMUFD module namespace |
|||
iommufd: Do not allow _iommufd_object_alloc_ucmd if abort op is set |
|||
iommu/tegra241-cmdqv: Reset VCMDQ in tegra241_vcmdq_hw_init_user() |
v6.19 |
||
iommu/tegra241-cmdqv: Set supports_cmd op in tegra241_vcmdq_hw_init() |
v7.1 |
||
iommu/tegra241-cmdqv: Update uAPI to clarify HYP_OWN requirement |
Host Kernel Virtualization: Performance#
The following table contains patches that improve performance and are recommended for host I/O virtualization support on the Grace platform.
LKML Discussion |
Git Commit |
Git Description |
Minimum Linux Kernel Release |
|---|---|---|---|
mm: introduce ARCH_SUPPORTS_HUGE_PFNMAP and special bits to pmd/pud |
v6.12 |
||
mm: drop is_huge_zero_pud() |
|||
mm: mark special bits for huge pfn mappings when inject |
|||
mm: allow THP orders for PFNMAPs |
|||
mm/gup: detect huge pfnmap entries in gup-fast |
|||
mm/pagewalk: check pfnmap for folio_walk_start() |
|||
mm/fork: accept huge pfnmap entries |
|||
mm: always define pxx_pgprot() |
|||
mm: new follow_pfnmap API |
|||
KVM: use follow_pfnmap API |
|||
s390/pci_mmio: use follow_pfnmap API |
|||
mm/x86/pat: use the new follow_pfnmap API |
|||
vfio: use the new follow_pfnmap API |
|||
acrn: use the new follow_pfnmap API |
|||
mm/access_process_vm: use the new follow_pfnmap API |
|||
mm: remove follow_pte() |
|||
mm/x86: support large pfn mappings |
|||
mm/arm64: support large pfn mappings |
|||
vfio/pci: implement huge_fault support |
Miscellaneous Fixes#
The following table contains miscellaneous fixes for issues encountered with virtualization on Grace.
LKML Discussion |
Git Commit |
Git Description |
Minimum Linux Kernel Release |
|---|---|---|---|
vhost: Add smp_rmb() in vhost_vq_avail_empty() |
v6.9 |
||
vhost: Add smp_rmb() in vhost_enable_notify() |
|||
vfio/pci: Collect hot-reset devices to local buffer |
v6.10 |
Linux Kernel Workarounds#
The tables in this section list Linux kernel patches that are required to work around known issues. Patches listed here are not upstream and have not been posted to the Linux Kernel Mailing List.
Host Kernel GPU Virtualization: Workarounds#
The following table contains patches that work around issues and enable functions that are required for host GPU virtualization support on the Grace platform.
Git Commit |
Git Description |
Impact |
|---|---|---|
n/a |
n/a |
n/a |
Linux Kernel Configs#
This section provides information about the Linux Kernel config settings for the Grace platform.
The following table contains config settings that enable functionality and are required for host GPU passthrough support on the Grace platform.
Kernel Config |
Description |
|---|---|
CONFIG_VFIO_DEVICE_CDEV=y |
Enables VFIO device access. |
CONFIG_VFIO_GROUP=y |
Enables VFIO group support. |
CONFIG_IOMMUFD=y |
Enables the IOMMUFD userspace API. |
CONFIG_IOMMUFD_DRIVER=y |
Enables the IOMMUFD driver. |
CONFIG_IOMMUFD_VFIO_CONTAINER=y |
Enables IOMMUFD to provide VFIO support. |
CONFIG_ARM_SMMU_V3_IOMMUFD=y |
Enables IOMMUFD features for ARM SMMUv3. |
CONFIG_NVGRACE_GPU_VFIO_PCI=m |
Enables VFIO support for Hopper/Blackwell GPU. |
The following table contains config settings that enable functionality and are required for host and guest vCMDQ support on the Grace platform. Note that for the host, these are in addition to the required configs for GPU passthrough.
Kernel Config |
Description |
|---|---|
CONFIG_TEGRA241_CMDQV=y |
Enables CMDQ virtualization support. |