[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC v1 05/18] vfio/pci: add pasid alloc/free implementatio
From: |
Liu Yi L |
Subject: |
[Qemu-devel] [RFC v1 05/18] vfio/pci: add pasid alloc/free implementation |
Date: |
Fri, 5 Jul 2019 19:01:38 +0800 |
This patch adds vfio implementation PCIPASIDOps.alloc_pasid/free_pasid().
These two functions are used to propagate guest pasid allocation and
free requests to host via vfio container ioctl.
Cc: Kevin Tian <address@hidden>
Cc: Jacob Pan <address@hidden>
Cc: Peter Xu <address@hidden>
Cc: Eric Auger <address@hidden>
Cc: Yi Sun <address@hidden>
Cc: David Gibson <address@hidden>
Signed-off-by: Liu Yi L <address@hidden>
Signed-off-by: Yi Sun <address@hidden>
---
hw/vfio/pci.c | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 61 insertions(+)
diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c
index ce3fe96..ab184ad 100644
--- a/hw/vfio/pci.c
+++ b/hw/vfio/pci.c
@@ -2690,6 +2690,65 @@ static void vfio_unregister_req_notifier(VFIOPCIDevice
*vdev)
vdev->req_enabled = false;
}
+static int vfio_pci_device_request_pasid_alloc(PCIBus *bus,
+ int32_t devfn,
+ uint32_t min_pasid,
+ uint32_t max_pasid)
+{
+ PCIDevice *pdev = bus->devices[devfn];
+ VFIOPCIDevice *vdev = DO_UPCAST(VFIOPCIDevice, pdev, pdev);
+ VFIOContainer *container = vdev->vbasedev.group->container;
+ struct vfio_iommu_type1_pasid_request req;
+ unsigned long argsz;
+ int pasid;
+
+ argsz = sizeof(req);
+ req.argsz = argsz;
+ req.flag = VFIO_IOMMU_PASID_ALLOC;
+ req.min_pasid = min_pasid;
+ req.max_pasid = max_pasid;
+
+ rcu_read_lock();
+ pasid = ioctl(container->fd, VFIO_IOMMU_PASID_REQUEST, &req);
+ if (pasid < 0) {
+ error_report("vfio_pci_device_request_pasid_alloc:"
+ " request failed, contanier: %p", container);
+ }
+ rcu_read_unlock();
+ return pasid;
+}
+
+static int vfio_pci_device_request_pasid_free(PCIBus *bus,
+ int32_t devfn,
+ uint32_t pasid)
+{
+ PCIDevice *pdev = bus->devices[devfn];
+ VFIOPCIDevice *vdev = DO_UPCAST(VFIOPCIDevice, pdev, pdev);
+ VFIOContainer *container = vdev->vbasedev.group->container;
+ struct vfio_iommu_type1_pasid_request req;
+ unsigned long argsz;
+ int ret = 0;
+
+ argsz = sizeof(req);
+ req.argsz = argsz;
+ req.flag = VFIO_IOMMU_PASID_FREE;
+ req.pasid = pasid;
+
+ rcu_read_lock();
+ ret = ioctl(container->fd, VFIO_IOMMU_PASID_REQUEST, &req);
+ if (ret != 0) {
+ error_report("vfio_pci_device_request_pasid_free:"
+ " request failed, contanier: %p", container);
+ }
+ rcu_read_unlock();
+ return ret;
+}
+
+static PCIPASIDOps vfio_pci_pasid_ops = {
+ .alloc_pasid = vfio_pci_device_request_pasid_alloc,
+ .free_pasid = vfio_pci_device_request_pasid_free,
+};
+
static void vfio_realize(PCIDevice *pdev, Error **errp)
{
VFIOPCIDevice *vdev = PCI_VFIO(pdev);
@@ -2991,6 +3050,8 @@ static void vfio_realize(PCIDevice *pdev, Error **errp)
vfio_register_req_notifier(vdev);
vfio_setup_resetfn_quirk(vdev);
+ pci_setup_pasid_ops(pdev, &vfio_pci_pasid_ops);
+
return;
out_teardown:
--
2.7.4
- Re: [Qemu-devel] [RFC v1 04/18] intel_iommu: add "sm_model" option, (continued)
[Qemu-devel] [RFC v1 03/18] hw/pci: introduce PCIPASIDOps to PCIDevice, Liu Yi L, 2019/07/06
- Re: [Qemu-devel] [RFC v1 03/18] hw/pci: introduce PCIPASIDOps to PCIDevice, Peter Xu, 2019/07/08
- Re: [Qemu-devel] [RFC v1 03/18] hw/pci: introduce PCIPASIDOps to PCIDevice, Auger Eric, 2019/07/09
- Re: [Qemu-devel] [RFC v1 03/18] hw/pci: introduce PCIPASIDOps to PCIDevice, Liu, Yi L, 2019/07/10
- Re: [Qemu-devel] [RFC v1 03/18] hw/pci: introduce PCIPASIDOps to PCIDevice, address@hidden, 2019/07/11
- Re: [Qemu-devel] [RFC v1 03/18] hw/pci: introduce PCIPASIDOps to PCIDevice, Liu, Yi L, 2019/07/11
[Qemu-devel] [RFC v1 01/18] linux-headers: import iommu.h from kernel, Liu Yi L, 2019/07/06
[Qemu-devel] [RFC v1 05/18] vfio/pci: add pasid alloc/free implementation,
Liu Yi L <=
- Re: [Qemu-devel] [RFC v1 05/18] vfio/pci: add pasid alloc/free implementation, Peter Xu, 2019/07/08
- Re: [Qemu-devel] [RFC v1 05/18] vfio/pci: add pasid alloc/free implementation, David Gibson, 2019/07/15
- Re: [Qemu-devel] [RFC v1 05/18] vfio/pci: add pasid alloc/free implementation, Liu, Yi L, 2019/07/16
- Re: [Qemu-devel] [RFC v1 05/18] vfio/pci: add pasid alloc/free implementation, David Gibson, 2019/07/16
- Re: [Qemu-devel] [RFC v1 05/18] vfio/pci: add pasid alloc/free implementation, Liu, Yi L, 2019/07/22
- Re: [Qemu-devel] [RFC v1 05/18] vfio/pci: add pasid alloc/free implementation, David Gibson, 2019/07/23
- Re: [Qemu-devel] [RFC v1 05/18] vfio/pci: add pasid alloc/free implementation, Liu, Yi L, 2019/07/24
- Re: [Qemu-devel] [RFC v1 05/18] vfio/pci: add pasid alloc/free implementation, Auger Eric, 2019/07/24
- Re: [Qemu-devel] [RFC v1 05/18] vfio/pci: add pasid alloc/free implementation, Liu, Yi L, 2019/07/26