@@ -24,14 +24,11 @@ static const struct drm_gem_object_funcs ivpu_gem_funcs;
24
24
25
25
static inline void ivpu_dbg_bo (struct ivpu_device * vdev , struct ivpu_bo * bo , const char * action )
26
26
{
27
- if (bo -> ctx )
28
- ivpu_dbg (vdev , BO , "%6s: size %zu has_pages %d dma_mapped %d handle %u ctx %d vpu_addr 0x%llx mmu_mapped %d\n" ,
29
- action , ivpu_bo_size (bo ), (bool )bo -> base .pages , (bool )bo -> base .sgt ,
30
- bo -> handle , bo -> ctx -> id , bo -> vpu_addr , bo -> mmu_mapped );
31
- else
32
- ivpu_dbg (vdev , BO , "%6s: size %zu has_pages %d dma_mapped %d handle %u (not added to context)\n" ,
33
- action , ivpu_bo_size (bo ), (bool )bo -> base .pages , (bool )bo -> base .sgt ,
34
- bo -> handle );
27
+ ivpu_dbg (vdev , BO ,
28
+ "%6s: bo %8p vpu_addr %9llx size %8zu ctx %d has_pages %d dma_mapped %d mmu_mapped %d wc %d imported %d\n" ,
29
+ action , bo , bo -> vpu_addr , ivpu_bo_size (bo ), bo -> ctx ? bo -> ctx -> id : 0 ,
30
+ (bool )bo -> base .pages , (bool )bo -> base .sgt , bo -> mmu_mapped , bo -> base .map_wc ,
31
+ (bool )bo -> base .base .import_attach );
35
32
}
36
33
37
34
/*
@@ -49,12 +46,7 @@ int __must_check ivpu_bo_pin(struct ivpu_bo *bo)
49
46
mutex_lock (& bo -> lock );
50
47
51
48
ivpu_dbg_bo (vdev , bo , "pin" );
52
-
53
- if (!bo -> ctx ) {
54
- ivpu_err (vdev , "vpu_addr not allocated for BO %d\n" , bo -> handle );
55
- ret = - EINVAL ;
56
- goto unlock ;
57
- }
49
+ drm_WARN_ON (& vdev -> drm , !bo -> ctx );
58
50
59
51
if (!bo -> mmu_mapped ) {
60
52
struct sg_table * sgt = drm_gem_shmem_get_pages_sgt (& bo -> base );
@@ -108,9 +100,7 @@ static void ivpu_bo_unbind_locked(struct ivpu_bo *bo)
108
100
{
109
101
struct ivpu_device * vdev = ivpu_bo_to_vdev (bo );
110
102
111
- lockdep_assert_held (& bo -> lock );
112
-
113
- ivpu_dbg_bo (vdev , bo , "unbind" );
103
+ lockdep_assert (lockdep_is_held (& bo -> lock ) || !kref_read (& bo -> base .base .refcount ));
114
104
115
105
if (bo -> mmu_mapped ) {
116
106
drm_WARN_ON (& vdev -> drm , !bo -> ctx );
@@ -122,7 +112,6 @@ static void ivpu_bo_unbind_locked(struct ivpu_bo *bo)
122
112
123
113
if (bo -> ctx ) {
124
114
ivpu_mmu_context_remove_node (bo -> ctx , & bo -> mm_node );
125
- bo -> vpu_addr = 0 ;
126
115
bo -> ctx = NULL ;
127
116
}
128
117
@@ -156,8 +145,10 @@ void ivpu_bo_remove_all_bos_from_context(struct ivpu_device *vdev, struct ivpu_m
156
145
mutex_lock (& vdev -> bo_list_lock );
157
146
list_for_each_entry (bo , & vdev -> bo_list , bo_list_node ) {
158
147
mutex_lock (& bo -> lock );
159
- if (bo -> ctx == ctx )
148
+ if (bo -> ctx == ctx ) {
149
+ ivpu_dbg_bo (vdev , bo , "unbind" );
160
150
ivpu_bo_unbind_locked (bo );
151
+ }
161
152
mutex_unlock (& bo -> lock );
162
153
}
163
154
mutex_unlock (& vdev -> bo_list_lock );
@@ -209,9 +200,6 @@ ivpu_bo_create(struct ivpu_device *vdev, u64 size, u32 flags)
209
200
list_add_tail (& bo -> bo_list_node , & vdev -> bo_list );
210
201
mutex_unlock (& vdev -> bo_list_lock );
211
202
212
- ivpu_dbg (vdev , BO , "create: vpu_addr 0x%llx size %zu flags 0x%x\n" ,
213
- bo -> vpu_addr , bo -> base .base .size , flags );
214
-
215
203
return bo ;
216
204
}
217
205
@@ -243,14 +231,14 @@ static void ivpu_bo_free(struct drm_gem_object *obj)
243
231
struct ivpu_device * vdev = to_ivpu_device (obj -> dev );
244
232
struct ivpu_bo * bo = to_ivpu_bo (obj );
245
233
234
+ ivpu_dbg_bo (vdev , bo , "free" );
235
+
246
236
mutex_lock (& vdev -> bo_list_lock );
247
237
list_del (& bo -> bo_list_node );
248
238
mutex_unlock (& vdev -> bo_list_lock );
249
239
250
240
drm_WARN_ON (& vdev -> drm , !dma_resv_test_signaled (obj -> resv , DMA_RESV_USAGE_READ ));
251
241
252
- ivpu_dbg_bo (vdev , bo , "free" );
253
-
254
242
ivpu_bo_unbind (bo );
255
243
mutex_destroy (& bo -> lock );
256
244
@@ -293,11 +281,9 @@ int ivpu_bo_create_ioctl(struct drm_device *dev, void *data, struct drm_file *fi
293
281
return PTR_ERR (bo );
294
282
}
295
283
296
- ret = drm_gem_handle_create (file , & bo -> base .base , & bo -> handle );
297
- if (!ret ) {
284
+ ret = drm_gem_handle_create (file , & bo -> base .base , & args -> handle );
285
+ if (!ret )
298
286
args -> vpu_addr = bo -> vpu_addr ;
299
- args -> handle = bo -> handle ;
300
- }
301
287
302
288
drm_gem_object_put (& bo -> base .base );
303
289
@@ -415,26 +401,21 @@ int ivpu_bo_wait_ioctl(struct drm_device *dev, void *data, struct drm_file *file
415
401
416
402
static void ivpu_bo_print_info (struct ivpu_bo * bo , struct drm_printer * p )
417
403
{
418
- unsigned long dma_refcount = 0 ;
419
-
420
404
mutex_lock (& bo -> lock );
421
405
422
- if (bo -> base .base .dma_buf && bo -> base .base .dma_buf -> file )
423
- dma_refcount = atomic_long_read (& bo -> base .base .dma_buf -> file -> f_count );
424
-
425
- drm_printf (p , "%-3u %-6d 0x%-12llx %-10lu 0x%-8x %-4u %-8lu" ,
426
- bo -> ctx -> id , bo -> handle , bo -> vpu_addr , bo -> base .base .size ,
427
- bo -> flags , kref_read (& bo -> base .base .refcount ), dma_refcount );
428
-
429
- if (bo -> base .base .import_attach )
430
- drm_printf (p , " imported" );
406
+ drm_printf (p , "%-9p %-3u 0x%-12llx %-10lu 0x%-8x %-4u" ,
407
+ bo , bo -> ctx -> id , bo -> vpu_addr , bo -> base .base .size ,
408
+ bo -> flags , kref_read (& bo -> base .base .refcount ));
431
409
432
410
if (bo -> base .pages )
433
411
drm_printf (p , " has_pages" );
434
412
435
413
if (bo -> mmu_mapped )
436
414
drm_printf (p , " mmu_mapped" );
437
415
416
+ if (bo -> base .base .import_attach )
417
+ drm_printf (p , " imported" );
418
+
438
419
drm_printf (p , "\n" );
439
420
440
421
mutex_unlock (& bo -> lock );
@@ -445,8 +426,8 @@ void ivpu_bo_list(struct drm_device *dev, struct drm_printer *p)
445
426
struct ivpu_device * vdev = to_ivpu_device (dev );
446
427
struct ivpu_bo * bo ;
447
428
448
- drm_printf (p , "%-3s %-6s %-14s %-10s %-10s %-4s %-8s %s\n" ,
449
- "ctx " , "handle " , "vpu_addr" , "size" , "flags" , "refs" , "dma_refs " , "attribs" );
429
+ drm_printf (p , "%-9s %-3s %-14s %-10s %-10s %-4s %s\n" ,
430
+ "bo " , "ctx " , "vpu_addr" , "size" , "flags" , "refs" , "attribs" );
450
431
451
432
mutex_lock (& vdev -> bo_list_lock );
452
433
list_for_each_entry (bo , & vdev -> bo_list , bo_list_node )
0 commit comments