@@ -117,17 +117,10 @@ static ssize_t available_instances_show(struct mdev_type *mtype,
117117 struct mdev_type_attribute * attr ,
118118 char * buf )
119119{
120- struct intel_vgpu_type * type ;
121- unsigned int num = 0 ;
122- struct intel_gvt * gvt = kdev_to_i915 (mtype_get_parent_dev (mtype ))-> gvt ;
120+ struct intel_vgpu_type * type =
121+ container_of (mtype , struct intel_vgpu_type , type );
123122
124- type = & gvt -> types [mtype_get_type_group_id (mtype )];
125- if (!type )
126- num = 0 ;
127- else
128- num = type -> avail_instance ;
129-
130- return sprintf (buf , "%u\n" , num );
123+ return sprintf (buf , "%u\n" , type -> avail_instance );
131124}
132125
133126static ssize_t device_api_show (struct mdev_type * mtype ,
@@ -139,12 +132,8 @@ static ssize_t device_api_show(struct mdev_type *mtype,
139132static ssize_t description_show (struct mdev_type * mtype ,
140133 struct mdev_type_attribute * attr , char * buf )
141134{
142- struct intel_vgpu_type * type ;
143- struct intel_gvt * gvt = kdev_to_i915 (mtype_get_parent_dev (mtype ))-> gvt ;
144-
145- type = & gvt -> types [mtype_get_type_group_id (mtype )];
146- if (!type )
147- return 0 ;
135+ struct intel_vgpu_type * type =
136+ container_of (mtype , struct intel_vgpu_type , type );
148137
149138 return sprintf (buf , "low_gm_size: %dMB\nhigh_gm_size: %dMB\n"
150139 "fence: %d\nresolution: %s\n"
@@ -158,74 +147,22 @@ static ssize_t description_show(struct mdev_type *mtype,
158147static ssize_t name_show (struct mdev_type * mtype ,
159148 struct mdev_type_attribute * attr , char * buf )
160149{
161- struct intel_vgpu_type * type ;
162- struct intel_gvt * gvt = kdev_to_i915 (mtype_get_parent_dev (mtype ))-> gvt ;
163-
164- type = & gvt -> types [mtype_get_type_group_id (mtype )];
165- if (!type )
166- return 0 ;
167-
168- return sprintf (buf , "%s\n" , type -> name );
150+ return sprintf (buf , "%s\n" , mtype -> sysfs_name );
169151}
170152
171153static MDEV_TYPE_ATTR_RO (available_instances );
172154static MDEV_TYPE_ATTR_RO (device_api );
173155static MDEV_TYPE_ATTR_RO (description );
174156static MDEV_TYPE_ATTR_RO (name );
175157
176- static struct attribute * gvt_type_attrs [] = {
158+ static const struct attribute * gvt_type_attrs [] = {
177159 & mdev_type_attr_available_instances .attr ,
178160 & mdev_type_attr_device_api .attr ,
179161 & mdev_type_attr_description .attr ,
180162 & mdev_type_attr_name .attr ,
181163 NULL ,
182164};
183165
184- static struct attribute_group * gvt_vgpu_type_groups [] = {
185- [0 ... NR_MAX_INTEL_VGPU_TYPES - 1 ] = NULL ,
186- };
187-
188- static int intel_gvt_init_vgpu_type_groups (struct intel_gvt * gvt )
189- {
190- int i , j ;
191- struct intel_vgpu_type * type ;
192- struct attribute_group * group ;
193-
194- for (i = 0 ; i < gvt -> num_types ; i ++ ) {
195- type = & gvt -> types [i ];
196-
197- group = kzalloc (sizeof (struct attribute_group ), GFP_KERNEL );
198- if (!group )
199- goto unwind ;
200-
201- group -> name = type -> name ;
202- group -> attrs = gvt_type_attrs ;
203- gvt_vgpu_type_groups [i ] = group ;
204- }
205-
206- return 0 ;
207-
208- unwind :
209- for (j = 0 ; j < i ; j ++ ) {
210- group = gvt_vgpu_type_groups [j ];
211- kfree (group );
212- }
213-
214- return - ENOMEM ;
215- }
216-
217- static void intel_gvt_cleanup_vgpu_type_groups (struct intel_gvt * gvt )
218- {
219- int i ;
220- struct attribute_group * group ;
221-
222- for (i = 0 ; i < gvt -> num_types ; i ++ ) {
223- group = gvt_vgpu_type_groups [i ];
224- gvt_vgpu_type_groups [i ] = NULL ;
225- kfree (group );
226- }
227- }
228-
229166static void gvt_unpin_guest_page (struct intel_vgpu * vgpu , unsigned long gfn ,
230167 unsigned long size )
231168{
@@ -1547,16 +1484,11 @@ static const struct attribute_group *intel_vgpu_groups[] = {
15471484static int intel_vgpu_init_dev (struct vfio_device * vfio_dev )
15481485{
15491486 struct mdev_device * mdev = to_mdev_device (vfio_dev -> dev );
1550- struct device * pdev = mdev_parent_dev (mdev );
1551- struct intel_gvt * gvt = kdev_to_i915 (pdev )-> gvt ;
1552- struct intel_vgpu_type * type ;
15531487 struct intel_vgpu * vgpu = vfio_dev_to_vgpu (vfio_dev );
1488+ struct intel_vgpu_type * type =
1489+ container_of (mdev -> type , struct intel_vgpu_type , type );
15541490
1555- type = & gvt -> types [mdev_get_type_group_id (mdev )];
1556- if (!type )
1557- return - EINVAL ;
1558-
1559- vgpu -> gvt = gvt ;
1491+ vgpu -> gvt = kdev_to_i915 (mdev_parent_dev (mdev ))-> gvt ;
15601492 return intel_gvt_create_vgpu (vgpu , type -> conf );
15611493}
15621494
@@ -1625,7 +1557,7 @@ static struct mdev_driver intel_vgpu_mdev_driver = {
16251557 },
16261558 .probe = intel_vgpu_probe ,
16271559 .remove = intel_vgpu_remove ,
1628- .supported_type_groups = gvt_vgpu_type_groups ,
1560+ .types_attrs = gvt_type_attrs ,
16291561};
16301562
16311563int intel_gvt_page_track_add (struct intel_vgpu * info , u64 gfn )
@@ -1924,7 +1856,6 @@ static void intel_gvt_clean_device(struct drm_i915_private *i915)
19241856 return ;
19251857
19261858 mdev_unregister_parent (& gvt -> parent );
1927- intel_gvt_cleanup_vgpu_type_groups (gvt );
19281859 intel_gvt_destroy_idle_vgpu (gvt -> idle_vgpu );
19291860 intel_gvt_clean_vgpu_types (gvt );
19301861
@@ -2024,20 +1955,15 @@ static int intel_gvt_init_device(struct drm_i915_private *i915)
20241955
20251956 intel_gvt_debugfs_init (gvt );
20261957
2027- ret = intel_gvt_init_vgpu_type_groups (gvt );
2028- if (ret )
2029- goto out_destroy_idle_vgpu ;
2030-
20311958 ret = mdev_register_parent (& gvt -> parent , i915 -> drm .dev ,
2032- & intel_vgpu_mdev_driver );
1959+ & intel_vgpu_mdev_driver ,
1960+ gvt -> mdev_types , gvt -> num_types );
20331961 if (ret )
2034- goto out_cleanup_vgpu_type_groups ;
1962+ goto out_destroy_idle_vgpu ;
20351963
20361964 gvt_dbg_core ("gvt device initialization is done\n" );
20371965 return 0 ;
20381966
2039- out_cleanup_vgpu_type_groups :
2040- intel_gvt_cleanup_vgpu_type_groups (gvt );
20411967out_destroy_idle_vgpu :
20421968 intel_gvt_destroy_idle_vgpu (gvt -> idle_vgpu );
20431969 intel_gvt_debugfs_clean (gvt );
0 commit comments