Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

vfio/gvt: Use mdev_get_type_group_id()

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>

authored by

Jason Gunthorpe and committed by
Alex Williamson
383987fd 07e543f4

+11 -22
+7 -17
drivers/gpu/drm/i915/gvt/gvt.c
··· 46 46 [INTEL_GVT_HYPERVISOR_KVM] = "KVM", 47 47 }; 48 48 49 - static struct intel_vgpu_type *intel_gvt_find_vgpu_type(struct intel_gvt *gvt, 50 - const char *name) 49 + static struct intel_vgpu_type * 50 + intel_gvt_find_vgpu_type(struct intel_gvt *gvt, unsigned int type_group_id) 51 51 { 52 - const char *driver_name = 53 - dev_driver_string(&gvt->gt->i915->drm.pdev->dev); 54 - int i; 55 - 56 - name += strlen(driver_name) + 1; 57 - for (i = 0; i < gvt->num_types; i++) { 58 - struct intel_vgpu_type *t = &gvt->types[i]; 59 - 60 - if (!strncmp(t->name, name, sizeof(t->name))) 61 - return t; 62 - } 63 - 64 - return NULL; 52 + if (WARN_ON(type_group_id >= gvt->num_types)) 53 + return NULL; 54 + return &gvt->types[type_group_id]; 65 55 } 66 56 67 57 static ssize_t available_instances_show(struct kobject *kobj, ··· 61 71 unsigned int num = 0; 62 72 void *gvt = kdev_to_i915(dev)->gvt; 63 73 64 - type = intel_gvt_find_vgpu_type(gvt, kobject_name(kobj)); 74 + type = intel_gvt_find_vgpu_type(gvt, mtype_get_type_group_id(kobj)); 65 75 if (!type) 66 76 num = 0; 67 77 else ··· 82 92 struct intel_vgpu_type *type; 83 93 void *gvt = kdev_to_i915(dev)->gvt; 84 94 85 - type = intel_gvt_find_vgpu_type(gvt, kobject_name(kobj)); 95 + type = intel_gvt_find_vgpu_type(gvt, mtype_get_type_group_id(kobj)); 86 96 if (!type) 87 97 return 0; 88 98
+2 -2
drivers/gpu/drm/i915/gvt/gvt.h
··· 569 569 void (*vgpu_reset)(struct intel_vgpu *); 570 570 void (*vgpu_activate)(struct intel_vgpu *); 571 571 void (*vgpu_deactivate)(struct intel_vgpu *); 572 - struct intel_vgpu_type *(*gvt_find_vgpu_type)(struct intel_gvt *gvt, 573 - const char *name); 572 + struct intel_vgpu_type *(*gvt_find_vgpu_type)( 573 + struct intel_gvt *gvt, unsigned int type_group_id); 574 574 bool (*get_gvt_attrs)(struct attribute_group ***intel_vgpu_type_groups); 575 575 int (*vgpu_query_plane)(struct intel_vgpu *vgpu, void *); 576 576 int (*vgpu_get_dmabuf)(struct intel_vgpu *vgpu, unsigned int);
+2 -3
drivers/gpu/drm/i915/gvt/kvmgt.c
··· 700 700 pdev = mdev_parent_dev(mdev); 701 701 gvt = kdev_to_i915(pdev)->gvt; 702 702 703 - type = intel_gvt_ops->gvt_find_vgpu_type(gvt, kobject_name(kobj)); 703 + type = intel_gvt_ops->gvt_find_vgpu_type(gvt, 704 + mdev_get_type_group_id(mdev)); 704 705 if (!type) { 705 - gvt_vgpu_err("failed to find type %s to create\n", 706 - kobject_name(kobj)); 707 706 ret = -EINVAL; 708 707 goto out; 709 708 }