Message ID | 20240603061023.269738-4-zhenzhong.duan@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Add a host IOMMU device abstraction to check with vIOMMU | expand |
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 <clg@redhat.com> > Signed-off-by: Yi Liu <yi.l.liu@intel.com> > Signed-off-by: Zhenzhong Duan <zhenzhong.duan@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.liu@intel.com> > + * Eric Auger <eric.auger@redhat.com> > + * Zhenzhong Duan <zhenzhong.duan@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)
>-----Original Message----- >From: Eric Auger <eric.auger@redhat.com> >Subject: Re: [PATCH v6 03/19] backends/iommufd: Introduce abstract >TYPE_HOST_IOMMU_DEVICE_IOMMUFD device > > >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. Sure. > >Besides I think I would simply squash patches 3 and 4 Will do. Thanks Zhenzhong > >Thanks > >Eric >> >> Suggested-by: Cédric Le Goater <clg@redhat.com> >> Signed-off-by: Yi Liu <yi.l.liu@intel.com> >> Signed-off-by: Zhenzhong Duan <zhenzhong.duan@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.liu@intel.com> >> + * Eric Auger <eric.auger@redhat.com> >> + * Zhenzhong Duan <zhenzhong.duan@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)
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.liu@intel.com> + * Eric Auger <eric.auger@redhat.com> + * Zhenzhong Duan <zhenzhong.duan@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)