net: core: Add array support to stack info helpers

Allow caller to create array of thread stacks using
NET_STACK_ARRAY_DEFINE() macro. This allows more debug information
to be printed by "net stacks" command.

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
This commit is contained in:
Jukka Rissanen 2018-02-07 14:45:44 +02:00 committed by Anas Nashif
commit 159aaf1740

View file

@ -111,6 +111,8 @@ struct net_stack_info {
const char *name;
size_t orig_size;
size_t size;
int prio;
int idx;
};
#if defined(CONFIG_NET_SHELL)
@ -126,15 +128,45 @@ struct net_stack_info {
.orig_size = _orig, \
.name = #_name, \
.pretty_name = #_pretty, \
.prio = -1, \
.idx = -1, \
}
/* Note that the stack address needs to be fixed at runtime because
* we cannot do it during static initialization. For name we allocate
* some space so that the stack index can be printed too.
*/
#define NET_STACK_INFO_ADDR_ARRAY(_pretty, _name, _orig, _size, _addr, \
sfx, _nmemb) \
static struct net_stack_info \
(NET_STACK_GET_NAME(_pretty, _name, sfx))[_nmemb] __used \
__attribute__((__section__(".net_stack.data"))) = { \
[0 ... (_nmemb - 1)] = { \
.stack = _addr[0], \
.size = _size, \
.orig_size = _orig, \
.name = #_name, \
.pretty_name = #_pretty, \
.prio = -1, \
.idx = -1, \
} \
}
#define NET_STACK_INFO(_pretty_name, _name, _orig, _size) \
NET_STACK_INFO_ADDR(_pretty_name, _name, _orig, _size, _name, 0)
#define NET_STACK_INFO_ARRAY(_pretty_name, _name, _orig, _size, _nmemb) \
NET_STACK_INFO_ADDR_ARRAY(_pretty_name, _name, _orig, _size, _name, \
0, _nmemb)
#define NET_STACK_DEFINE(pretty_name, name, orig, size) \
K_THREAD_STACK_DEFINE(name, size); \
NET_STACK_INFO(pretty_name, name, orig, size)
#define NET_STACK_ARRAY_DEFINE(pretty_name, name, orig, size, nmemb) \
K_THREAD_STACK_ARRAY_DEFINE(name, nmemb, size); \
NET_STACK_INFO_ARRAY(pretty_name, name, orig, size, nmemb)
#else /* CONFIG_NET_SHELL */
#define NET_STACK_INFO(...)
@ -143,6 +175,9 @@ struct net_stack_info {
#define NET_STACK_DEFINE(pretty_name, name, orig, size) \
K_THREAD_STACK_DEFINE(name, size)
#define NET_STACK_ARRAY_DEFINE(pretty_name, name, orig, size, nmemb) \
K_THREAD_STACK_ARRAY_DEFINE(name, nmemb, size)
#endif /* CONFIG_NET_SHELL */
#define NET_STACK_DEFINE_EMBEDDED(name, size) char name[size]