evolution124 opened a new issue, #19713:
URL: https://github.com/apache/nuttx/issues/19713
### Description / Steps to reproduce the issue
CONFIG_ARCH_RV_CPUID_MAP is configured
1. bellow code using g_cpux_idlestack to get stack but without translate
cpuid to hartid
```
arch/risc-v/src/common/riscv_cpuidlestack.c
//will read stack by cpuid
stack_alloc = (uintptr_t)g_cpux_idlestack(cpu);
```
```
arch/risc-v/src/common/riscv_initialstate.c
// will read stack by cpuid
tcb->stack_alloc_ptr = (void *)g_cpux_idlestack(this_cpu());
```
```
arch/risc-v/src/common/riscv_common_memorymap.h
//using cpuid to read stack
#define g_cpux_idlestack(cpuid) \
(g_idle_topstack - SMP_STACK_SIZE * (CONFIG_SMP_NCPUS - (cpuid)))
```
2. if using customized cpuid to hartid mapping like bellow, stack is wrong.
```
int riscv_hartid_to_cpuid(int hart)
{
#ifdef CONFIG_SMP
int cpu_id = -1;
switch(hart) {
case 0: cpu_id = 0; break;
case 1: cpu_id = 2; break;
case 2: cpu_id = 1; break;
default :
DEBUGASSERT(0);
break;
}
return cpu_id;
#else
return 0;
#endif
}
int riscv_cpuid_to_hartid(int cpu)
{
#ifdef CONFIG_SMP
int hart_id = -1;
switch(cpu) {
case 0: hart_id = 0; break;
case 1: hart_id = 2; break;
case 2: hart_id = 1; break;
default :
DEBUGASSERT(0);
break;
}
return hart_id;
#else
return up_cpu_index();
#endif
}
```
### On which OS does this issue occur?
[OS: Linux]
### What is the version of your OS?
Ubuntu 22.04.4 LTS
### NuttX Version
96f440f0c068f278cc11a956c2c6cf52ff79cf01
### Issue Architecture
[Arch: risc-v]
### Issue Area
[Area: Kernel]
### Host information
1. g_cpux_idlestack dose not translate cpuid to hartid
`
arch/risc-v/src/common/riscv_cpuidlestack.c
// using cpuid to get stack
stack_alloc = (uintptr_t)g_cpux_idlestack(cpu);
`
`
arch/risc-v/src/common/riscv_initialstate.c
// using cpuid to get stack
`tcb->stack_alloc_ptr = (void *)g_cpux_idlestack(this_cpu());`
`
`
arch/risc-v/src/common/riscv_common_memorymap.h
#define g_cpux_idlestack(cpuid) \
(g_idle_topstack - SMP_STACK_SIZE * (CONFIG_SMP_NCPUS - (cpuid)))
`
2. if using hartid to cpudid mapping like bellow, will get wrong stack,
because, we using hartid to setup stack
`
int riscv_hartid_to_cpuid(int hart)
{
#ifdef CONFIG_SMP
int cpu_id = -1;
switch(hart) {
case 0: cpu_id = 0; break;
case 1: cpu_id = 2; break;
case 2: cpu_id = 1; break;
default :
DEBUGASSERT(0);
break;
}
return cpu_id;
#else
return 0;
#endif
}
int riscv_cpuid_to_hartid(int cpu)
{
#ifdef CONFIG_SMP
int hart_id = -1;
switch(cpu) {
case 0: hart_id = 0; break;
case 1: hart_id = 2; break;
case 2: hart_id = 1; break;
default :
DEBUGASSERT(0);
break;
}
return hart_id;
#else
return up_cpu_index();
#endif
}
`
### Verification
- [x] I have verified before submitting the report.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscr...@nuttx.apache.org.apache.org
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org