vfio/gvt: Use mdev_get_type_group_id()
authorJason Gunthorpe <jgg@nvidia.com>
Tue, 6 Apr 2021 19:40:39 +0000 (16:40 -0300)
committerAlex Williamson <alex.williamson@redhat.com>
Mon, 12 Apr 2021 16:36:00 +0000 (10:36 -0600)
intel_gvt_init_vgpu_type_groups() makes gvt->types 1:1 with the
supported_type_groups array, so the type_group_id is also the index into
gvt->types. Use it directly and remove the string matching.

Reviewed-by: Kevin Tian <kevin.tian@intel.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
Message-Id: <16-v2-d36939638fc6+d54-vfio2_jgg@nvidia.com>
Reviewed-by: Zhenyu Wang <zhenyuw@linux.intel.com>
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
drivers/gpu/drm/i915/gvt/gvt.c
drivers/gpu/drm/i915/gvt/gvt.h
drivers/gpu/drm/i915/gvt/kvmgt.c

index d1d8ee4..4b47a18 100644 (file)
@@ -46,22 +46,12 @@ static const char * const supported_hypervisors[] = {
        [INTEL_GVT_HYPERVISOR_KVM] = "KVM",
 };
 
-static struct intel_vgpu_type *intel_gvt_find_vgpu_type(struct intel_gvt *gvt,
-               const char *name)
+static struct intel_vgpu_type *
+intel_gvt_find_vgpu_type(struct intel_gvt *gvt, unsigned int type_group_id)
 {
-       const char *driver_name =
-               dev_driver_string(&gvt->gt->i915->drm.pdev->dev);
-       int i;
-
-       name += strlen(driver_name) + 1;
-       for (i = 0; i < gvt->num_types; i++) {
-               struct intel_vgpu_type *t = &gvt->types[i];
-
-               if (!strncmp(t->name, name, sizeof(t->name)))
-                       return t;
-       }
-
-       return NULL;
+       if (WARN_ON(type_group_id >= gvt->num_types))
+               return NULL;
+       return &gvt->types[type_group_id];
 }
 
 static ssize_t available_instances_show(struct kobject *kobj,
@@ -71,7 +61,7 @@ static ssize_t available_instances_show(struct kobject *kobj,
        unsigned int num = 0;
        void *gvt = kdev_to_i915(dev)->gvt;
 
-       type = intel_gvt_find_vgpu_type(gvt, kobject_name(kobj));
+       type = intel_gvt_find_vgpu_type(gvt, mtype_get_type_group_id(kobj));
        if (!type)
                num = 0;
        else
@@ -92,7 +82,7 @@ static ssize_t description_show(struct kobject *kobj, struct device *dev,
        struct intel_vgpu_type *type;
        void *gvt = kdev_to_i915(dev)->gvt;
 
-       type = intel_gvt_find_vgpu_type(gvt, kobject_name(kobj));
+       type = intel_gvt_find_vgpu_type(gvt, mtype_get_type_group_id(kobj));
        if (!type)
                return 0;
 
index 03c993d..0cf480f 100644 (file)
@@ -569,8 +569,8 @@ struct intel_gvt_ops {
        void (*vgpu_reset)(struct intel_vgpu *);
        void (*vgpu_activate)(struct intel_vgpu *);
        void (*vgpu_deactivate)(struct intel_vgpu *);
-       struct intel_vgpu_type *(*gvt_find_vgpu_type)(struct intel_gvt *gvt,
-                       const char *name);
+       struct intel_vgpu_type *(*gvt_find_vgpu_type)(
+               struct intel_gvt *gvt, unsigned int type_group_id);
        bool (*get_gvt_attrs)(struct attribute_group ***intel_vgpu_type_groups);
        int (*vgpu_query_plane)(struct intel_vgpu *vgpu, void *);
        int (*vgpu_get_dmabuf)(struct intel_vgpu *vgpu, unsigned int);
index b434825..16e1e4a 100644 (file)
@@ -700,10 +700,9 @@ static int intel_vgpu_create(struct kobject *kobj, struct mdev_device *mdev)
        pdev = mdev_parent_dev(mdev);
        gvt = kdev_to_i915(pdev)->gvt;
 
-       type = intel_gvt_ops->gvt_find_vgpu_type(gvt, kobject_name(kobj));
+       type = intel_gvt_ops->gvt_find_vgpu_type(gvt,
+                                                mdev_get_type_group_id(mdev));
        if (!type) {
-               gvt_vgpu_err("failed to find type %s to create\n",
-                                               kobject_name(kobj));
                ret = -EINVAL;
                goto out;
        }