mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-06 17:23:56 -06:00
vfio/iommufd: Add properties and handlers to TYPE_HOST_IOMMU_DEVICE_IOMMUFD
Enhance HostIOMMUDeviceIOMMUFD object with 3 new members, specific to the iommufd BE + 2 new class functions. IOMMUFD BE includes IOMMUFD handle, devid and hwpt_id. IOMMUFD handle and devid are used to allocate/free ioas and hwpt. hwpt_id is used to re-attach IOMMUFD backed device to its default VFIO sub-system created hwpt, i.e., when vIOMMU is disabled by guest. These properties are initialized in hiod::realize() after attachment. 2 new class functions are [at|de]tach_hwpt(). They are used to attach/detach hwpt. VFIO and VDPA can have different implementions, so implementation will be in sub-class instead of HostIOMMUDeviceIOMMUFD, e.g., in HostIOMMUDeviceIOMMUFDVFIO. Add two wrappers host_iommu_device_iommufd_[at|de]tach_hwpt to wrap the two functions. Signed-off-by: Zhenzhong Duan <zhenzhong.duan@intel.com> Reviewed-by: Cédric Le Goater <clg@redhat.com> Reviewed-by: Eric Auger <eric.auger@redhat.com> Link: https://lore.kernel.org/qemu-devel/20250604062115.4004200-3-zhenzhong.duan@intel.com Signed-off-by: Cédric Le Goater <clg@redhat.com>
This commit is contained in:
parent
5c47679cb6
commit
98962d6298
3 changed files with 78 additions and 0 deletions
|
@ -347,6 +347,26 @@ bool iommufd_backend_invalidate_cache(IOMMUFDBackend *be, uint32_t id,
|
|||
return !ret;
|
||||
}
|
||||
|
||||
bool host_iommu_device_iommufd_attach_hwpt(HostIOMMUDeviceIOMMUFD *idev,
|
||||
uint32_t hwpt_id, Error **errp)
|
||||
{
|
||||
HostIOMMUDeviceIOMMUFDClass *idevc =
|
||||
HOST_IOMMU_DEVICE_IOMMUFD_GET_CLASS(idev);
|
||||
|
||||
g_assert(idevc->attach_hwpt);
|
||||
return idevc->attach_hwpt(idev, hwpt_id, errp);
|
||||
}
|
||||
|
||||
bool host_iommu_device_iommufd_detach_hwpt(HostIOMMUDeviceIOMMUFD *idev,
|
||||
Error **errp)
|
||||
{
|
||||
HostIOMMUDeviceIOMMUFDClass *idevc =
|
||||
HOST_IOMMU_DEVICE_IOMMUFD_GET_CLASS(idev);
|
||||
|
||||
g_assert(idevc->detach_hwpt);
|
||||
return idevc->detach_hwpt(idev, errp);
|
||||
}
|
||||
|
||||
static int hiod_iommufd_get_cap(HostIOMMUDevice *hiod, int cap, Error **errp)
|
||||
{
|
||||
HostIOMMUDeviceCaps *caps = &hiod->caps;
|
||||
|
@ -385,6 +405,8 @@ static const TypeInfo types[] = {
|
|||
}, {
|
||||
.name = TYPE_HOST_IOMMU_DEVICE_IOMMUFD,
|
||||
.parent = TYPE_HOST_IOMMU_DEVICE,
|
||||
.instance_size = sizeof(HostIOMMUDeviceIOMMUFD),
|
||||
.class_size = sizeof(HostIOMMUDeviceIOMMUFDClass),
|
||||
.class_init = hiod_iommufd_class_init,
|
||||
.abstract = true,
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue