Skip to content

[BUG] hartid and cpuid mismatch for RISCV when CONFIG_ARCH_RV_CPUID_MAP is configured #19713

Description

@evolution124

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)))
  1. 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

qemu to run the rv64
qemu-system-riscv64 --version
QEMU emulator version 10.0.0
Copyright (c) 2003-2025 Fabrice Bellard and the QEMU Project developers

Verification

  • I have verified before submitting the report.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Arch: risc-vIssues related to the RISC-V (32-bit or 64-bit) architectureArea: KernelKernel issuesOS: LinuxIssues related to Linux (building system, etc)Type: BugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions