| 1 | |
| 2 | |
| 3 | * Copyright © 2021 Intel Corporation
|
| 4 |
|
| 5 |
|
| 6 | #include <kunit/test-bug.h>
|
| 7 |
|
| 8 | #include <linux/export.h>
|
| 9 | #include <linux/kmemleak.h>
|
| 10 | #include <linux/module.h>
|
| 11 | #include <linux/sizes.h>
|
| 12 |
|
| 13 | #include <linux/gpu_buddy.h>
|
| 14 | #include <drm/drm_buddy.h>
|
| 15 | #include <drm/drm_print.h>
|
| 16 |
|
| 17 | |
| 18 | * drm_buddy_block_print - print block information
|
| 19 | *
|
| 20 | * @mm: DRM buddy manager
|
| 21 | * @block: DRM buddy block
|
| 22 | * @p: DRM printer to use
|
| 23 |
|
| 24 | void drm_buddy_block_print(struct gpu_buddy *mm,
|
| 25 | struct gpu_buddy_block *block,
|
| 26 | struct drm_printer *p)
|
| 27 | {
|
| 28 | u64 start = gpu_buddy_block_offset(block);
|
| 29 | u64 size = gpu_buddy_block_size(mm, block);
|
| 30 |
|
| 31 | drm_printf(p, "%#018llx-%#018llx: %llu\n", start, start + size, size);
|
| 32 | }
|
| 33 | EXPORT_SYMBOL(drm_buddy_block_print);
|
| 34 |
|
| 35 | |
| 36 | * drm_buddy_print - print allocator state
|
| 37 | *
|
| 38 | * @mm: DRM buddy manager
|
| 39 | * @p: DRM printer to use
|
| 40 |
|
| 41 | void drm_buddy_print(struct gpu_buddy *mm, struct drm_printer *p)
|
| 42 | {
|
| 43 | int order;
|
| 44 |
|
| 45 | gpu_buddy_driver_lock_held(mm);
|
| 46 | drm_printf(p, "chunk_size: %lluKiB, total: %lluMiB, free: %lluMiB, clear_free: %lluMiB\n",
|
| 47 | mm->chunk_size >> 10, mm->size >> 20, mm->avail >> 20, mm->clear_avail >> 20);
|
| 48 |
|
| 49 | for (order = mm->max_order; order >= 0; order--) {
|
| 50 | u64 free_count = mm->free_scoreboard[order];
|
| 51 | u64 used_count = mm->used_scoreboard[order];
|
| 52 | u64 block_size = mm->chunk_size << order;
|
| 53 | u64 free = free_count * block_size;
|
| 54 | u64 used = used_count * block_size;
|
| 55 |
|
| 56 | drm_printf(p, "order-%2d ", order);
|
| 57 |
|
| 58 | if (block_size < SZ_1M)
|
| 59 | drm_printf(p, "free: %8llu KiB, used: %8llu KiB",
|
| 60 | free >> 10, used >> 10);
|
| 61 | else
|
| 62 | drm_printf(p, "free: %8llu MiB, used: %8llu MiB",
|
| 63 | free >> 20, used >> 20);
|
| 64 |
|
| 65 | drm_printf(p, ", free_blocks: %llu, used_blocks: %llu\n",
|
| 66 | free_count, used_count);
|
| 67 | }
|
| 68 | }
|
| 69 | EXPORT_SYMBOL(drm_buddy_print);
|
| 70 |
|
| 71 | MODULE_DESCRIPTION("DRM-specific GPU Buddy Allocator Print Helpers");
|
| 72 | MODULE_LICENSE("Dual MIT/GPL");
|