79 lines
2.9 KiB
Diff
79 lines
2.9 KiB
Diff
|
|
From 7d53d0938921d0faa32e1fef4c7bcc45d21f9bfb Mon Sep 17 00:00:00 2001
|
||
|
|
From: Joao Martins <joao.m.martins@oracle.com>
|
||
|
|
Date: Fri, 19 Jul 2024 13:04:51 +0100
|
||
|
|
Subject: [PATCH] backends/iommufd: Extend iommufd_backend_get_device_info() to
|
||
|
|
fetch HW capabilities
|
||
|
|
MIME-Version: 1.0
|
||
|
|
Content-Type: text/plain; charset=UTF-8
|
||
|
|
Content-Transfer-Encoding: 8bit
|
||
|
|
|
||
|
|
The helper will be able to fetch vendor agnostic IOMMU capabilities
|
||
|
|
supported both by hardware and software. Right now it is only iommu dirty
|
||
|
|
tracking.
|
||
|
|
|
||
|
|
Signed-off-by: Joao Martins <joao.m.martins@oracle.com>
|
||
|
|
Reviewed-by: Zhenzhong Duan <zhenzhong.duan@intel.com>
|
||
|
|
Reviewed-by: Cédric Le Goater <clg@redhat.com>
|
||
|
|
Reviewed-by: Eric Auger <eric.auger@redhat.com>
|
||
|
|
---
|
||
|
|
backends/iommufd.c | 4 +++-
|
||
|
|
hw/vfio/iommufd.c | 4 +++-
|
||
|
|
include/sysemu/iommufd.h | 2 +-
|
||
|
|
3 files changed, 7 insertions(+), 3 deletions(-)
|
||
|
|
|
||
|
|
diff --git a/backends/iommufd.c b/backends/iommufd.c
|
||
|
|
index 7e805bd664..1ce2a24226 100644
|
||
|
|
--- a/backends/iommufd.c
|
||
|
|
+++ b/backends/iommufd.c
|
||
|
|
@@ -225,7 +225,7 @@ int iommufd_backend_unmap_dma(IOMMUFDBackend *be, uint32_t ioas_id,
|
||
|
|
|
||
|
|
bool iommufd_backend_get_device_info(IOMMUFDBackend *be, uint32_t devid,
|
||
|
|
uint32_t *type, void *data, uint32_t len,
|
||
|
|
- Error **errp)
|
||
|
|
+ uint64_t *caps, Error **errp)
|
||
|
|
{
|
||
|
|
struct iommu_hw_info info = {
|
||
|
|
.size = sizeof(info),
|
||
|
|
@@ -241,6 +241,8 @@ bool iommufd_backend_get_device_info(IOMMUFDBackend *be, uint32_t devid,
|
||
|
|
|
||
|
|
g_assert(type);
|
||
|
|
*type = info.out_data_type;
|
||
|
|
+ g_assert(caps);
|
||
|
|
+ *caps = info.out_capabilities;
|
||
|
|
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
diff --git a/hw/vfio/iommufd.c b/hw/vfio/iommufd.c
|
||
|
|
index 7cbf0e44f1..d5b923ca83 100644
|
||
|
|
--- a/hw/vfio/iommufd.c
|
||
|
|
+++ b/hw/vfio/iommufd.c
|
||
|
|
@@ -647,9 +647,11 @@ static bool hiod_iommufd_vfio_realize(HostIOMMUDevice *hiod, void *opaque,
|
||
|
|
union {
|
||
|
|
struct iommu_hw_info_vtd vtd;
|
||
|
|
} data;
|
||
|
|
+ uint64_t hw_caps;
|
||
|
|
|
||
|
|
if (!iommufd_backend_get_device_info(vdev->iommufd, vdev->devid,
|
||
|
|
- &type, &data, sizeof(data), errp)) {
|
||
|
|
+ &type, &data, sizeof(data),
|
||
|
|
+ &hw_caps, errp)) {
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
|
||
|
|
diff --git a/include/sysemu/iommufd.h b/include/sysemu/iommufd.h
|
||
|
|
index dfade18e6d..a0a0143856 100644
|
||
|
|
--- a/include/sysemu/iommufd.h
|
||
|
|
+++ b/include/sysemu/iommufd.h
|
||
|
|
@@ -51,7 +51,7 @@ int iommufd_backend_unmap_dma(IOMMUFDBackend *be, uint32_t ioas_id,
|
||
|
|
hwaddr iova, ram_addr_t size);
|
||
|
|
bool iommufd_backend_get_device_info(IOMMUFDBackend *be, uint32_t devid,
|
||
|
|
uint32_t *type, void *data, uint32_t len,
|
||
|
|
- Error **errp);
|
||
|
|
+ uint64_t *caps, Error **errp);
|
||
|
|
|
||
|
|
#define TYPE_HOST_IOMMU_DEVICE_IOMMUFD TYPE_HOST_IOMMU_DEVICE "-iommufd"
|
||
|
|
#endif
|
||
|
|
--
|
||
|
|
2.41.0.windows.1
|
||
|
|
|