1/* SPDX-License-Identifier: GPL-2.0-only */ 2/* 3 * include/linux/kmemleak.h 4 * 5 * Copyright (C) 2008 ARM Limited 6 * Written by Catalin Marinas <catalin.marinas@arm.com> 7 */ 8 9#ifndef __KMEMLEAK_H 10#define __KMEMLEAK_H 11 12#include <linux/slab.h> 13#include <linux/vmalloc.h> 14 15#ifdef CONFIG_DEBUG_KMEMLEAK 16 17extern void kmemleak_init(void) __init; 18extern void kmemleak_alloc(const void *ptr, size_t size, int min_count, 19 gfp_t gfp) __ref; 20extern void kmemleak_alloc_percpu(const void __percpu *ptr, size_t size, 21 gfp_t gfp) __ref; 22extern void kmemleak_vmalloc(const struct vm_struct *area, size_t size, 23 gfp_t gfp) __ref; 24extern void kmemleak_free(const void *ptr) __ref; 25extern void kmemleak_free_part(const void *ptr, size_t size) __ref; 26extern void kmemleak_free_percpu(const void __percpu *ptr) __ref; 27extern void kmemleak_update_trace(const void *ptr) __ref; 28extern void kmemleak_not_leak(const void *ptr) __ref; 29extern void kmemleak_ignore(const void *ptr) __ref; 30extern void kmemleak_scan_area(const void *ptr, size_t size, gfp_t gfp) __ref; 31extern void kmemleak_no_scan(const void *ptr) __ref; 32extern void kmemleak_alloc_phys(phys_addr_t phys, size_t size, 33 gfp_t gfp) __ref; 34extern void kmemleak_free_part_phys(phys_addr_t phys, size_t size) __ref; 35extern void kmemleak_ignore_phys(phys_addr_t phys) __ref; 36 37static inline void kmemleak_alloc_recursive(const void *ptr, size_t size, 38 int min_count, slab_flags_t flags, 39 gfp_t gfp) 40{ 41 if (!(flags & SLAB_NOLEAKTRACE)) 42 kmemleak_alloc(ptr, size, min_count, gfp); 43} 44 45static inline void kmemleak_free_recursive(const void *ptr, slab_flags_t flags) 46{ 47 if (!(flags & SLAB_NOLEAKTRACE)) 48 kmemleak_free(ptr); 49} 50 51static inline void kmemleak_erase(void **ptr) 52{ 53 *ptr = NULL; 54} 55 56#else 57 58static inline void kmemleak_init(void) 59{ 60} 61static inline void kmemleak_alloc(const void *ptr, size_t size, int min_count, 62 gfp_t gfp) 63{ 64} 65static inline void kmemleak_alloc_recursive(const void *ptr, size_t size, 66 int min_count, slab_flags_t flags, 67 gfp_t gfp) 68{ 69} 70static inline void kmemleak_alloc_percpu(const void __percpu *ptr, size_t size, 71 gfp_t gfp) 72{ 73} 74static inline void kmemleak_vmalloc(const struct vm_struct *area, size_t size, 75 gfp_t gfp) 76{ 77} 78static inline void kmemleak_free(const void *ptr) 79{ 80} 81static inline void kmemleak_free_part(const void *ptr, size_t size) 82{ 83} 84static inline void kmemleak_free_recursive(const void *ptr, slab_flags_t flags) 85{ 86} 87static inline void kmemleak_free_percpu(const void __percpu *ptr) 88{ 89} 90static inline void kmemleak_update_trace(const void *ptr) 91{ 92} 93static inline void kmemleak_not_leak(const void *ptr) 94{ 95} 96static inline void kmemleak_ignore(const void *ptr) 97{ 98} 99static inline void kmemleak_scan_area(const void *ptr, size_t size, gfp_t gfp) 100{ 101} 102static inline void kmemleak_erase(void **ptr) 103{ 104} 105static inline void kmemleak_no_scan(const void *ptr) 106{ 107} 108static inline void kmemleak_alloc_phys(phys_addr_t phys, size_t size, 109 gfp_t gfp) 110{ 111} 112static inline void kmemleak_free_part_phys(phys_addr_t phys, size_t size) 113{ 114} 115static inline void kmemleak_ignore_phys(phys_addr_t phys) 116{ 117} 118 119#endif /* CONFIG_DEBUG_KMEMLEAK */ 120 121#endif /* __KMEMLEAK_H */ 122