mirror-linux/Documentation
Yaxing Guo 3397c3cd85 uio: Add SVA support for PCI devices via uio_pci_generic_sva.c
This patch introduces a new UIO driver, uio_pci_generic_sva, which
extends the functionality of uio_pci_generic by adding support for
Shared Virtual Addressing (SVA) when IOMMU is enabled in the system.

The key enhancement allows PCI devices to directly use user-space virtual
addresses for DMA operations, eliminating the need for bounce buffers or
explicit IOVA mapping. This is achieved by leveraging the kernel's IOMMU-SVA
subsystem, including process address space attachment, page fault handling,
and shared context management between CPU and device.

With this driver, userspace applications can perform zero-copy DMA using
native pointers:

   void *addr = malloc(N);
   set_dma_addr((uint64_t)addr);  // Passing user VA directly
   start_dma();

The device can now access 'addr' through the IOMMU's PASID-based translation,
provided that the underlying IOMMU hardware (e.g., Intel VT-d 3.1+, AMD-Vi,
ARM SMMU, RISCV IOMMU) and platform support SVA.

Dependencies:
- CONFIG_IOMMU_SVA must be enabled.
- The platform must support PRI (Page Request Interface) and PASID.
- Device drivers/userspace must handle page faults if demand-paging is used.

The implementation reuses core logic from uio_pci_generic.c while adding
PASID setting, and integration with the IOMMU SVA APIs.

Also, add a read-only sysfs attribute 'pasid' to expose the Process Address
Space ID assigned by IOMMU driver when binding an SVA-enabled device.
For details, refer to the ABI documentation for uio_pci_sva driver sysfs attribute
(Documentation/ABI/testing/sysfs-driver-uio_pci_sva-pasid).

Signed-off-by: Yaxing Guo <guoyaxing@bosc.ac.cn>
Link: https://patch.msgid.link/20250926095828.506-1-guoyaxing@bosc.ac.cn
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2025-11-26 15:10:39 +01:00
..
ABI uio: Add SVA support for PCI devices via uio_pci_generic_sva.c 2025-11-26 15:10:39 +01:00
PCI pci-v6.18-changes 2025-10-06 10:41:03 -07:00
RCU RCU pull request for v6.18 2025-10-04 11:28:45 -07:00
accel
accounting
admin-guide - Remove a bunch of asm implementing condition flags testing in KVM's 2025-10-11 11:19:16 -07:00
arch - Make TDX and kexec work together 2025-10-04 10:01:30 -07:00
block
bpf bpf: disable and remove registers chain based liveness 2025-09-19 09:27:23 -07:00
cdrom
core-api dma-mapping updates for Linux 6.18: 2025-10-03 17:41:12 -07:00
cpu-freq cpufreq: Drop unused symbol CPUFREQ_ETERNAL 2025-10-01 13:57:22 +02:00
crypto crypto: doc - Add explicit title heading to API docs 2025-09-28 11:54:48 +08:00
dev-tools It has been a relatively busy cycle in docsland, with changes all over: 2025-10-03 17:16:13 -07:00
devicetree dt-bindings: slimbus: fix warning from example 2025-11-26 15:10:25 +01:00
doc-guide
driver-api pci-v6.18-changes 2025-10-06 10:41:03 -07:00
edac
fault-injection
fb fbdev fixes & enhancements for 6.18-rc1: 2025-10-10 09:36:23 -07:00
features OpenRISC updates for 6.18 2025-10-05 10:02:54 -07:00
filesystems Ext4 bug fixes for 6.18-rc2, including 2025-10-15 07:51:57 -07:00
firmware-guide
firmware_class
fpga
gpu drm next for 6.18-rc1 2025-10-02 12:47:25 -07:00
hid
hwmon hwmon: (cros_ec) register fans into thermal framework cooling devices 2025-09-25 08:08:14 -07:00
i2c i2c: i801: Add support for Intel Wildcat Lake-U 2025-09-28 00:45:53 +02:00
iio Documentation: iio: ade9000, adis*, adx*: Convert IIO subsystem cross-references 2025-10-19 11:59:16 +01:00
images
infiniband
input
isdn
kbuild Kbuild updates for 6.18 2025-10-01 20:58:51 -07:00
kernel-hacking
leds
litmus-tests
livepatch
locking
maintainer docs: maintainer: Fix ambiguous subheading formatting 2025-09-18 10:26:45 -06:00
mhi
misc-devices
mm Only two patch series in this pull request: 2025-10-05 12:11:07 -07:00
netlabel
netlink Char/Misc/IIO/Binder changes for 6.18-rc1 2025-10-04 16:26:32 -07:00
networking Documentation: networking: ax25: update the mailing list info. 2025-10-21 17:41:57 -07:00
nvdimm
nvme
pcmcia
peci
power It has been a relatively busy cycle in docsland, with changes all over: 2025-10-03 17:16:13 -07:00
process It has been a relatively busy cycle in docsland, with changes all over: 2025-10-03 17:16:13 -07:00
rust docs: rust: add section on imports formatting 2025-10-17 00:56:20 +02:00
scheduler
scsi
security
sound ALSA: emu10k1: Fix typo in docs 2025-10-04 15:47:24 +02:00
sphinx docs: remove cdomain.py 2025-09-21 16:35:57 -06:00
sphinx-static
spi
staging It has been a relatively busy cycle in docsland, with changes all over: 2025-10-03 17:16:13 -07:00
sunrpc/xdr
target
tee
timers
tools tools/rtla: Add remaining support for osnoise actions 2025-09-27 04:53:48 -04:00
trace Documentation: trace: histogram: Convert ftrace docs cross-reference 2025-09-18 11:49:26 -06:00
translations More power management updates for 6.18-rc1 2025-10-07 09:39:51 -07:00
usb
userspace-api It has been a relatively busy cycle in docsland, with changes all over: 2025-10-03 17:16:13 -07:00
virt KVM x86 fixes for 6.18: 2025-10-18 10:25:43 +02:00
w1 docs: w1: ds2482: fix typo in buses 2025-09-16 10:00:57 -06:00
watchdog
wmi
.gitignore
.renames.txt
Changes
CodingStyle
Kconfig
Makefile
SubmittingPatches
atomic_bitops.txt
atomic_t.txt
conf.py
docutils.conf
index.rst
memory-barriers.txt
subsystem-apis.rst