projects/linux·blob master · refs

72 lines · 1.9 KiB

1// SPDX-License-Identifier: MIT
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 */
24void 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}
33EXPORT_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 */
41void 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}
69EXPORT_SYMBOL(drm_buddy_print);
70
71MODULE_DESCRIPTION("DRM-specific GPU Buddy Allocator Print Helpers");
72MODULE_LICENSE("Dual MIT/GPL");