Blame view
mm/kmemleak-test.c
2.56 KB
450515395 treewide: Replace... |
1 |
// SPDX-License-Identifier: GPL-2.0-only |
0822ee4ac kmemleak: Simple ... |
2 3 4 5 6 |
/* * mm/kmemleak-test.c * * Copyright (C) 2008 ARM Limited * Written by Catalin Marinas <catalin.marinas@arm.com> |
0822ee4ac kmemleak: Simple ... |
7 |
*/ |
f59428ab7 mm/kmemleak-test.... |
8 |
#define pr_fmt(fmt) "kmemleak: " fmt |
0822ee4ac kmemleak: Simple ... |
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
#include <linux/init.h> #include <linux/kernel.h> #include <linux/module.h> #include <linux/slab.h> #include <linux/vmalloc.h> #include <linux/list.h> #include <linux/percpu.h> #include <linux/fdtable.h> #include <linux/kmemleak.h> struct test_node { long header[25]; struct list_head list; long footer[25]; }; static LIST_HEAD(test_list); |
245b2e70e percpu: clean up ... |
27 |
static DEFINE_PER_CPU(void *, kmemleak_test_pointer); |
0822ee4ac kmemleak: Simple ... |
28 29 30 31 32 33 34 35 36 |
/* * Some very simple testing. This function needs to be extended for * proper testing. */ static int __init kmemleak_test_init(void) { struct test_node *elem; int i; |
1170532bb mm: convert print... |
37 38 |
pr_info("Kmemleak testing "); |
0822ee4ac kmemleak: Simple ... |
39 40 |
/* make some orphan objects */ |
f59428ab7 mm/kmemleak-test.... |
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
pr_info("kmalloc(32) = %p ", kmalloc(32, GFP_KERNEL)); pr_info("kmalloc(32) = %p ", kmalloc(32, GFP_KERNEL)); pr_info("kmalloc(1024) = %p ", kmalloc(1024, GFP_KERNEL)); pr_info("kmalloc(1024) = %p ", kmalloc(1024, GFP_KERNEL)); pr_info("kmalloc(2048) = %p ", kmalloc(2048, GFP_KERNEL)); pr_info("kmalloc(2048) = %p ", kmalloc(2048, GFP_KERNEL)); pr_info("kmalloc(4096) = %p ", kmalloc(4096, GFP_KERNEL)); pr_info("kmalloc(4096) = %p ", kmalloc(4096, GFP_KERNEL)); |
0822ee4ac kmemleak: Simple ... |
57 |
#ifndef CONFIG_MODULES |
f59428ab7 mm/kmemleak-test.... |
58 59 |
pr_info("kmem_cache_alloc(files_cachep) = %p ", |
0822ee4ac kmemleak: Simple ... |
60 |
kmem_cache_alloc(files_cachep, GFP_KERNEL)); |
f59428ab7 mm/kmemleak-test.... |
61 62 |
pr_info("kmem_cache_alloc(files_cachep) = %p ", |
0822ee4ac kmemleak: Simple ... |
63 64 |
kmem_cache_alloc(files_cachep, GFP_KERNEL)); #endif |
f59428ab7 mm/kmemleak-test.... |
65 66 67 68 69 70 71 72 73 74 |
pr_info("vmalloc(64) = %p ", vmalloc(64)); pr_info("vmalloc(64) = %p ", vmalloc(64)); pr_info("vmalloc(64) = %p ", vmalloc(64)); pr_info("vmalloc(64) = %p ", vmalloc(64)); pr_info("vmalloc(64) = %p ", vmalloc(64)); |
0822ee4ac kmemleak: Simple ... |
75 76 77 78 79 80 |
/* * Add elements to a list. They should only appear as orphan * after the module is removed. */ for (i = 0; i < 10; i++) { |
0a08739e8 kmemleak: remove ... |
81 |
elem = kzalloc(sizeof(*elem), GFP_KERNEL); |
f59428ab7 mm/kmemleak-test.... |
82 83 |
pr_info("kzalloc(sizeof(*elem)) = %p ", elem); |
0822ee4ac kmemleak: Simple ... |
84 85 |
if (!elem) return -ENOMEM; |
0822ee4ac kmemleak: Simple ... |
86 |
INIT_LIST_HEAD(&elem->list); |
0822ee4ac kmemleak: Simple ... |
87 88 89 90 |
list_add_tail(&elem->list, &test_list); } for_each_possible_cpu(i) { |
245b2e70e percpu: clean up ... |
91 |
per_cpu(kmemleak_test_pointer, i) = kmalloc(129, GFP_KERNEL); |
f59428ab7 mm/kmemleak-test.... |
92 93 |
pr_info("kmalloc(129) = %p ", |
245b2e70e percpu: clean up ... |
94 |
per_cpu(kmemleak_test_pointer, i)); |
0822ee4ac kmemleak: Simple ... |
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
} return 0; } module_init(kmemleak_test_init); static void __exit kmemleak_test_exit(void) { struct test_node *elem, *tmp; /* * Remove the list elements without actually freeing the * memory. */ list_for_each_entry_safe(elem, tmp, &test_list, list) list_del(&elem->list); } module_exit(kmemleak_test_exit); MODULE_LICENSE("GPL"); |