@@ -28,7 +28,7 @@ static inline void ivpu_dbg_bo(struct ivpu_device *vdev, struct ivpu_bo *bo, con
28
28
{
29
29
ivpu_dbg (vdev , BO ,
30
30
"%6s: bo %8p vpu_addr %9llx size %8zu ctx %d has_pages %d dma_mapped %d mmu_mapped %d wc %d imported %d\n" ,
31
- action , bo , bo -> vpu_addr , ivpu_bo_size (bo ), bo -> ctx ? bo -> ctx -> id : 0 ,
31
+ action , bo , bo -> vpu_addr , ivpu_bo_size (bo ), bo -> ctx_id ,
32
32
(bool )bo -> base .pages , (bool )bo -> base .sgt , bo -> mmu_mapped , bo -> base .map_wc ,
33
33
(bool )bo -> base .base .import_attach );
34
34
}
@@ -94,8 +94,6 @@ ivpu_bo_alloc_vpu_addr(struct ivpu_bo *bo, struct ivpu_mmu_context *ctx,
94
94
ivpu_err (vdev , "Failed to add BO to context %u: %d\n" , ctx -> id , ret );
95
95
}
96
96
97
- ivpu_dbg_bo (vdev , bo , "alloc" );
98
-
99
97
mutex_unlock (& bo -> lock );
100
98
101
99
drm_dev_exit (idx );
@@ -215,7 +213,7 @@ struct drm_gem_object *ivpu_gem_prime_import(struct drm_device *dev,
215
213
return ERR_PTR (ret );
216
214
}
217
215
218
- static struct ivpu_bo * ivpu_bo_alloc (struct ivpu_device * vdev , u64 size , u32 flags )
216
+ static struct ivpu_bo * ivpu_bo_alloc (struct ivpu_device * vdev , u64 size , u32 flags , u32 ctx_id )
219
217
{
220
218
struct drm_gem_shmem_object * shmem ;
221
219
struct ivpu_bo * bo ;
@@ -233,13 +231,16 @@ static struct ivpu_bo *ivpu_bo_alloc(struct ivpu_device *vdev, u64 size, u32 fla
233
231
return ERR_CAST (shmem );
234
232
235
233
bo = to_ivpu_bo (& shmem -> base );
234
+ bo -> ctx_id = ctx_id ;
236
235
bo -> base .map_wc = flags & DRM_IVPU_BO_WC ;
237
236
bo -> flags = flags ;
238
237
239
238
mutex_lock (& vdev -> bo_list_lock );
240
239
list_add_tail (& bo -> bo_list_node , & vdev -> bo_list );
241
240
mutex_unlock (& vdev -> bo_list_lock );
242
241
242
+ ivpu_dbg_bo (vdev , bo , "alloc" );
243
+
243
244
return bo ;
244
245
}
245
246
@@ -278,8 +279,13 @@ static void ivpu_gem_bo_free(struct drm_gem_object *obj)
278
279
mutex_unlock (& vdev -> bo_list_lock );
279
280
280
281
drm_WARN_ON (& vdev -> drm , !dma_resv_test_signaled (obj -> resv , DMA_RESV_USAGE_READ ));
282
+ drm_WARN_ON (& vdev -> drm , ivpu_bo_size (bo ) == 0 );
283
+ drm_WARN_ON (& vdev -> drm , bo -> base .vaddr );
281
284
282
285
ivpu_bo_unbind_locked (bo );
286
+ drm_WARN_ON (& vdev -> drm , bo -> mmu_mapped );
287
+ drm_WARN_ON (& vdev -> drm , bo -> ctx );
288
+
283
289
mutex_destroy (& bo -> lock );
284
290
285
291
drm_WARN_ON (obj -> dev , bo -> base .pages_use_count > 1 );
@@ -314,15 +320,18 @@ int ivpu_bo_create_ioctl(struct drm_device *dev, void *data, struct drm_file *fi
314
320
if (size == 0 )
315
321
return - EINVAL ;
316
322
317
- bo = ivpu_bo_alloc (vdev , size , args -> flags );
323
+ bo = ivpu_bo_alloc (vdev , size , args -> flags , file_priv -> ctx . id );
318
324
if (IS_ERR (bo )) {
319
325
ivpu_err (vdev , "Failed to allocate BO: %pe (ctx %u size %llu flags 0x%x)" ,
320
326
bo , file_priv -> ctx .id , args -> size , args -> flags );
321
327
return PTR_ERR (bo );
322
328
}
323
329
324
330
ret = drm_gem_handle_create (file , & bo -> base .base , & args -> handle );
325
- if (!ret )
331
+ if (ret )
332
+ ivpu_err (vdev , "Failed to create handle for BO: %pe (ctx %u size %llu flags 0x%x)" ,
333
+ bo , file_priv -> ctx .id , args -> size , args -> flags );
334
+ else
326
335
args -> vpu_addr = bo -> vpu_addr ;
327
336
328
337
drm_gem_object_put (& bo -> base .base );
@@ -345,7 +354,7 @@ ivpu_bo_create(struct ivpu_device *vdev, struct ivpu_mmu_context *ctx,
345
354
drm_WARN_ON (& vdev -> drm , !PAGE_ALIGNED (range -> end ));
346
355
drm_WARN_ON (& vdev -> drm , !PAGE_ALIGNED (size ));
347
356
348
- bo = ivpu_bo_alloc (vdev , size , flags );
357
+ bo = ivpu_bo_alloc (vdev , size , flags , IVPU_GLOBAL_CONTEXT_MMU_SSID );
349
358
if (IS_ERR (bo )) {
350
359
ivpu_err (vdev , "Failed to allocate BO: %pe (vpu_addr 0x%llx size %llu flags 0x%x)" ,
351
360
bo , range -> start , size , flags );
@@ -452,7 +461,7 @@ static void ivpu_bo_print_info(struct ivpu_bo *bo, struct drm_printer *p)
452
461
mutex_lock (& bo -> lock );
453
462
454
463
drm_printf (p , "%-9p %-3u 0x%-12llx %-10lu 0x%-8x %-4u" ,
455
- bo , bo -> ctx ? bo -> ctx -> id : 0 , bo -> vpu_addr , bo -> base .base .size ,
464
+ bo , bo -> ctx_id , bo -> vpu_addr , bo -> base .base .size ,
456
465
bo -> flags , kref_read (& bo -> base .base .refcount ));
457
466
458
467
if (bo -> base .pages )
0 commit comments