diff --git a/src/arch/riscv/kernel/thread.c b/src/arch/riscv/kernel/thread.c index 1564ecf7a..01fb85897 100644 --- a/src/arch/riscv/kernel/thread.c +++ b/src/arch/riscv/kernel/thread.c @@ -16,6 +16,7 @@ * Copyright 2015, 2016 Hesham Almatary */ +#include #include #include #include @@ -36,7 +37,16 @@ BOOT_CODE void Arch_configureIdleThread(tcb_t *tcb) /* Enable interrupts and keep working in supervisor mode */ setRegister(tcb, SSTATUS, (word_t) SSTATUS_SPP | SSTATUS_SPIE); +#ifdef ENABLE_SMP_SUPPORT + for (int i = 0; i < CONFIG_MAX_NUM_NODES; i++) { + if (NODE_STATE_ON_CORE(ksIdleThread, i) == tcb) { + setRegister(tcb, SP, (word_t)kernel_stack_alloc + (i + 1) * BIT(CONFIG_KERNEL_STACK_BITS)); + break; + } + } +#else setRegister(tcb, SP, (word_t)kernel_stack_alloc + BIT(CONFIG_KERNEL_STACK_BITS)); +#endif } void Arch_switchToIdleThread(void)