diff options
Diffstat (limited to 'drivers/gpu/buddy.c')
| -rw-r--r-- | drivers/gpu/buddy.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/gpu/buddy.c b/drivers/gpu/buddy.c index 52686672e99f..eb1457376307 100644 --- a/drivers/gpu/buddy.c +++ b/drivers/gpu/buddy.c @@ -437,6 +437,9 @@ int gpu_buddy_init(struct gpu_buddy *mm, u64 size, u64 chunk_size) root_count++; } while (size); +#ifdef CONFIG_LOCKDEP + mm->lock_dep_map = NULL; +#endif return 0; out_free_roots: @@ -538,6 +541,7 @@ void gpu_buddy_reset_clear(struct gpu_buddy *mm, bool is_clear) unsigned int order; int i; + gpu_buddy_driver_lock_held(mm); size = mm->size; for (i = 0; i < mm->n_roots; ++i) { order = ilog2(size) - ilog2(mm->chunk_size); @@ -580,6 +584,7 @@ EXPORT_SYMBOL(gpu_buddy_reset_clear); void gpu_buddy_free_block(struct gpu_buddy *mm, struct gpu_buddy_block *block) { + gpu_buddy_driver_lock_held(mm); BUG_ON(!gpu_buddy_block_is_allocated(block)); mm->avail += gpu_buddy_block_size(mm, block); if (gpu_buddy_block_is_clear(block)) @@ -633,6 +638,7 @@ void gpu_buddy_free_list(struct gpu_buddy *mm, { bool mark_clear = flags & GPU_BUDDY_CLEARED; + gpu_buddy_driver_lock_held(mm); __gpu_buddy_free_list(mm, objects, mark_clear, !mark_clear); } EXPORT_SYMBOL(gpu_buddy_free_list); @@ -1172,6 +1178,8 @@ int gpu_buddy_block_trim(struct gpu_buddy *mm, u64 new_start; int err; + gpu_buddy_driver_lock_held(mm); + if (!list_is_singular(blocks)) return -EINVAL; @@ -1287,6 +1295,8 @@ int gpu_buddy_alloc_blocks(struct gpu_buddy *mm, unsigned long pages; int err; + gpu_buddy_driver_lock_held(mm); + if (size < mm->chunk_size) return -EINVAL; @@ -1475,6 +1485,7 @@ void gpu_buddy_print(struct gpu_buddy *mm) { int order; + gpu_buddy_driver_lock_held(mm); pr_info("chunk_size: %lluKiB, total: %lluMiB, free: %lluMiB, clear_free: %lluMiB\n", mm->chunk_size >> 10, mm->size >> 20, mm->avail >> 20, mm->clear_avail >> 20); |
