root/include/linux/debugobjects.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. debug_object_init
  2. debug_object_init_on_stack
  3. debug_object_activate
  4. debug_object_deactivate
  5. debug_object_destroy
  6. debug_object_free
  7. debug_object_assert_init
  8. debug_objects_early_init
  9. debug_objects_mem_init
  10. debug_check_no_obj_freed

   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 #ifndef _LINUX_DEBUGOBJECTS_H
   3 #define _LINUX_DEBUGOBJECTS_H
   4 
   5 #include <linux/list.h>
   6 #include <linux/spinlock.h>
   7 
   8 enum debug_obj_state {
   9         ODEBUG_STATE_NONE,
  10         ODEBUG_STATE_INIT,
  11         ODEBUG_STATE_INACTIVE,
  12         ODEBUG_STATE_ACTIVE,
  13         ODEBUG_STATE_DESTROYED,
  14         ODEBUG_STATE_NOTAVAILABLE,
  15         ODEBUG_STATE_MAX,
  16 };
  17 
  18 struct debug_obj_descr;
  19 
  20 /**
  21  * struct debug_obj - representaion of an tracked object
  22  * @node:       hlist node to link the object into the tracker list
  23  * @state:      tracked object state
  24  * @astate:     current active state
  25  * @object:     pointer to the real object
  26  * @descr:      pointer to an object type specific debug description structure
  27  */
  28 struct debug_obj {
  29         struct hlist_node       node;
  30         enum debug_obj_state    state;
  31         unsigned int            astate;
  32         void                    *object;
  33         struct debug_obj_descr  *descr;
  34 };
  35 
  36 /**
  37  * struct debug_obj_descr - object type specific debug description structure
  38  *
  39  * @name:               name of the object typee
  40  * @debug_hint:         function returning address, which have associated
  41  *                      kernel symbol, to allow identify the object
  42  * @is_static_object:   return true if the obj is static, otherwise return false
  43  * @fixup_init:         fixup function, which is called when the init check
  44  *                      fails. All fixup functions must return true if fixup
  45  *                      was successful, otherwise return false
  46  * @fixup_activate:     fixup function, which is called when the activate check
  47  *                      fails
  48  * @fixup_destroy:      fixup function, which is called when the destroy check
  49  *                      fails
  50  * @fixup_free:         fixup function, which is called when the free check
  51  *                      fails
  52  * @fixup_assert_init:  fixup function, which is called when the assert_init
  53  *                      check fails
  54  */
  55 struct debug_obj_descr {
  56         const char              *name;
  57         void *(*debug_hint)(void *addr);
  58         bool (*is_static_object)(void *addr);
  59         bool (*fixup_init)(void *addr, enum debug_obj_state state);
  60         bool (*fixup_activate)(void *addr, enum debug_obj_state state);
  61         bool (*fixup_destroy)(void *addr, enum debug_obj_state state);
  62         bool (*fixup_free)(void *addr, enum debug_obj_state state);
  63         bool (*fixup_assert_init)(void *addr, enum debug_obj_state state);
  64 };
  65 
  66 #ifdef CONFIG_DEBUG_OBJECTS
  67 extern void debug_object_init      (void *addr, struct debug_obj_descr *descr);
  68 extern void
  69 debug_object_init_on_stack(void *addr, struct debug_obj_descr *descr);
  70 extern int debug_object_activate  (void *addr, struct debug_obj_descr *descr);
  71 extern void debug_object_deactivate(void *addr, struct debug_obj_descr *descr);
  72 extern void debug_object_destroy   (void *addr, struct debug_obj_descr *descr);
  73 extern void debug_object_free      (void *addr, struct debug_obj_descr *descr);
  74 extern void debug_object_assert_init(void *addr, struct debug_obj_descr *descr);
  75 
  76 /*
  77  * Active state:
  78  * - Set at 0 upon initialization.
  79  * - Must return to 0 before deactivation.
  80  */
  81 extern void
  82 debug_object_active_state(void *addr, struct debug_obj_descr *descr,
  83                           unsigned int expect, unsigned int next);
  84 
  85 extern void debug_objects_early_init(void);
  86 extern void debug_objects_mem_init(void);
  87 #else
  88 static inline void
  89 debug_object_init      (void *addr, struct debug_obj_descr *descr) { }
  90 static inline void
  91 debug_object_init_on_stack(void *addr, struct debug_obj_descr *descr) { }
  92 static inline int
  93 debug_object_activate  (void *addr, struct debug_obj_descr *descr) { return 0; }
  94 static inline void
  95 debug_object_deactivate(void *addr, struct debug_obj_descr *descr) { }
  96 static inline void
  97 debug_object_destroy   (void *addr, struct debug_obj_descr *descr) { }
  98 static inline void
  99 debug_object_free      (void *addr, struct debug_obj_descr *descr) { }
 100 static inline void
 101 debug_object_assert_init(void *addr, struct debug_obj_descr *descr) { }
 102 
 103 static inline void debug_objects_early_init(void) { }
 104 static inline void debug_objects_mem_init(void) { }
 105 #endif
 106 
 107 #ifdef CONFIG_DEBUG_OBJECTS_FREE
 108 extern void debug_check_no_obj_freed(const void *address, unsigned long size);
 109 #else
 110 static inline void
 111 debug_check_no_obj_freed(const void *address, unsigned long size) { }
 112 #endif
 113 
 114 #endif

/* [<][>][^][v][top][bottom][index][help] */