mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 08:13:54 -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
|
@ -67,4 +67,54 @@ bool iommufd_backend_invalidate_cache(IOMMUFDBackend *be, uint32_t id,
|
|||
Error **errp);
|
||||
|
||||
#define TYPE_HOST_IOMMU_DEVICE_IOMMUFD TYPE_HOST_IOMMU_DEVICE "-iommufd"
|
||||
OBJECT_DECLARE_TYPE(HostIOMMUDeviceIOMMUFD, HostIOMMUDeviceIOMMUFDClass,
|
||||
HOST_IOMMU_DEVICE_IOMMUFD)
|
||||
|
||||
/* Overload of the host IOMMU device for the iommufd backend */
|
||||
struct HostIOMMUDeviceIOMMUFD {
|
||||
HostIOMMUDevice parent_obj;
|
||||
|
||||
IOMMUFDBackend *iommufd;
|
||||
uint32_t devid;
|
||||
uint32_t hwpt_id;
|
||||
};
|
||||
|
||||
struct HostIOMMUDeviceIOMMUFDClass {
|
||||
HostIOMMUDeviceClass parent_class;
|
||||
|
||||
/**
|
||||
* @attach_hwpt: attach host IOMMU device to IOMMUFD hardware page table.
|
||||
* VFIO and VDPA device can have different implementation.
|
||||
*
|
||||
* Mandatory callback.
|
||||
*
|
||||
* @idev: host IOMMU device backed by IOMMUFD backend.
|
||||
*
|
||||
* @hwpt_id: ID of IOMMUFD hardware page table.
|
||||
*
|
||||
* @errp: pass an Error out when attachment fails.
|
||||
*
|
||||
* Returns: true on success, false on failure.
|
||||
*/
|
||||
bool (*attach_hwpt)(HostIOMMUDeviceIOMMUFD *idev, uint32_t hwpt_id,
|
||||
Error **errp);
|
||||
/**
|
||||
* @detach_hwpt: detach host IOMMU device from IOMMUFD hardware page table.
|
||||
* VFIO and VDPA device can have different implementation.
|
||||
*
|
||||
* Mandatory callback.
|
||||
*
|
||||
* @idev: host IOMMU device backed by IOMMUFD backend.
|
||||
*
|
||||
* @errp: pass an Error out when attachment fails.
|
||||
*
|
||||
* Returns: true on success, false on failure.
|
||||
*/
|
||||
bool (*detach_hwpt)(HostIOMMUDeviceIOMMUFD *idev, Error **errp);
|
||||
};
|
||||
|
||||
bool host_iommu_device_iommufd_attach_hwpt(HostIOMMUDeviceIOMMUFD *idev,
|
||||
uint32_t hwpt_id, Error **errp);
|
||||
bool host_iommu_device_iommufd_detach_hwpt(HostIOMMUDeviceIOMMUFD *idev,
|
||||
Error **errp);
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue