|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Minios-devel] [UNIKRAFT PATCH] lib/ukdebug: Print bottom of stack instead of thread name
Reviewed-by: Yuri Volchkov <yuri.volchkov@xxxxxxxxx>
Simon Kuenzer <simon.kuenzer@xxxxxxxxx> writes:
> The option of printing the thread name of the one
> issueing a uk_printd() call did not work all the
> time and causes the system to access invalid memory
> addresses for retrieving the thread name string. The
> reason is that we currently do not have a fast and
> efficient way to differentiate if a stack was created
> by libuksched or not (e.g., boot stacks, interrupt stacks).
>
> This patch changes this option to print the bottom
> address of the current stack instead. This way, the user
> can still distinguish different threads or stack types
> by their stack address and we remove any dependency to
> other libraries or system configuration.
>
> Signed-off-by: Simon Kuenzer <simon.kuenzer@xxxxxxxxx>
> ---
> lib/ukdebug/Config.uk | 8 ++++----
> lib/ukdebug/print.c | 30 ++++++++++--------------------
> 2 files changed, 14 insertions(+), 24 deletions(-)
>
> diff --git a/lib/ukdebug/Config.uk b/lib/ukdebug/Config.uk
> index 2a1ea7e..dcaeb3a 100644
> --- a/lib/ukdebug/Config.uk
> +++ b/lib/ukdebug/Config.uk
> @@ -44,10 +44,10 @@ config LIBUKDEBUG_PRINTD_TIME
> default y
> depends on LIBUKDEBUG_PRINTD
>
> -config LIBUKDEBUG_PRINTD_THREAD
> - bool "Show name of thread in debug messages"
> - default y
> - depends on LIBUKDEBUG_PRINTD && LIBUKSCHED
> +config LIBUKDEBUG_PRINTD_STACK
> + bool "Print bottom address of stack in debug messages"
> + default n
> + depends on LIBUKDEBUG_PRINTD
>
> choice
> prompt "Message redirection"
> diff --git a/lib/ukdebug/print.c b/lib/ukdebug/print.c
> index 9673dc9..42dca4a 100644
> --- a/lib/ukdebug/print.c
> +++ b/lib/ukdebug/print.c
> @@ -44,9 +44,6 @@
> #include <uk/plat/console.h>
> #include <uk/plat/time.h>
> #include <uk/print.h>
> -#if LIBUKSCHED
> -#include <uk/thread.h>
> -#endif
> #include <uk/errptr.h>
> #include <uk/arch/lcpu.h>
>
> @@ -96,24 +93,17 @@ static void _printd_timestamp(void)
> }
> #endif
>
> -#if LIBUKDEBUG_PRINTD_THREAD
> -static void _printd_thread(void)
> +#if LIBUKDEBUG_PRINTD_STACK
> +static void _printd_stack(void)
> {
> - struct uk_thread *thread;
> + unsigned long stackb;
> + char buf[BUFLEN];
> + int len;
>
> - thread = uk_thread_current();
> - if (!PTRISERR(thread) && thread->name) {
> - _ukplat_coutd("<", 1);
> - _ukplat_coutd((char *)thread->name,
> - strlen(thread->name));
> - _ukplat_coutd("> ", 2);
> - } else {
> - char buf[BUFLEN];
> - int len;
> + stackb = (ukarch_read_sp() & ~(__STACK_SIZE - 1)) + __STACK_SIZE;
>
> - len = snprintf(buf, BUFLEN, "<%p> ", thread);
> - _ukplat_coutd((char *)buf, len);
> - }
> + len = snprintf(buf, BUFLEN, "<%p> ", (void *) stackb);
> + _ukplat_coutd((char *)buf, len);
> }
> #endif
>
> @@ -175,8 +165,8 @@ static inline void _vprintd(int lvl, const char *libname,
> const char *srcname,
> _printd_timestamp();
> #endif
> _ukplat_coutd(DECONST(char *, msghdr), 6);
> -#if LIBUKDEBUG_PRINTD_THREAD
> - _printd_thread();
> +#if LIBUKDEBUG_PRINTD_STACK
> + _printd_stack();
> #endif
> if (libname) {
> _ukplat_coutd("[", 1);
> --
> 2.7.4
>
--
Yuri Volchkov
Software Specialist
NEC Europe Ltd
Kurfürsten-Anlage 36
D-69115 Heidelberg
_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |