1 /* SPDX-License-Identifier: GPL-2.0-only */
3 * include/linux/kmemleak.h
5 * Copyright (C) 2008 ARM Limited
6 * Written by Catalin Marinas <catalin.marinas@arm.com>
12 #include <linux/slab.h>
13 #include <linux/vmalloc.h>
15 #ifdef CONFIG_DEBUG_KMEMLEAK
17 extern void kmemleak_init(void) __init
;
18 extern void kmemleak_alloc(const void *ptr
, size_t size
, int min_count
,
20 extern void kmemleak_alloc_percpu(const void __percpu
*ptr
, size_t size
,
22 extern void kmemleak_vmalloc(const struct vm_struct
*area
, size_t size
,
24 extern void kmemleak_free(const void *ptr
) __ref
;
25 extern void kmemleak_free_part(const void *ptr
, size_t size
) __ref
;
26 extern void kmemleak_free_percpu(const void __percpu
*ptr
) __ref
;
27 extern void kmemleak_update_trace(const void *ptr
) __ref
;
28 extern void kmemleak_not_leak(const void *ptr
) __ref
;
29 extern void kmemleak_transient_leak(const void *ptr
) __ref
;
30 extern void kmemleak_ignore(const void *ptr
) __ref
;
31 extern void kmemleak_scan_area(const void *ptr
, size_t size
, gfp_t gfp
) __ref
;
32 extern void kmemleak_no_scan(const void *ptr
) __ref
;
33 extern void kmemleak_alloc_phys(phys_addr_t phys
, size_t size
,
35 extern void kmemleak_free_part_phys(phys_addr_t phys
, size_t size
) __ref
;
36 extern void kmemleak_ignore_phys(phys_addr_t phys
) __ref
;
38 static inline void kmemleak_alloc_recursive(const void *ptr
, size_t size
,
39 int min_count
, slab_flags_t flags
,
42 if (!(flags
& SLAB_NOLEAKTRACE
))
43 kmemleak_alloc(ptr
, size
, min_count
, gfp
);
46 static inline void kmemleak_free_recursive(const void *ptr
, slab_flags_t flags
)
48 if (!(flags
& SLAB_NOLEAKTRACE
))
52 static inline void kmemleak_erase(void **ptr
)
59 static inline void kmemleak_init(void)
62 static inline void kmemleak_alloc(const void *ptr
, size_t size
, int min_count
,
66 static inline void kmemleak_alloc_recursive(const void *ptr
, size_t size
,
67 int min_count
, slab_flags_t flags
,
71 static inline void kmemleak_alloc_percpu(const void __percpu
*ptr
, size_t size
,
75 static inline void kmemleak_vmalloc(const struct vm_struct
*area
, size_t size
,
79 static inline void kmemleak_free(const void *ptr
)
82 static inline void kmemleak_free_part(const void *ptr
, size_t size
)
85 static inline void kmemleak_free_recursive(const void *ptr
, slab_flags_t flags
)
88 static inline void kmemleak_free_percpu(const void __percpu
*ptr
)
91 static inline void kmemleak_update_trace(const void *ptr
)
94 static inline void kmemleak_not_leak(const void *ptr
)
97 static inline void kmemleak_transient_leak(const void *ptr
)
100 static inline void kmemleak_ignore(const void *ptr
)
103 static inline void kmemleak_scan_area(const void *ptr
, size_t size
, gfp_t gfp
)
106 static inline void kmemleak_erase(void **ptr
)
109 static inline void kmemleak_no_scan(const void *ptr
)
112 static inline void kmemleak_alloc_phys(phys_addr_t phys
, size_t size
,
116 static inline void kmemleak_free_part_phys(phys_addr_t phys
, size_t size
)
119 static inline void kmemleak_ignore_phys(phys_addr_t phys
)
123 #endif /* CONFIG_DEBUG_KMEMLEAK */
125 #endif /* __KMEMLEAK_H */