]>
Commit | Line | Data |
---|---|---|
b7ca0ba0 SL |
1 | From d43c32e37b480556e350deb013e56160ca2f41c1 Mon Sep 17 00:00:00 2001 |
2 | From: Sasha Levin <sashal@kernel.org> | |
3 | Date: Mon, 21 Sep 2020 14:37:25 +0200 | |
4 | Subject: drm/vmwgfx: switch over to the new pin interface v2 | |
5 | MIME-Version: 1.0 | |
6 | Content-Type: text/plain; charset=UTF-8 | |
7 | Content-Transfer-Encoding: 8bit | |
8 | ||
9 | From: Christian König <christian.koenig@amd.com> | |
10 | ||
11 | [ Upstream commit fbe86ca567919b22bbba1220ce55020b1868879f ] | |
12 | ||
13 | Stop using TTM_PL_FLAG_NO_EVICT. | |
14 | ||
15 | v2: fix unconditional pinning | |
16 | ||
17 | Signed-off-by: Christian König <christian.koenig@amd.com> | |
18 | Reviewed-by: Dave Airlie <airlied@redhat.com> | |
19 | Reviewed-by: Huang Rui <ray.huang@amd.com> | |
20 | Link: https://patchwork.freedesktop.org/patch/391601/?series=81973&rev=1 | |
21 | Stable-dep-of: 517621b70600 ("drm/vmwgfx: Fix possible null pointer derefence with invalid contexts") | |
22 | Signed-off-by: Sasha Levin <sashal@kernel.org> | |
23 | --- | |
24 | drivers/gpu/drm/vmwgfx/vmwgfx_blit.c | 4 +- | |
25 | drivers/gpu/drm/vmwgfx/vmwgfx_bo.c | 49 +++++++++++----------- | |
26 | drivers/gpu/drm/vmwgfx/vmwgfx_cotable.c | 4 +- | |
27 | drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | 2 +- | |
28 | drivers/gpu/drm/vmwgfx/vmwgfx_drv.h | 7 +--- | |
29 | drivers/gpu/drm/vmwgfx/vmwgfx_fb.c | 2 +- | |
30 | drivers/gpu/drm/vmwgfx/vmwgfx_resource.c | 4 +- | |
31 | drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c | 4 +- | |
32 | drivers/gpu/drm/vmwgfx/vmwgfx_shader.c | 4 +- | |
33 | drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c | 42 ------------------- | |
34 | drivers/gpu/drm/vmwgfx/vmwgfx_validation.c | 2 +- | |
35 | 11 files changed, 39 insertions(+), 85 deletions(-) | |
36 | ||
37 | diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_blit.c b/drivers/gpu/drm/vmwgfx/vmwgfx_blit.c | |
38 | index e8d66182cd7b5..ea2f2f937eb30 100644 | |
39 | --- a/drivers/gpu/drm/vmwgfx/vmwgfx_blit.c | |
40 | +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_blit.c | |
41 | @@ -459,9 +459,9 @@ int vmw_bo_cpu_blit(struct ttm_buffer_object *dst, | |
42 | int ret = 0; | |
43 | ||
44 | /* Buffer objects need to be either pinned or reserved: */ | |
45 | - if (!(dst->mem.placement & TTM_PL_FLAG_NO_EVICT)) | |
46 | + if (!(dst->pin_count)) | |
47 | dma_resv_assert_held(dst->base.resv); | |
48 | - if (!(src->mem.placement & TTM_PL_FLAG_NO_EVICT)) | |
49 | + if (!(src->pin_count)) | |
50 | dma_resv_assert_held(src->base.resv); | |
51 | ||
52 | if (!ttm_tt_is_populated(dst->ttm)) { | |
53 | diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_bo.c b/drivers/gpu/drm/vmwgfx/vmwgfx_bo.c | |
54 | index c8ca09f0e6274..9a66ba2543263 100644 | |
55 | --- a/drivers/gpu/drm/vmwgfx/vmwgfx_bo.c | |
56 | +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_bo.c | |
57 | @@ -106,7 +106,7 @@ int vmw_bo_pin_in_placement(struct vmw_private *dev_priv, | |
58 | if (unlikely(ret != 0)) | |
59 | goto err; | |
60 | ||
61 | - if (buf->pin_count > 0) | |
62 | + if (buf->base.pin_count > 0) | |
63 | ret = ttm_bo_mem_compat(placement, &bo->mem, | |
64 | &new_flags) == true ? 0 : -EINVAL; | |
65 | else | |
66 | @@ -155,7 +155,7 @@ int vmw_bo_pin_in_vram_or_gmr(struct vmw_private *dev_priv, | |
67 | if (unlikely(ret != 0)) | |
68 | goto err; | |
69 | ||
70 | - if (buf->pin_count > 0) { | |
71 | + if (buf->base.pin_count > 0) { | |
72 | ret = ttm_bo_mem_compat(&vmw_vram_gmr_placement, &bo->mem, | |
73 | &new_flags) == true ? 0 : -EINVAL; | |
74 | goto out_unreserve; | |
75 | @@ -246,12 +246,12 @@ int vmw_bo_pin_in_start_of_vram(struct vmw_private *dev_priv, | |
76 | if (bo->mem.mem_type == TTM_PL_VRAM && | |
77 | bo->mem.start < bo->num_pages && | |
78 | bo->mem.start > 0 && | |
79 | - buf->pin_count == 0) { | |
80 | + buf->base.pin_count == 0) { | |
81 | ctx.interruptible = false; | |
82 | (void) ttm_bo_validate(bo, &vmw_sys_placement, &ctx); | |
83 | } | |
84 | ||
85 | - if (buf->pin_count > 0) | |
86 | + if (buf->base.pin_count > 0) | |
87 | ret = ttm_bo_mem_compat(&placement, &bo->mem, | |
88 | &new_flags) == true ? 0 : -EINVAL; | |
89 | else | |
90 | @@ -343,23 +343,13 @@ void vmw_bo_pin_reserved(struct vmw_buffer_object *vbo, bool pin) | |
91 | ||
92 | dma_resv_assert_held(bo->base.resv); | |
93 | ||
94 | - if (pin) { | |
95 | - if (vbo->pin_count++ > 0) | |
96 | - return; | |
97 | - } else { | |
98 | - WARN_ON(vbo->pin_count <= 0); | |
99 | - if (--vbo->pin_count > 0) | |
100 | - return; | |
101 | - } | |
102 | + if (pin == !!bo->pin_count) | |
103 | + return; | |
104 | ||
105 | pl.fpfn = 0; | |
106 | pl.lpfn = 0; | |
107 | pl.mem_type = bo->mem.mem_type; | |
108 | pl.flags = bo->mem.placement; | |
109 | - if (pin) | |
110 | - pl.flags |= TTM_PL_FLAG_NO_EVICT; | |
111 | - else | |
112 | - pl.flags &= ~TTM_PL_FLAG_NO_EVICT; | |
113 | ||
114 | memset(&placement, 0, sizeof(placement)); | |
115 | placement.num_placement = 1; | |
116 | @@ -368,8 +358,12 @@ void vmw_bo_pin_reserved(struct vmw_buffer_object *vbo, bool pin) | |
117 | ret = ttm_bo_validate(bo, &placement, &ctx); | |
118 | ||
119 | BUG_ON(ret != 0 || bo->mem.mem_type != old_mem_type); | |
120 | -} | |
121 | ||
122 | + if (pin) | |
123 | + ttm_bo_pin(bo); | |
124 | + else | |
125 | + ttm_bo_unpin(bo); | |
126 | +} | |
127 | ||
128 | /** | |
129 | * vmw_bo_map_and_cache - Map a buffer object and cache the map | |
130 | @@ -539,6 +533,7 @@ int vmw_bo_create_kernel(struct vmw_private *dev_priv, unsigned long size, | |
131 | * @size: Buffer object size in bytes. | |
132 | * @placement: Initial placement. | |
133 | * @interruptible: Whether waits should be performed interruptible. | |
134 | + * @pin: If the BO should be created pinned at a fixed location. | |
135 | * @bo_free: The buffer object destructor. | |
136 | * Returns: Zero on success, negative error code on error. | |
137 | * | |
138 | @@ -547,9 +542,10 @@ int vmw_bo_create_kernel(struct vmw_private *dev_priv, unsigned long size, | |
139 | int vmw_bo_init(struct vmw_private *dev_priv, | |
140 | struct vmw_buffer_object *vmw_bo, | |
141 | size_t size, struct ttm_placement *placement, | |
142 | - bool interruptible, | |
143 | + bool interruptible, bool pin, | |
144 | void (*bo_free)(struct ttm_buffer_object *bo)) | |
145 | { | |
146 | + struct ttm_operation_ctx ctx = { interruptible, false }; | |
147 | struct ttm_bo_device *bdev = &dev_priv->bdev; | |
148 | size_t acc_size; | |
149 | int ret; | |
150 | @@ -563,11 +559,16 @@ int vmw_bo_init(struct vmw_private *dev_priv, | |
151 | vmw_bo->base.priority = 3; | |
152 | vmw_bo->res_tree = RB_ROOT; | |
153 | ||
154 | - ret = ttm_bo_init(bdev, &vmw_bo->base, size, | |
155 | - ttm_bo_type_device, placement, | |
156 | - 0, interruptible, acc_size, | |
157 | - NULL, NULL, bo_free); | |
158 | - return ret; | |
159 | + ret = ttm_bo_init_reserved(bdev, &vmw_bo->base, size, | |
160 | + ttm_bo_type_device, placement, | |
161 | + 0, &ctx, acc_size, NULL, NULL, bo_free); | |
162 | + if (unlikely(ret)) | |
163 | + return ret; | |
164 | + | |
165 | + if (pin) | |
166 | + ttm_bo_pin(&vmw_bo->base); | |
167 | + ttm_bo_unreserve(&vmw_bo->base); | |
168 | + return 0; | |
169 | } | |
170 | ||
171 | ||
172 | @@ -656,7 +657,7 @@ int vmw_user_bo_alloc(struct vmw_private *dev_priv, | |
173 | ret = vmw_bo_init(dev_priv, &user_bo->vbo, size, | |
174 | (dev_priv->has_mob) ? | |
175 | &vmw_sys_placement : | |
176 | - &vmw_vram_sys_placement, true, | |
177 | + &vmw_vram_sys_placement, true, false, | |
178 | &vmw_user_bo_destroy); | |
179 | if (unlikely(ret != 0)) | |
180 | return ret; | |
181 | diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_cotable.c b/drivers/gpu/drm/vmwgfx/vmwgfx_cotable.c | |
182 | index 65e8e7a977246..984d8884357d9 100644 | |
183 | --- a/drivers/gpu/drm/vmwgfx/vmwgfx_cotable.c | |
184 | +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_cotable.c | |
185 | @@ -410,8 +410,8 @@ static int vmw_cotable_resize(struct vmw_resource *res, size_t new_size) | |
186 | if (!buf) | |
187 | return -ENOMEM; | |
188 | ||
189 | - ret = vmw_bo_init(dev_priv, buf, new_size, &vmw_mob_ne_placement, | |
190 | - true, vmw_bo_bo_free); | |
191 | + ret = vmw_bo_init(dev_priv, buf, new_size, &vmw_mob_placement, | |
192 | + true, true, vmw_bo_bo_free); | |
193 | if (ret) { | |
194 | DRM_ERROR("Failed initializing new cotable MOB.\n"); | |
195 | return ret; | |
196 | diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | |
197 | index 31e3e5c9f3622..bdb7a5e965601 100644 | |
198 | --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | |
199 | +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | |
200 | @@ -372,7 +372,7 @@ static int vmw_dummy_query_bo_create(struct vmw_private *dev_priv) | |
201 | return -ENOMEM; | |
202 | ||
203 | ret = vmw_bo_init(dev_priv, vbo, PAGE_SIZE, | |
204 | - &vmw_sys_ne_placement, false, | |
205 | + &vmw_sys_placement, false, true, | |
206 | &vmw_bo_bo_free); | |
207 | if (unlikely(ret != 0)) | |
208 | return ret; | |
209 | diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h | |
210 | index e6af950c40370..fa285c20d6dac 100644 | |
211 | --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h | |
212 | +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h | |
213 | @@ -99,7 +99,6 @@ struct vmw_fpriv { | |
214 | * struct vmw_buffer_object - TTM buffer object with vmwgfx additions | |
215 | * @base: The TTM buffer object | |
216 | * @res_tree: RB tree of resources using this buffer object as a backing MOB | |
217 | - * @pin_count: pin depth | |
218 | * @cpu_writers: Number of synccpu write grabs. Protected by reservation when | |
219 | * increased. May be decreased without reservation. | |
220 | * @dx_query_ctx: DX context if this buffer object is used as a DX query MOB | |
221 | @@ -110,7 +109,6 @@ struct vmw_fpriv { | |
222 | struct vmw_buffer_object { | |
223 | struct ttm_buffer_object base; | |
224 | struct rb_root res_tree; | |
225 | - s32 pin_count; | |
226 | atomic_t cpu_writers; | |
227 | /* Not ref-counted. Protected by binding_mutex */ | |
228 | struct vmw_resource *dx_query_ctx; | |
229 | @@ -852,7 +850,7 @@ extern int vmw_bo_create_kernel(struct vmw_private *dev_priv, | |
230 | extern int vmw_bo_init(struct vmw_private *dev_priv, | |
231 | struct vmw_buffer_object *vmw_bo, | |
232 | size_t size, struct ttm_placement *placement, | |
233 | - bool interruptible, | |
234 | + bool interruptible, bool pin, | |
235 | void (*bo_free)(struct ttm_buffer_object *bo)); | |
236 | extern int vmw_user_bo_verify_access(struct ttm_buffer_object *bo, | |
237 | struct ttm_object_file *tfile); | |
238 | @@ -1009,16 +1007,13 @@ extern void vmw_validation_mem_init_ttm(struct vmw_private *dev_priv, | |
239 | ||
240 | extern const size_t vmw_tt_size; | |
241 | extern struct ttm_placement vmw_vram_placement; | |
242 | -extern struct ttm_placement vmw_vram_ne_placement; | |
243 | extern struct ttm_placement vmw_vram_sys_placement; | |
244 | extern struct ttm_placement vmw_vram_gmr_placement; | |
245 | extern struct ttm_placement vmw_vram_gmr_ne_placement; | |
246 | extern struct ttm_placement vmw_sys_placement; | |
247 | -extern struct ttm_placement vmw_sys_ne_placement; | |
248 | extern struct ttm_placement vmw_evictable_placement; | |
249 | extern struct ttm_placement vmw_srf_placement; | |
250 | extern struct ttm_placement vmw_mob_placement; | |
251 | -extern struct ttm_placement vmw_mob_ne_placement; | |
252 | extern struct ttm_placement vmw_nonfixed_placement; | |
253 | extern struct ttm_bo_driver vmw_bo_driver; | |
254 | extern const struct vmw_sg_table * | |
255 | diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c b/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c | |
256 | index 97d9d2557447b..3923acc3ab1e5 100644 | |
257 | --- a/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c | |
258 | +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c | |
259 | @@ -406,7 +406,7 @@ static int vmw_fb_create_bo(struct vmw_private *vmw_priv, | |
260 | ||
261 | ret = vmw_bo_init(vmw_priv, vmw_bo, size, | |
262 | &vmw_sys_placement, | |
263 | - false, | |
264 | + false, false, | |
265 | &vmw_bo_bo_free); | |
266 | if (unlikely(ret != 0)) | |
267 | goto err_unlock; /* init frees the buffer on failure */ | |
268 | diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c b/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c | |
269 | index c0f156078ddae..5e922d9d5f2cc 100644 | |
270 | --- a/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c | |
271 | +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c | |
272 | @@ -370,7 +370,7 @@ static int vmw_resource_buf_alloc(struct vmw_resource *res, | |
273 | ||
274 | ret = vmw_bo_init(res->dev_priv, backup, res->backup_size, | |
275 | res->func->backup_placement, | |
276 | - interruptible, | |
277 | + interruptible, false, | |
278 | &vmw_bo_bo_free); | |
279 | if (unlikely(ret != 0)) | |
280 | goto out_no_bo; | |
281 | @@ -1002,7 +1002,7 @@ int vmw_resource_pin(struct vmw_resource *res, bool interruptible) | |
282 | vbo = res->backup; | |
283 | ||
284 | ttm_bo_reserve(&vbo->base, interruptible, false, NULL); | |
285 | - if (!vbo->pin_count) { | |
286 | + if (!vbo->base.pin_count) { | |
287 | ret = ttm_bo_validate | |
288 | (&vbo->base, | |
289 | res->func->backup_placement, | |
290 | diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c | |
291 | index 2b6590344468d..9c8109efefbd6 100644 | |
292 | --- a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c | |
293 | +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c | |
294 | @@ -451,8 +451,8 @@ vmw_sou_primary_plane_prepare_fb(struct drm_plane *plane, | |
295 | */ | |
296 | vmw_overlay_pause_all(dev_priv); | |
297 | ret = vmw_bo_init(dev_priv, vps->bo, size, | |
298 | - &vmw_vram_ne_placement, | |
299 | - false, &vmw_bo_bo_free); | |
300 | + &vmw_vram_placement, | |
301 | + false, true, &vmw_bo_bo_free); | |
302 | vmw_overlay_resume_all(dev_priv); | |
303 | if (ret) { | |
304 | vps->bo = NULL; /* vmw_bo_init frees on error */ | |
305 | diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_shader.c b/drivers/gpu/drm/vmwgfx/vmwgfx_shader.c | |
306 | index e139fdfd16356..f328aa5839a22 100644 | |
307 | --- a/drivers/gpu/drm/vmwgfx/vmwgfx_shader.c | |
308 | +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_shader.c | |
309 | @@ -978,8 +978,8 @@ int vmw_compat_shader_add(struct vmw_private *dev_priv, | |
310 | if (unlikely(!buf)) | |
311 | return -ENOMEM; | |
312 | ||
313 | - ret = vmw_bo_init(dev_priv, buf, size, &vmw_sys_ne_placement, | |
314 | - true, vmw_bo_bo_free); | |
315 | + ret = vmw_bo_init(dev_priv, buf, size, &vmw_sys_placement, | |
316 | + true, true, vmw_bo_bo_free); | |
317 | if (unlikely(ret != 0)) | |
318 | goto out; | |
319 | ||
320 | diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c | |
321 | index 8abeef691ad29..89b3356ec27f0 100644 | |
322 | --- a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c | |
323 | +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c | |
324 | @@ -37,13 +37,6 @@ static const struct ttm_place vram_placement_flags = { | |
325 | .flags = TTM_PL_FLAG_CACHED | |
326 | }; | |
327 | ||
328 | -static const struct ttm_place vram_ne_placement_flags = { | |
329 | - .fpfn = 0, | |
330 | - .lpfn = 0, | |
331 | - .mem_type = TTM_PL_VRAM, | |
332 | - .flags = TTM_PL_FLAG_CACHED | TTM_PL_FLAG_NO_EVICT | |
333 | -}; | |
334 | - | |
335 | static const struct ttm_place sys_placement_flags = { | |
336 | .fpfn = 0, | |
337 | .lpfn = 0, | |
338 | @@ -51,13 +44,6 @@ static const struct ttm_place sys_placement_flags = { | |
339 | .flags = TTM_PL_FLAG_CACHED | |
340 | }; | |
341 | ||
342 | -static const struct ttm_place sys_ne_placement_flags = { | |
343 | - .fpfn = 0, | |
344 | - .lpfn = 0, | |
345 | - .mem_type = TTM_PL_SYSTEM, | |
346 | - .flags = TTM_PL_FLAG_CACHED | TTM_PL_FLAG_NO_EVICT | |
347 | -}; | |
348 | - | |
349 | static const struct ttm_place gmr_placement_flags = { | |
350 | .fpfn = 0, | |
351 | .lpfn = 0, | |
352 | @@ -79,13 +65,6 @@ static const struct ttm_place mob_placement_flags = { | |
353 | .flags = TTM_PL_FLAG_CACHED | |
354 | }; | |
355 | ||
356 | -static const struct ttm_place mob_ne_placement_flags = { | |
357 | - .fpfn = 0, | |
358 | - .lpfn = 0, | |
359 | - .mem_type = VMW_PL_MOB, | |
360 | - .flags = TTM_PL_FLAG_CACHED | TTM_PL_FLAG_NO_EVICT | |
361 | -}; | |
362 | - | |
363 | struct ttm_placement vmw_vram_placement = { | |
364 | .num_placement = 1, | |
365 | .placement = &vram_placement_flags, | |
366 | @@ -158,13 +137,6 @@ struct ttm_placement vmw_vram_sys_placement = { | |
367 | .busy_placement = &sys_placement_flags | |
368 | }; | |
369 | ||
370 | -struct ttm_placement vmw_vram_ne_placement = { | |
371 | - .num_placement = 1, | |
372 | - .placement = &vram_ne_placement_flags, | |
373 | - .num_busy_placement = 1, | |
374 | - .busy_placement = &vram_ne_placement_flags | |
375 | -}; | |
376 | - | |
377 | struct ttm_placement vmw_sys_placement = { | |
378 | .num_placement = 1, | |
379 | .placement = &sys_placement_flags, | |
380 | @@ -172,13 +144,6 @@ struct ttm_placement vmw_sys_placement = { | |
381 | .busy_placement = &sys_placement_flags | |
382 | }; | |
383 | ||
384 | -struct ttm_placement vmw_sys_ne_placement = { | |
385 | - .num_placement = 1, | |
386 | - .placement = &sys_ne_placement_flags, | |
387 | - .num_busy_placement = 1, | |
388 | - .busy_placement = &sys_ne_placement_flags | |
389 | -}; | |
390 | - | |
391 | static const struct ttm_place evictable_placement_flags[] = { | |
392 | { | |
393 | .fpfn = 0, | |
394 | @@ -243,13 +208,6 @@ struct ttm_placement vmw_mob_placement = { | |
395 | .busy_placement = &mob_placement_flags | |
396 | }; | |
397 | ||
398 | -struct ttm_placement vmw_mob_ne_placement = { | |
399 | - .num_placement = 1, | |
400 | - .num_busy_placement = 1, | |
401 | - .placement = &mob_ne_placement_flags, | |
402 | - .busy_placement = &mob_ne_placement_flags | |
403 | -}; | |
404 | - | |
405 | struct ttm_placement vmw_nonfixed_placement = { | |
406 | .num_placement = 3, | |
407 | .placement = nonfixed_placement_flags, | |
408 | diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_validation.c b/drivers/gpu/drm/vmwgfx/vmwgfx_validation.c | |
409 | index e69bc373ae2e5..f2e2bf6d1421f 100644 | |
410 | --- a/drivers/gpu/drm/vmwgfx/vmwgfx_validation.c | |
411 | +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_validation.c | |
412 | @@ -540,7 +540,7 @@ int vmw_validation_bo_validate_single(struct ttm_buffer_object *bo, | |
413 | if (atomic_read(&vbo->cpu_writers)) | |
414 | return -EBUSY; | |
415 | ||
416 | - if (vbo->pin_count > 0) | |
417 | + if (vbo->base.pin_count > 0) | |
418 | return 0; | |
419 | ||
420 | if (validate_as_mob) | |
421 | -- | |
422 | 2.43.0 | |
423 |