File: /Users/paulross/dev/linux/linux-3.13/include/linux/kmemleak.h

Green shading in the line number column means the source is part of the translation unit, red means it is conditionally excluded. Highlighted line numbers link to the translation unit page. Highlighted macros link to the macro page.

       1: /*
       2:  * include/linux/kmemleak.h
       3:  *
       4:  * Copyright (C) 2008 ARM Limited
       5:  * Written by Catalin Marinas <catalin.marinas@arm.com>
       6:  *
       7:  * This program is free software; you can redistribute it and/or modify
       8:  * it under the terms of the GNU General Public License version 2 as
       9:  * published by the Free Software Foundation.
      10:  *
      11:  * This program is distributed in the hope that it will be useful,
      12:  * but WITHOUT ANY WARRANTY; without even the implied warranty of
      13:  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      14:  * GNU General Public License for more details.
      15:  *
      16:  * You should have received a copy of the GNU General Public License
      17:  * along with this program; if not, write to the Free Software
      18:  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
      19:  */
      20: 
      21: #ifndef __KMEMLEAK_H
      22: #define __KMEMLEAK_H
      23: 
      24: #ifdef CONFIG_DEBUG_KMEMLEAK
      25: 
      26: extern void kmemleak_init(void) __ref;
      27: extern void kmemleak_alloc(const void *ptr, size_t size, int min_count,
      28:                gfp_t gfp) __ref;
      29: extern void kmemleak_alloc_percpu(const void __percpu *ptr, size_t size) __ref;
      30: extern void kmemleak_free(const void *ptr) __ref;
      31: extern void kmemleak_free_part(const void *ptr, size_t size) __ref;
      32: extern void kmemleak_free_percpu(const void __percpu *ptr) __ref;
      33: extern void kmemleak_padding(const void *ptr, unsigned long offset,
      34:                  size_t size) __ref;
      35: extern void kmemleak_not_leak(const void *ptr) __ref;
      36: extern void kmemleak_ignore(const void *ptr) __ref;
      37: extern void kmemleak_scan_area(const void *ptr, size_t size, gfp_t gfp) __ref;
      38: extern void kmemleak_no_scan(const void *ptr) __ref;
      39: 
      40: static inline void kmemleak_alloc_recursive(const void *ptr, size_t size,
      41:                         int min_count, unsigned long flags,
      42:                         gfp_t gfp)
      43: {
      44:     if (!(flags & SLAB_NOLEAKTRACE))
      45:         kmemleak_alloc(ptr, size, min_count, gfp);
      46: }
      47: 
      48: static inline void kmemleak_free_recursive(const void *ptr, unsigned long flags)
      49: {
      50:     if (!(flags & SLAB_NOLEAKTRACE))
      51:         kmemleak_free(ptr);
      52: }
      53: 
      54: static inline void kmemleak_erase(void **ptr)
      55: {
      56:     *ptr = NULL;
      57: }
      58: 
      59: #else
      60: 
      61: static inline void kmemleak_init(void)
      62: {
      63: }
      64: static inline void kmemleak_alloc(const void *ptr, size_t size, int min_count,
      65:                   gfp_t gfp)
      66: {
      67: }
      68: static inline void kmemleak_alloc_recursive(const void *ptr, size_t size,
      69:                         int min_count, unsigned long flags,
      70:                         gfp_t gfp)
      71: {
      72: }
      73: static inline void kmemleak_alloc_percpu(const void __percpu *ptr, size_t size)
      74: {
      75: }
      76: static inline void kmemleak_free(const void *ptr)
      77: {
      78: }
      79: static inline void kmemleak_free_part(const void *ptr, size_t size)
      80: {
      81: }
      82: static inline void kmemleak_free_recursive(const void *ptr, unsigned long flags)
      83: {
      84: }
      85: static inline void kmemleak_free_percpu(const void __percpu *ptr)
      86: {
      87: }
      88: static inline void kmemleak_not_leak(const void *ptr)
      89: {
      90: }
      91: static inline void kmemleak_ignore(const void *ptr)
      92: {
      93: }
      94: static inline void kmemleak_scan_area(const void *ptr, size_t size, gfp_t gfp)
      95: {
      96: }
      97: static inline void kmemleak_erase(void **ptr)
      98: {
      99: }
     100: static inline void kmemleak_no_scan(const void *ptr)
     101: {
     102: }
     103: 
     104: #endif    /* CONFIG_DEBUG_KMEMLEAK */
     105: 
     106: #endif    /* __KMEMLEAK_H */
     107: