mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 04:38:03 +00:00
vfio/pci: Support 8-byte PCI loads and stores
Many PCI adapters can benefit or even require full 64bit read and write access to their registers. In order to enable work on user-space drivers for these devices add two new variations vfio_pci_core_io{read|write}64 of the existing access methods when the architecture supports 64-bit ioreads and iowrites. Signed-off-by: Ben Segal <bpsegal@us.ibm.com> Co-developed-by: Gerd Bayer <gbayer@linux.ibm.com> Signed-off-by: Gerd Bayer <gbayer@linux.ibm.com> Link: https://lore.kernel.org/r/20240619115847.1344875-3-gbayer@linux.ibm.com Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
This commit is contained in:
parent
186bfe44ea
commit
4df13a6871
@ -89,6 +89,9 @@ EXPORT_SYMBOL_GPL(vfio_pci_core_ioread##size);
|
||||
VFIO_IOREAD(8)
|
||||
VFIO_IOREAD(16)
|
||||
VFIO_IOREAD(32)
|
||||
#ifdef ioread64
|
||||
VFIO_IOREAD(64)
|
||||
#endif
|
||||
|
||||
#define VFIO_IORDWR(size) \
|
||||
static int vfio_pci_iordwr##size(struct vfio_pci_core_device *vdev,\
|
||||
@ -124,6 +127,10 @@ static int vfio_pci_iordwr##size(struct vfio_pci_core_device *vdev,\
|
||||
VFIO_IORDWR(8)
|
||||
VFIO_IORDWR(16)
|
||||
VFIO_IORDWR(32)
|
||||
#if defined(ioread64) && defined(iowrite64)
|
||||
VFIO_IORDWR(64)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Read or write from an __iomem region (MMIO or I/O port) with an excluded
|
||||
* range which is inaccessible. The excluded range drops writes and fills
|
||||
@ -148,6 +155,15 @@ ssize_t vfio_pci_core_do_io_rw(struct vfio_pci_core_device *vdev, bool test_mem,
|
||||
else
|
||||
fillable = 0;
|
||||
|
||||
#if defined(ioread64) && defined(iowrite64)
|
||||
if (fillable >= 8 && !(off % 8)) {
|
||||
ret = vfio_pci_iordwr64(vdev, iswrite, test_mem,
|
||||
io, buf, off, &filled);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
} else
|
||||
#endif
|
||||
if (fillable >= 4 && !(off % 4)) {
|
||||
ret = vfio_pci_iordwr32(vdev, iswrite, test_mem,
|
||||
io, buf, off, &filled);
|
||||
|
@ -155,5 +155,8 @@ int vfio_pci_core_ioread##size(struct vfio_pci_core_device *vdev, \
|
||||
VFIO_IOREAD_DECLATION(8)
|
||||
VFIO_IOREAD_DECLATION(16)
|
||||
VFIO_IOREAD_DECLATION(32)
|
||||
#ifdef ioread64
|
||||
VFIO_IOREAD_DECLATION(64)
|
||||
#endif
|
||||
|
||||
#endif /* VFIO_PCI_CORE_H */
|
||||
|
Loading…
Reference in New Issue
Block a user