105 lines
3.6 KiB
Diff
105 lines
3.6 KiB
Diff
|
|
From 7d3634d73af1f53549eba4b3d50bb8f9f49a5243 Mon Sep 17 00:00:00 2001
|
||
|
|
From: Joao Martins <joao.m.martins@oracle.com>
|
||
|
|
Date: Mon, 22 Jul 2024 22:13:19 +0100
|
||
|
|
Subject: [PATCH] vfio/{iommufd,container}: Remove caps::aw_bits
|
||
|
|
MIME-Version: 1.0
|
||
|
|
Content-Type: text/plain; charset=UTF-8
|
||
|
|
Content-Transfer-Encoding: 8bit
|
||
|
|
|
||
|
|
Remove caps::aw_bits which requires the bcontainer::iova_ranges being
|
||
|
|
initialized after device is actually attached. Instead defer that to
|
||
|
|
.get_cap() and call vfio_device_get_aw_bits() directly.
|
||
|
|
|
||
|
|
This is in preparation for HostIOMMUDevice::realize() being called early
|
||
|
|
during attach_device().
|
||
|
|
|
||
|
|
Suggested-by: Zhenzhong Duan <zhenzhong.duan@intel.com>
|
||
|
|
Signed-off-by: Joao Martins <joao.m.martins@oracle.com>
|
||
|
|
Reviewed-by: Cédric Le Goater <clg@redhat.com>
|
||
|
|
Reviewed-by: Eric Auger <eric.auger@redhat.com>
|
||
|
|
---
|
||
|
|
backends/iommufd.c | 3 ++-
|
||
|
|
hw/vfio/container.c | 5 +----
|
||
|
|
hw/vfio/iommufd.c | 1 -
|
||
|
|
include/sysemu/host_iommu_device.h | 3 ---
|
||
|
|
4 files changed, 3 insertions(+), 9 deletions(-)
|
||
|
|
|
||
|
|
diff --git a/backends/iommufd.c b/backends/iommufd.c
|
||
|
|
index 0d995d7563..4aebf54765 100644
|
||
|
|
--- a/backends/iommufd.c
|
||
|
|
+++ b/backends/iommufd.c
|
||
|
|
@@ -19,6 +19,7 @@
|
||
|
|
#include "qemu/error-report.h"
|
||
|
|
#include "monitor/monitor.h"
|
||
|
|
#include "trace.h"
|
||
|
|
+#include "hw/vfio/vfio-common.h"
|
||
|
|
#include <sys/ioctl.h>
|
||
|
|
#include <linux/iommufd.h>
|
||
|
|
|
||
|
|
@@ -285,7 +286,7 @@ static int hiod_iommufd_get_cap(HostIOMMUDevice *hiod, int cap, Error **errp)
|
||
|
|
case HOST_IOMMU_DEVICE_CAP_IOMMU_TYPE:
|
||
|
|
return caps->type;
|
||
|
|
case HOST_IOMMU_DEVICE_CAP_AW_BITS:
|
||
|
|
- return caps->aw_bits;
|
||
|
|
+ return vfio_device_get_aw_bits(hiod->agent);
|
||
|
|
default:
|
||
|
|
error_setg(errp, "%s: unsupported capability %x", hiod->name, cap);
|
||
|
|
return -EINVAL;
|
||
|
|
diff --git a/hw/vfio/container.c b/hw/vfio/container.c
|
||
|
|
index 8a5a112b6b..30a62348d3 100644
|
||
|
|
--- a/hw/vfio/container.c
|
||
|
|
+++ b/hw/vfio/container.c
|
||
|
|
@@ -1258,7 +1258,6 @@ static bool hiod_legacy_vfio_realize(HostIOMMUDevice *hiod, void *opaque,
|
||
|
|
VFIODevice *vdev = opaque;
|
||
|
|
|
||
|
|
hiod->name = g_strdup(vdev->name);
|
||
|
|
- hiod->caps.aw_bits = vfio_device_get_aw_bits(vdev);
|
||
|
|
hiod->agent = opaque;
|
||
|
|
|
||
|
|
return true;
|
||
|
|
@@ -1267,11 +1266,9 @@ static bool hiod_legacy_vfio_realize(HostIOMMUDevice *hiod, void *opaque,
|
||
|
|
static int hiod_legacy_vfio_get_cap(HostIOMMUDevice *hiod, int cap,
|
||
|
|
Error **errp)
|
||
|
|
{
|
||
|
|
- HostIOMMUDeviceCaps *caps = &hiod->caps;
|
||
|
|
-
|
||
|
|
switch (cap) {
|
||
|
|
case HOST_IOMMU_DEVICE_CAP_AW_BITS:
|
||
|
|
- return caps->aw_bits;
|
||
|
|
+ return vfio_device_get_aw_bits(hiod->agent);
|
||
|
|
default:
|
||
|
|
error_setg(errp, "%s: unsupported capability %x", hiod->name, cap);
|
||
|
|
return -EINVAL;
|
||
|
|
diff --git a/hw/vfio/iommufd.c b/hw/vfio/iommufd.c
|
||
|
|
index 7a069ca576..06e6a400be 100644
|
||
|
|
--- a/hw/vfio/iommufd.c
|
||
|
|
+++ b/hw/vfio/iommufd.c
|
||
|
|
@@ -745,7 +745,6 @@ static bool hiod_iommufd_vfio_realize(HostIOMMUDevice *hiod, void *opaque,
|
||
|
|
|
||
|
|
hiod->name = g_strdup(vdev->name);
|
||
|
|
caps->type = type;
|
||
|
|
- caps->aw_bits = vfio_device_get_aw_bits(vdev);
|
||
|
|
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
diff --git a/include/sysemu/host_iommu_device.h b/include/sysemu/host_iommu_device.h
|
||
|
|
index 3e5f058e7b..f586908945 100644
|
||
|
|
--- a/include/sysemu/host_iommu_device.h
|
||
|
|
+++ b/include/sysemu/host_iommu_device.h
|
||
|
|
@@ -19,12 +19,9 @@
|
||
|
|
* struct HostIOMMUDeviceCaps - Define host IOMMU device capabilities.
|
||
|
|
*
|
||
|
|
* @type: host platform IOMMU type.
|
||
|
|
- *
|
||
|
|
- * @aw_bits: host IOMMU address width. 0xff if no limitation.
|
||
|
|
*/
|
||
|
|
typedef struct HostIOMMUDeviceCaps {
|
||
|
|
uint32_t type;
|
||
|
|
- uint8_t aw_bits;
|
||
|
|
} HostIOMMUDeviceCaps;
|
||
|
|
|
||
|
|
#define TYPE_HOST_IOMMU_DEVICE "host-iommu-device"
|
||
|
|
--
|
||
|
|
2.41.0.windows.1
|
||
|
|
|