kmemleak.h 3.6 KB
Newer Older
C
Catalin Marinas 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
/*
 * include/linux/kmemleak.h
 *
 * Copyright (C) 2008 ARM Limited
 * Written by Catalin Marinas <catalin.marinas@arm.com>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 */

#ifndef __KMEMLEAK_H
#define __KMEMLEAK_H

24 25
#include <linux/slab.h>

C
Catalin Marinas 已提交
26 27
#ifdef CONFIG_DEBUG_KMEMLEAK

28
extern void kmemleak_init(void) __init;
C
Catalin Marinas 已提交
29
extern void kmemleak_alloc(const void *ptr, size_t size, int min_count,
30
			   gfp_t gfp) __ref;
31 32
extern void kmemleak_alloc_percpu(const void __percpu *ptr, size_t size,
				  gfp_t gfp) __ref;
33 34
extern void kmemleak_free(const void *ptr) __ref;
extern void kmemleak_free_part(const void *ptr, size_t size) __ref;
35
extern void kmemleak_free_percpu(const void __percpu *ptr) __ref;
36
extern void kmemleak_update_trace(const void *ptr) __ref;
37 38
extern void kmemleak_not_leak(const void *ptr) __ref;
extern void kmemleak_ignore(const void *ptr) __ref;
39
extern void kmemleak_scan_area(const void *ptr, size_t size, gfp_t gfp) __ref;
40
extern void kmemleak_no_scan(const void *ptr) __ref;
41 42 43 44 45
extern void kmemleak_alloc_phys(phys_addr_t phys, size_t size, int min_count,
				gfp_t gfp) __ref;
extern void kmemleak_free_part_phys(phys_addr_t phys, size_t size) __ref;
extern void kmemleak_not_leak_phys(phys_addr_t phys) __ref;
extern void kmemleak_ignore_phys(phys_addr_t phys) __ref;
C
Catalin Marinas 已提交
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79

static inline void kmemleak_alloc_recursive(const void *ptr, size_t size,
					    int min_count, unsigned long flags,
					    gfp_t gfp)
{
	if (!(flags & SLAB_NOLEAKTRACE))
		kmemleak_alloc(ptr, size, min_count, gfp);
}

static inline void kmemleak_free_recursive(const void *ptr, unsigned long flags)
{
	if (!(flags & SLAB_NOLEAKTRACE))
		kmemleak_free(ptr);
}

static inline void kmemleak_erase(void **ptr)
{
	*ptr = NULL;
}

#else

static inline void kmemleak_init(void)
{
}
static inline void kmemleak_alloc(const void *ptr, size_t size, int min_count,
				  gfp_t gfp)
{
}
static inline void kmemleak_alloc_recursive(const void *ptr, size_t size,
					    int min_count, unsigned long flags,
					    gfp_t gfp)
{
}
80 81
static inline void kmemleak_alloc_percpu(const void __percpu *ptr, size_t size,
					 gfp_t gfp)
82 83
{
}
C
Catalin Marinas 已提交
84 85 86
static inline void kmemleak_free(const void *ptr)
{
}
87 88 89
static inline void kmemleak_free_part(const void *ptr, size_t size)
{
}
C
Catalin Marinas 已提交
90 91 92
static inline void kmemleak_free_recursive(const void *ptr, unsigned long flags)
{
}
93 94 95
static inline void kmemleak_free_percpu(const void __percpu *ptr)
{
}
96 97 98
static inline void kmemleak_update_trace(const void *ptr)
{
}
C
Catalin Marinas 已提交
99 100 101 102 103 104
static inline void kmemleak_not_leak(const void *ptr)
{
}
static inline void kmemleak_ignore(const void *ptr)
{
}
105
static inline void kmemleak_scan_area(const void *ptr, size_t size, gfp_t gfp)
C
Catalin Marinas 已提交
106 107 108 109 110 111 112 113
{
}
static inline void kmemleak_erase(void **ptr)
{
}
static inline void kmemleak_no_scan(const void *ptr)
{
}
114 115 116 117 118 119 120 121 122 123 124 125 126
static inline void kmemleak_alloc_phys(phys_addr_t phys, size_t size,
				       int min_count, gfp_t gfp)
{
}
static inline void kmemleak_free_part_phys(phys_addr_t phys, size_t size)
{
}
static inline void kmemleak_not_leak_phys(phys_addr_t phys)
{
}
static inline void kmemleak_ignore_phys(phys_addr_t phys)
{
}
C
Catalin Marinas 已提交
127 128 129 130

#endif	/* CONFIG_DEBUG_KMEMLEAK */

#endif	/* __KMEMLEAK_H */