kernel: Bring back object tracking

When CONFIG_TRACING_OBJECT_TRACKING is enabled, the kernel will keep
lists of some objects (detailed below), so that debuggers or other tools
can keep track of them.

The lists of objects are:

struct k_timer *_track_list_k_timer;
struct k_mem_slab *_track_list_k_mem_slab;
struct k_sem *_track_list_k_sem;
struct k_mutex *_track_list_k_mutex;
struct k_stack *_track_list_k_stack;
struct k_msgq *_track_list_k_msgq;
struct k_mbox *_track_list_k_mbox;
struct k_pipe *_track_list_k_pipe;
struct k_queue *_track_list_k_queue;

Note that while CONFIG_TRACING is needed, one can always use
CONFIG_TRACE_NONE=y. Also, tracking will only be done for objects that
are also being traced (so, to prevent tracking of some type of object,
such as k_timer, just make CONFIG_TRACING_TIMER=n).

Some simple "sanity checking" tests are also added in this patch.

Signed-off-by: Ederson de Souza <ederson.desouza@intel.com>
This commit is contained in:
Ederson de Souza 2021-11-22 14:46:19 -08:00 committed by Anas Nashif
commit bdaac354f4
12 changed files with 544 additions and 0 deletions

View file

@ -1288,6 +1288,7 @@ struct k_timer {
/* user-specific data, also used to support legacy features */
void *user_data;
SYS_PORT_TRACING_TRACKING_FIELD(k_timer)
};
#define Z_TIMER_INITIALIZER(obj, expiry, stop) \
@ -1670,6 +1671,8 @@ struct k_queue {
_wait_q_t wait_q;
_POLL_EVENT;
SYS_PORT_TRACING_TRACKING_FIELD(k_queue)
};
#define Z_QUEUE_INITIALIZER(obj) \
@ -2548,6 +2551,8 @@ struct k_stack {
stack_data_t *base, *next, *top;
uint8_t flags;
SYS_PORT_TRACING_TRACKING_FIELD(k_stack)
};
#define Z_STACK_INITIALIZER(obj, stack_buffer, stack_num_entries) \
@ -2705,6 +2710,8 @@ struct k_mutex {
/** Original thread priority */
int owner_orig_prio;
SYS_PORT_TRACING_TRACKING_FIELD(k_mutex)
};
/**
@ -2888,6 +2895,8 @@ struct k_sem {
_POLL_EVENT;
SYS_PORT_TRACING_TRACKING_FIELD(k_sem)
};
#define Z_SEM_INITIALIZER(obj, initial_count, count_limit) \
@ -4328,6 +4337,8 @@ struct k_msgq {
/** Message queue */
uint8_t flags;
SYS_PORT_TRACING_TRACKING_FIELD(k_msgq)
};
/**
* @cond INTERNAL_HIDDEN
@ -4617,6 +4628,7 @@ struct k_mbox {
_wait_q_t rx_msg_queue;
struct k_spinlock lock;
SYS_PORT_TRACING_TRACKING_FIELD(k_mbox)
};
/**
* @cond INTERNAL_HIDDEN
@ -4756,6 +4768,8 @@ struct k_pipe {
} wait_q; /** Wait queue */
uint8_t flags; /**< Flags */
SYS_PORT_TRACING_TRACKING_FIELD(k_pipe)
};
/**
@ -4929,6 +4943,7 @@ struct k_mem_slab {
uint32_t max_used;
#endif
SYS_PORT_TRACING_TRACKING_FIELD(k_mem_slab)
};
#define Z_MEM_SLAB_INITIALIZER(obj, slab_buffer, slab_block_size, \