mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-11-05 20:35:44 +00:00
HostIOMMUDevice: Introduce get_iova_ranges callback
Introduce a new HostIOMMUDevice callback that allows to retrieve the usable IOVA ranges. Implement this callback in the legacy VFIO and IOMMUFD VFIO host iommu devices. This relies on the VFIODevice agent's base container iova_ranges resource. Signed-off-by: Eric Auger <eric.auger@redhat.com> Reviewed-by: Zhenzhong Duan <zhenzhong.duan@intel.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
817ef10da2
commit
3ad35d9158
3 changed files with 40 additions and 0 deletions
|
@ -1164,12 +1164,28 @@ static int hiod_legacy_vfio_get_cap(HostIOMMUDevice *hiod, int cap,
|
|||
}
|
||||
}
|
||||
|
||||
static GList *
|
||||
hiod_legacy_vfio_get_iova_ranges(HostIOMMUDevice *hiod, Error **errp)
|
||||
{
|
||||
VFIODevice *vdev = hiod->agent;
|
||||
GList *l = NULL;
|
||||
|
||||
g_assert(vdev);
|
||||
|
||||
if (vdev->bcontainer) {
|
||||
l = g_list_copy(vdev->bcontainer->iova_ranges);
|
||||
}
|
||||
|
||||
return l;
|
||||
}
|
||||
|
||||
static void hiod_legacy_vfio_class_init(ObjectClass *oc, void *data)
|
||||
{
|
||||
HostIOMMUDeviceClass *hioc = HOST_IOMMU_DEVICE_CLASS(oc);
|
||||
|
||||
hioc->realize = hiod_legacy_vfio_realize;
|
||||
hioc->get_cap = hiod_legacy_vfio_get_cap;
|
||||
hioc->get_iova_ranges = hiod_legacy_vfio_get_iova_ranges;
|
||||
};
|
||||
|
||||
static const TypeInfo types[] = {
|
||||
|
|
|
@ -645,11 +645,27 @@ static bool hiod_iommufd_vfio_realize(HostIOMMUDevice *hiod, void *opaque,
|
|||
return true;
|
||||
}
|
||||
|
||||
static GList *
|
||||
hiod_iommufd_vfio_get_iova_ranges(HostIOMMUDevice *hiod, Error **errp)
|
||||
{
|
||||
VFIODevice *vdev = hiod->agent;
|
||||
GList *l = NULL;
|
||||
|
||||
g_assert(vdev);
|
||||
|
||||
if (vdev->bcontainer) {
|
||||
l = g_list_copy(vdev->bcontainer->iova_ranges);
|
||||
}
|
||||
|
||||
return l;
|
||||
}
|
||||
|
||||
static void hiod_iommufd_vfio_class_init(ObjectClass *oc, void *data)
|
||||
{
|
||||
HostIOMMUDeviceClass *hiodc = HOST_IOMMU_DEVICE_CLASS(oc);
|
||||
|
||||
hiodc->realize = hiod_iommufd_vfio_realize;
|
||||
hiodc->get_iova_ranges = hiod_iommufd_vfio_get_iova_ranges;
|
||||
};
|
||||
|
||||
static const TypeInfo types[] = {
|
||||
|
|
|
@ -80,6 +80,14 @@ struct HostIOMMUDeviceClass {
|
|||
* i.e., HOST_IOMMU_DEVICE_CAP_AW_BITS.
|
||||
*/
|
||||
int (*get_cap)(HostIOMMUDevice *hiod, int cap, Error **errp);
|
||||
/**
|
||||
* @get_iova_ranges: Return the list of usable iova_ranges along with
|
||||
* @hiod Host IOMMU device
|
||||
*
|
||||
* @hiod: handle to the host IOMMU device
|
||||
* @errp: error handle
|
||||
*/
|
||||
GList* (*get_iova_ranges)(HostIOMMUDevice *hiod, Error **errp);
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in a new issue