kmemleak.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  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. #ifndef __KMEMLEAK_H
  21. #define __KMEMLEAK_H
  22. #ifdef CONFIG_DEBUG_KMEMLEAK
  23. extern void kmemleak_init(void);
  24. extern void kmemleak_alloc(const void *ptr, size_t size, int min_count,
  25. gfp_t gfp);
  26. extern void kmemleak_free(const void *ptr);
  27. extern void kmemleak_free_part(const void *ptr, size_t size);
  28. extern void kmemleak_padding(const void *ptr, unsigned long offset,
  29. size_t size);
  30. extern void kmemleak_not_leak(const void *ptr);
  31. extern void kmemleak_ignore(const void *ptr);
  32. extern void kmemleak_scan_area(const void *ptr, unsigned long offset,
  33. size_t length, gfp_t gfp);
  34. extern void kmemleak_no_scan(const void *ptr);
  35. static inline void kmemleak_alloc_recursive(const void *ptr, size_t size,
  36. int min_count, unsigned long flags,
  37. gfp_t gfp)
  38. {
  39. if (!(flags & SLAB_NOLEAKTRACE))
  40. kmemleak_alloc(ptr, size, min_count, gfp);
  41. }
  42. static inline void kmemleak_free_recursive(const void *ptr, unsigned long flags)
  43. {
  44. if (!(flags & SLAB_NOLEAKTRACE))
  45. kmemleak_free(ptr);
  46. }
  47. static inline void kmemleak_erase(void **ptr)
  48. {
  49. *ptr = NULL;
  50. }
  51. #else
  52. static inline void kmemleak_init(void)
  53. {
  54. }
  55. static inline void kmemleak_alloc(const void *ptr, size_t size, int min_count,
  56. gfp_t gfp)
  57. {
  58. }
  59. static inline void kmemleak_alloc_recursive(const void *ptr, size_t size,
  60. int min_count, unsigned long flags,
  61. gfp_t gfp)
  62. {
  63. }
  64. static inline void kmemleak_free(const void *ptr)
  65. {
  66. }
  67. static inline void kmemleak_free_part(const void *ptr, size_t size)
  68. {
  69. }
  70. static inline void kmemleak_free_recursive(const void *ptr, unsigned long flags)
  71. {
  72. }
  73. static inline void kmemleak_not_leak(const void *ptr)
  74. {
  75. }
  76. static inline void kmemleak_ignore(const void *ptr)
  77. {
  78. }
  79. static inline void kmemleak_scan_area(const void *ptr, unsigned long offset,
  80. size_t length, gfp_t gfp)
  81. {
  82. }
  83. static inline void kmemleak_erase(void **ptr)
  84. {
  85. }
  86. static inline void kmemleak_no_scan(const void *ptr)
  87. {
  88. }
  89. #endif /* CONFIG_DEBUG_KMEMLEAK */
  90. #endif /* __KMEMLEAK_H */