Hi Zhenzhong, On 6/3/24 08:10, Zhenzhong Duan wrote: > TYPE_HOST_IOMMU_DEVICE_IOMMUFD represents a host IOMMU device under > iommufd backend. > > It will have its own .get_cap() implementation. > > Opportunistically, add missed header to include/sysemu/iommufd.h.
I would explain why it is abstract, ie. because it is going to be derived into VFIO or VDPA type'd device. Besides I think I would simply squash patches 3 and 4 Thanks Eric > > Suggested-by: Cédric Le Goater <c...@redhat.com> > Signed-off-by: Yi Liu <yi.l....@intel.com> > Signed-off-by: Zhenzhong Duan <zhenzhong.d...@intel.com> > --- > include/sysemu/iommufd.h | 16 ++++++++++++++++ > backends/iommufd.c | 35 ++++++++++++++++++----------------- > 2 files changed, 34 insertions(+), 17 deletions(-) > > diff --git a/include/sysemu/iommufd.h b/include/sysemu/iommufd.h > index 293bfbe967..f6e6d6e1f9 100644 > --- a/include/sysemu/iommufd.h > +++ b/include/sysemu/iommufd.h > @@ -1,9 +1,23 @@ > +/* > + * iommufd container backend declaration > + * > + * Copyright (C) 2024 Intel Corporation. > + * Copyright Red Hat, Inc. 2024 > + * > + * Authors: Yi Liu <yi.l....@intel.com> > + * Eric Auger <eric.au...@redhat.com> > + * Zhenzhong Duan <zhenzhong.d...@intel.com> > + * > + * SPDX-License-Identifier: GPL-2.0-or-later > + */ > + > #ifndef SYSEMU_IOMMUFD_H > #define SYSEMU_IOMMUFD_H > > #include "qom/object.h" > #include "exec/hwaddr.h" > #include "exec/cpu-common.h" > +#include "sysemu/host_iommu_device.h" > > #define TYPE_IOMMUFD_BACKEND "iommufd" > OBJECT_DECLARE_TYPE(IOMMUFDBackend, IOMMUFDBackendClass, IOMMUFD_BACKEND) > @@ -33,4 +47,6 @@ int iommufd_backend_map_dma(IOMMUFDBackend *be, uint32_t > ioas_id, hwaddr iova, > ram_addr_t size, void *vaddr, bool readonly); > int iommufd_backend_unmap_dma(IOMMUFDBackend *be, uint32_t ioas_id, > hwaddr iova, ram_addr_t size); > + > +#define TYPE_HOST_IOMMU_DEVICE_IOMMUFD TYPE_HOST_IOMMU_DEVICE "-iommufd" > #endif > diff --git a/backends/iommufd.c b/backends/iommufd.c > index c506afbdac..012f18d8d8 100644 > --- a/backends/iommufd.c > +++ b/backends/iommufd.c > @@ -208,23 +208,24 @@ int iommufd_backend_unmap_dma(IOMMUFDBackend *be, > uint32_t ioas_id, > return ret; > } > > -static const TypeInfo iommufd_backend_info = { > - .name = TYPE_IOMMUFD_BACKEND, > - .parent = TYPE_OBJECT, > - .instance_size = sizeof(IOMMUFDBackend), > - .instance_init = iommufd_backend_init, > - .instance_finalize = iommufd_backend_finalize, > - .class_size = sizeof(IOMMUFDBackendClass), > - .class_init = iommufd_backend_class_init, > - .interfaces = (InterfaceInfo[]) { > - { TYPE_USER_CREATABLE }, > - { } > +static const TypeInfo types[] = { > + { > + .name = TYPE_IOMMUFD_BACKEND, > + .parent = TYPE_OBJECT, > + .instance_size = sizeof(IOMMUFDBackend), > + .instance_init = iommufd_backend_init, > + .instance_finalize = iommufd_backend_finalize, > + .class_size = sizeof(IOMMUFDBackendClass), > + .class_init = iommufd_backend_class_init, > + .interfaces = (InterfaceInfo[]) { > + { TYPE_USER_CREATABLE }, > + { } > + } > + }, { > + .name = TYPE_HOST_IOMMU_DEVICE_IOMMUFD, > + .parent = TYPE_HOST_IOMMU_DEVICE, > + .abstract = true, > } > }; > > -static void register_types(void) > -{ > - type_register_static(&iommufd_backend_info); > -} > - > -type_init(register_types); > +DEFINE_TYPES(types)