mirror of
https://github.com/torvalds/linux.git
synced 2026-04-18 14:53:58 -04:00
Conversion performed via this Coccinelle script:
// SPDX-License-Identifier: GPL-2.0-only
// Options: --include-headers-for-types --all-includes --include-headers --keep-comments
virtual patch
@gfp depends on patch && !(file in "tools") && !(file in "samples")@
identifier ALLOC = {kmalloc_obj,kmalloc_objs,kmalloc_flex,
kzalloc_obj,kzalloc_objs,kzalloc_flex,
kvmalloc_obj,kvmalloc_objs,kvmalloc_flex,
kvzalloc_obj,kvzalloc_objs,kvzalloc_flex};
@@
ALLOC(...
- , GFP_KERNEL
)
$ make coccicheck MODE=patch COCCI=gfp.cocci
Build and boot tested x86_64 with Fedora 42's GCC and Clang:
Linux version 6.19.0+ (user@host) (gcc (GCC) 15.2.1 20260123 (Red Hat 15.2.1-7), GNU ld version 2.44-12.fc42) #1 SMP PREEMPT_DYNAMIC 1970-01-01
Linux version 6.19.0+ (user@host) (clang version 20.1.8 (Fedora 20.1.8-4.fc42), LLD 20.1.8) #1 SMP PREEMPT_DYNAMIC 1970-01-01
Signed-off-by: Kees Cook <kees@kernel.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
78 lines
1.8 KiB
C
78 lines
1.8 KiB
C
// SPDX-License-Identifier: MIT
|
|
/*
|
|
* Copyright © 2021 Intel Corporation
|
|
*/
|
|
|
|
#include <kunit/test-bug.h>
|
|
|
|
#include <linux/export.h>
|
|
#include <linux/kmemleak.h>
|
|
#include <linux/module.h>
|
|
#include <linux/sizes.h>
|
|
|
|
#include <linux/gpu_buddy.h>
|
|
#include <drm/drm_buddy.h>
|
|
#include <drm/drm_print.h>
|
|
|
|
/**
|
|
* drm_buddy_block_print - print block information
|
|
*
|
|
* @mm: DRM buddy manager
|
|
* @block: DRM buddy block
|
|
* @p: DRM printer to use
|
|
*/
|
|
void drm_buddy_block_print(struct gpu_buddy *mm,
|
|
struct gpu_buddy_block *block,
|
|
struct drm_printer *p)
|
|
{
|
|
u64 start = gpu_buddy_block_offset(block);
|
|
u64 size = gpu_buddy_block_size(mm, block);
|
|
|
|
drm_printf(p, "%#018llx-%#018llx: %llu\n", start, start + size, size);
|
|
}
|
|
EXPORT_SYMBOL(drm_buddy_block_print);
|
|
|
|
/**
|
|
* drm_buddy_print - print allocator state
|
|
*
|
|
* @mm: DRM buddy manager
|
|
* @p: DRM printer to use
|
|
*/
|
|
void drm_buddy_print(struct gpu_buddy *mm, struct drm_printer *p)
|
|
{
|
|
int order;
|
|
|
|
drm_printf(p, "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);
|
|
|
|
for (order = mm->max_order; order >= 0; order--) {
|
|
struct gpu_buddy_block *block, *tmp;
|
|
struct rb_root *root;
|
|
u64 count = 0, free;
|
|
unsigned int tree;
|
|
|
|
for_each_free_tree(tree) {
|
|
root = &mm->free_trees[tree][order];
|
|
|
|
rbtree_postorder_for_each_entry_safe(block, tmp, root, rb) {
|
|
BUG_ON(!gpu_buddy_block_is_free(block));
|
|
count++;
|
|
}
|
|
}
|
|
|
|
drm_printf(p, "order-%2d ", order);
|
|
|
|
free = count * (mm->chunk_size << order);
|
|
if (free < SZ_1M)
|
|
drm_printf(p, "free: %8llu KiB", free >> 10);
|
|
else
|
|
drm_printf(p, "free: %8llu MiB", free >> 20);
|
|
|
|
drm_printf(p, ", blocks: %llu\n", count);
|
|
}
|
|
}
|
|
EXPORT_SYMBOL(drm_buddy_print);
|
|
|
|
MODULE_DESCRIPTION("DRM-specific GPU Buddy Allocator Print Helpers");
|
|
MODULE_LICENSE("Dual MIT/GPL");
|