diff mbox series

[v2,08/17] vfio/container: Introduce vfio_get_iommu_class_name()

Message ID 20240617063409.34393-9-clg@redhat.com
State New
Headers show
Series vfio: QOMify VFIOContainer | expand

Commit Message

Cédric Le Goater June 17, 2024, 6:34 a.m. UTC
Rework vfio_get_iommu_class() to return a literal class name instead
of a class object. We will need this name to instantiate the object
later on. Since the default case asserts, remove the error report as
QEMU will simply abort before.

Signed-off-by: Cédric Le Goater <clg@redhat.com>
Reviewed-by: Zhenzhong Duan <zhenzhong.duan@intel.com>
---
 hw/vfio/container.c | 18 ++++++------------
 1 file changed, 6 insertions(+), 12 deletions(-)

Comments

Eric Auger June 17, 2024, 2:29 p.m. UTC | #1
On 6/17/24 08:34, Cédric Le Goater wrote:
> Rework vfio_get_iommu_class() to return a literal class name instead
> of a class object. We will need this name to instantiate the object
> later on. Since the default case asserts, remove the error report as
> QEMU will simply abort before.
>
> Signed-off-by: Cédric Le Goater <clg@redhat.com>
> Reviewed-by: Zhenzhong Duan <zhenzhong.duan@intel.com>

Reviewed-by: Eric Auger <eric.auger@redhat.com>


Eric
> ---
>  hw/vfio/container.c | 18 ++++++------------
>  1 file changed, 6 insertions(+), 12 deletions(-)
>
> diff --git a/hw/vfio/container.c b/hw/vfio/container.c
> index 589f37bc6d68dae18f9e46371f14d6952b2240c0..bb6abe60ee29d5b69b494523c9002f53e1b2a3c8 100644
> --- a/hw/vfio/container.c
> +++ b/hw/vfio/container.c
> @@ -373,24 +373,20 @@ static int vfio_get_iommu_type(int container_fd,
>  /*
>   * vfio_get_iommu_ops - get a VFIOIOMMUClass associated with a type
>   */
> -static const VFIOIOMMUClass *vfio_get_iommu_class(int iommu_type, Error **errp)
> +static const char *vfio_get_iommu_class_name(int iommu_type)
>  {
> -    ObjectClass *klass = NULL;
> -
>      switch (iommu_type) {
>      case VFIO_TYPE1v2_IOMMU:
>      case VFIO_TYPE1_IOMMU:
> -        klass = object_class_by_name(TYPE_VFIO_IOMMU_LEGACY);
> +        return TYPE_VFIO_IOMMU_LEGACY;
>          break;
>      case VFIO_SPAPR_TCE_v2_IOMMU:
>      case VFIO_SPAPR_TCE_IOMMU:
> -        klass = object_class_by_name(TYPE_VFIO_IOMMU_SPAPR);
> +        return TYPE_VFIO_IOMMU_SPAPR;
>          break;
>      default:
>          g_assert_not_reached();
>      };
> -
> -    return VFIO_IOMMU_CLASS(klass);
>  }
>  
>  static bool vfio_set_iommu(VFIOContainer *container, int group_fd,
> @@ -398,6 +394,7 @@ static bool vfio_set_iommu(VFIOContainer *container, int group_fd,
>  {
>      int iommu_type;
>      const VFIOIOMMUClass *vioc;
> +    const char *vioc_name;
>  
>      iommu_type = vfio_get_iommu_type(container->fd, errp);
>      if (iommu_type < 0) {
> @@ -426,11 +423,8 @@ static bool vfio_set_iommu(VFIOContainer *container, int group_fd,
>  
>      container->iommu_type = iommu_type;
>  
> -    vioc = vfio_get_iommu_class(iommu_type, errp);
> -    if (!vioc) {
> -        error_setg(errp, "No available IOMMU models");
> -        return false;
> -    }
> +    vioc_name = vfio_get_iommu_class_name(iommu_type);
> +    vioc = VFIO_IOMMU_CLASS(object_class_by_name(vioc_name));
>  
>      vfio_container_init(&container->bcontainer, vioc);
>      return true;
diff mbox series

Patch

diff --git a/hw/vfio/container.c b/hw/vfio/container.c
index 589f37bc6d68dae18f9e46371f14d6952b2240c0..bb6abe60ee29d5b69b494523c9002f53e1b2a3c8 100644
--- a/hw/vfio/container.c
+++ b/hw/vfio/container.c
@@ -373,24 +373,20 @@  static int vfio_get_iommu_type(int container_fd,
 /*
  * vfio_get_iommu_ops - get a VFIOIOMMUClass associated with a type
  */
-static const VFIOIOMMUClass *vfio_get_iommu_class(int iommu_type, Error **errp)
+static const char *vfio_get_iommu_class_name(int iommu_type)
 {
-    ObjectClass *klass = NULL;
-
     switch (iommu_type) {
     case VFIO_TYPE1v2_IOMMU:
     case VFIO_TYPE1_IOMMU:
-        klass = object_class_by_name(TYPE_VFIO_IOMMU_LEGACY);
+        return TYPE_VFIO_IOMMU_LEGACY;
         break;
     case VFIO_SPAPR_TCE_v2_IOMMU:
     case VFIO_SPAPR_TCE_IOMMU:
-        klass = object_class_by_name(TYPE_VFIO_IOMMU_SPAPR);
+        return TYPE_VFIO_IOMMU_SPAPR;
         break;
     default:
         g_assert_not_reached();
     };
-
-    return VFIO_IOMMU_CLASS(klass);
 }
 
 static bool vfio_set_iommu(VFIOContainer *container, int group_fd,
@@ -398,6 +394,7 @@  static bool vfio_set_iommu(VFIOContainer *container, int group_fd,
 {
     int iommu_type;
     const VFIOIOMMUClass *vioc;
+    const char *vioc_name;
 
     iommu_type = vfio_get_iommu_type(container->fd, errp);
     if (iommu_type < 0) {
@@ -426,11 +423,8 @@  static bool vfio_set_iommu(VFIOContainer *container, int group_fd,
 
     container->iommu_type = iommu_type;
 
-    vioc = vfio_get_iommu_class(iommu_type, errp);
-    if (!vioc) {
-        error_setg(errp, "No available IOMMU models");
-        return false;
-    }
+    vioc_name = vfio_get_iommu_class_name(iommu_type);
+    vioc = VFIO_IOMMU_CLASS(object_class_by_name(vioc_name));
 
     vfio_container_init(&container->bcontainer, vioc);
     return true;