[SRU][J:linux-bluefield][PATCH v2 5/7] UBUNTU: SAUCE: vfio/pci: Fix p2p address
William Tu
witu at nvidia.com
Fri Sep 6 00:40:36 UTC 2024
From: Sergey Gorenko <sergeygo at nvidia.com>
BugLink: https://bugs.launchpad.net/bugs/2077887
Use pci_bus_address instead of pci_resource_start. Bus address must
be used for P2PDMA operations. It is simple for x86_64 because bus
address is equal to PA. However, bus address is not equal to PA for
ARM (at least for BF, I did not tested the other ARM platforms.).
That's why pci_resource_start() work fine on x86_64 and we had to
replace it to pci_bus_address() on ARM.
Co-authored-by: William Tu <witu at nvidia.com>
Signed-off-by: Sergey Gorenko <sergeygo at nvidia.com>
Signed-off-by: William Tu <witu at nvidia.com>
---
drivers/vfio/pci/dma_buf.c | 10 ++++------
drivers/vfio/pci/vfio_pci_core.c | 4 +++-
2 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/drivers/vfio/pci/dma_buf.c b/drivers/vfio/pci/dma_buf.c
index 11396aeabff4..367fe7077ebf 100644
--- a/drivers/vfio/pci/dma_buf.c
+++ b/drivers/vfio/pci/dma_buf.c
@@ -4,6 +4,9 @@
#include <linux/dma-buf.h>
#include <linux/pci-p2pdma.h>
#include <linux/dma-resv.h>
+#include <linux/module.h>
+#include <uapi/linux/vfio.h>
+#include <linux/vfio_pci_core.h>
#include "vfio_pci_priv.h"
@@ -81,7 +84,7 @@ vfio_pci_dma_buf_map(struct dma_buf_attachment *attachment,
*/
dma_addr = dma_map_resource(
attachment->dev,
- pci_resource_start(priv->vdev->pdev, priv->index) +
+ pci_bus_address(priv->vdev->pdev, priv->index) +
priv->offset,
priv->dmabuf->size, dir, DMA_ATTR_SKIP_CPU_SYNC);
ret = dma_mapping_error(attachment->dev, dma_addr);
@@ -167,11 +170,6 @@ int vfio_pci_core_feature_dma_buf(struct vfio_pci_core_device *vdev, u32 flags,
struct vfio_pci_dma_buf *priv;
int ret;
- ret = vfio_check_feature(flags, argsz, VFIO_DEVICE_FEATURE_GET,
- sizeof(get_dma_buf));
- if (ret != 1)
- return ret;
-
if (copy_from_user(&get_dma_buf, arg, sizeof(get_dma_buf)))
return -EFAULT;
diff --git a/drivers/vfio/pci/vfio_pci_core.c b/drivers/vfio/pci/vfio_pci_core.c
index 4017512f6736..6c4c96fc5c54 100644
--- a/drivers/vfio/pci/vfio_pci_core.c
+++ b/drivers/vfio/pci/vfio_pci_core.c
@@ -1196,7 +1196,9 @@ long vfio_pci_core_ioctl(struct vfio_device *core_vdev, unsigned int cmd,
return 0;
case VFIO_DEVICE_FEATURE_DMA_BUF:
- return vfio_pci_core_feature_dma_buf(vdev, flags, arg, argsz);
+ return vfio_pci_core_feature_dma_buf(vdev, feature.flags,
+ (void __user *)(arg + minsz),
+ feature.argsz);
default:
return -ENOTTY;
}
--
2.34.1
More information about the kernel-team
mailing list