arch: common: Fix up_check_tcbstack() for CONFIG_ARCH_ADDRENV=y

Summary:
- I noticed that ps shows incorrect stack usage when running
  getprime in the background.
- With CONFIG_ARCH_ADDRENV=y, a user task including pthread
  allocates its stack in the user space that needs to be
  accessed with a correct address environment.
- This commit fixes this issue.

Impact:
- CONFIG_ARCH_ADDRENV=y only

Testing:
- Tested with sabre-6quad:knsh on qemu-6.2

Signed-off-by: Masayuki Ishikawa <Masayuki.Ishikawa@jp.sony.com>
This commit is contained in:
Masayuki Ishikawa 2022-08-04 09:44:51 +09:00 committed by Xiang Xiao
parent e0291b1ce8
commit 8e7752c7da

View File

@ -199,7 +199,29 @@ void arm_stack_color(void *stackbase, size_t nbytes)
size_t up_check_tcbstack(struct tcb_s *tcb) size_t up_check_tcbstack(struct tcb_s *tcb)
{ {
return arm_stack_check(tcb->stack_base_ptr, tcb->adj_stack_size); size_t size;
#ifdef CONFIG_ARCH_ADDRENV
save_addrenv_t oldenv;
bool saved = false;
if ((tcb->flags & TCB_FLAG_TTYPE_MASK) != TCB_FLAG_TTYPE_KERNEL)
{
up_addrenv_select(&tcb->group->tg_addrenv, &oldenv);
saved = true;
}
#endif
size = arm_stack_check(tcb->stack_base_ptr, tcb->adj_stack_size);
#ifdef CONFIG_ARCH_ADDRENV
if (saved)
{
up_addrenv_restore(&oldenv);
}
#endif
return size;
} }
ssize_t up_check_tcbstack_remain(struct tcb_s *tcb) ssize_t up_check_tcbstack_remain(struct tcb_s *tcb)