@@ -117,17 +117,10 @@ static ssize_t available_instances_show(struct mdev_type *mtype,
117
117
struct mdev_type_attribute * attr ,
118
118
char * buf )
119
119
{
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 );
123
122
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 );
131
124
}
132
125
133
126
static ssize_t device_api_show (struct mdev_type * mtype ,
@@ -139,12 +132,8 @@ static ssize_t device_api_show(struct mdev_type *mtype,
139
132
static ssize_t description_show (struct mdev_type * mtype ,
140
133
struct mdev_type_attribute * attr , char * buf )
141
134
{
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 );
148
137
149
138
return sprintf (buf , "low_gm_size: %dMB\nhigh_gm_size: %dMB\n"
150
139
"fence: %d\nresolution: %s\n"
@@ -158,74 +147,22 @@ static ssize_t description_show(struct mdev_type *mtype,
158
147
static ssize_t name_show (struct mdev_type * mtype ,
159
148
struct mdev_type_attribute * attr , char * buf )
160
149
{
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 );
169
151
}
170
152
171
153
static MDEV_TYPE_ATTR_RO (available_instances );
172
154
static MDEV_TYPE_ATTR_RO (device_api );
173
155
static MDEV_TYPE_ATTR_RO (description );
174
156
static MDEV_TYPE_ATTR_RO (name );
175
157
176
- static struct attribute * gvt_type_attrs [] = {
158
+ static const struct attribute * gvt_type_attrs [] = {
177
159
& mdev_type_attr_available_instances .attr ,
178
160
& mdev_type_attr_device_api .attr ,
179
161
& mdev_type_attr_description .attr ,
180
162
& mdev_type_attr_name .attr ,
181
163
NULL ,
182
164
};
183
165
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
-
229
166
static void gvt_unpin_guest_page (struct intel_vgpu * vgpu , unsigned long gfn ,
230
167
unsigned long size )
231
168
{
@@ -1547,16 +1484,11 @@ static const struct attribute_group *intel_vgpu_groups[] = {
1547
1484
static int intel_vgpu_init_dev (struct vfio_device * vfio_dev )
1548
1485
{
1549
1486
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 ;
1553
1487
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 );
1554
1490
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 ;
1560
1492
return intel_gvt_create_vgpu (vgpu , type -> conf );
1561
1493
}
1562
1494
@@ -1625,7 +1557,7 @@ static struct mdev_driver intel_vgpu_mdev_driver = {
1625
1557
},
1626
1558
.probe = intel_vgpu_probe ,
1627
1559
.remove = intel_vgpu_remove ,
1628
- .supported_type_groups = gvt_vgpu_type_groups ,
1560
+ .types_attrs = gvt_type_attrs ,
1629
1561
};
1630
1562
1631
1563
int 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)
1924
1856
return ;
1925
1857
1926
1858
mdev_unregister_parent (& gvt -> parent );
1927
- intel_gvt_cleanup_vgpu_type_groups (gvt );
1928
1859
intel_gvt_destroy_idle_vgpu (gvt -> idle_vgpu );
1929
1860
intel_gvt_clean_vgpu_types (gvt );
1930
1861
@@ -2024,20 +1955,15 @@ static int intel_gvt_init_device(struct drm_i915_private *i915)
2024
1955
2025
1956
intel_gvt_debugfs_init (gvt );
2026
1957
2027
- ret = intel_gvt_init_vgpu_type_groups (gvt );
2028
- if (ret )
2029
- goto out_destroy_idle_vgpu ;
2030
-
2031
1958
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 );
2033
1961
if (ret )
2034
- goto out_cleanup_vgpu_type_groups ;
1962
+ goto out_destroy_idle_vgpu ;
2035
1963
2036
1964
gvt_dbg_core ("gvt device initialization is done\n" );
2037
1965
return 0 ;
2038
1966
2039
- out_cleanup_vgpu_type_groups :
2040
- intel_gvt_cleanup_vgpu_type_groups (gvt );
2041
1967
out_destroy_idle_vgpu :
2042
1968
intel_gvt_destroy_idle_vgpu (gvt -> idle_vgpu );
2043
1969
intel_gvt_debugfs_clean (gvt );
0 commit comments