This is an automated email from the ASF dual-hosted git repository. xiaoxiang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git
The following commit(s) were added to refs/heads/master by this push: new b7063427c8 arch: risc-v: Fix up_check_tcbstack() for CONFIG_ARCH_ADDRENV=y b7063427c8 is described below commit b7063427c8b79c1021c2dc47cf794e389565d0da Author: Masayuki Ishikawa <masayuki.ishik...@gmail.com> AuthorDate: Wed Aug 31 08:39:15 2022 +0900 arch: risc-v: 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 rv-virt:knsh64 on qemu-6.2 Signed-off-by: Masayuki Ishikawa <masayuki.ishik...@jp.sony.com> --- arch/risc-v/src/common/riscv_checkstack.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/arch/risc-v/src/common/riscv_checkstack.c b/arch/risc-v/src/common/riscv_checkstack.c index c3160c9a9a..71db7a5e06 100644 --- a/arch/risc-v/src/common/riscv_checkstack.c +++ b/arch/risc-v/src/common/riscv_checkstack.c @@ -155,8 +155,30 @@ size_t riscv_stack_check(uintptr_t alloc, size_t size) size_t up_check_tcbstack(struct tcb_s *tcb) { - return riscv_stack_check((uintptr_t)tcb->stack_base_ptr, + 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 = riscv_stack_check((uintptr_t)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)