arch: k210: Fix the pause handler for SMP
Summary: - Apply the same logic added to cxd56_cpupause.c Impact: - SMP only Testing: - Tested with maix-bit:smp (QEMU) - Run smp and ostest Signed-off-by: Masayuki Ishikawa <Masayuki.Ishikawa@jp.sony.com>
This commit is contained in:
parent
42dea9edf9
commit
a500bd0238
@ -205,6 +205,7 @@ int up_cpu_paused(int cpu)
|
||||
int riscv_pause_handler(int irq, void *c, FAR void *arg)
|
||||
{
|
||||
int cpu = up_cpu_index();
|
||||
int ret = OK;
|
||||
|
||||
/* Clear machine software interrupt */
|
||||
|
||||
@ -217,10 +218,21 @@ int riscv_pause_handler(int irq, void *c, FAR void *arg)
|
||||
|
||||
if (spin_islocked(&g_cpu_paused[cpu]))
|
||||
{
|
||||
return up_cpu_paused(cpu);
|
||||
/* NOTE: up_cpu_paused() needs to be executed in a critical section
|
||||
* to ensure that this CPU holds g_cpu_irqlock. However, adding
|
||||
* a critical section in up_cpu_paused() is not a good idea,
|
||||
* because it is also called in enter_critical_section() to break
|
||||
* a deadlock
|
||||
*/
|
||||
|
||||
irqstate_t flags = enter_critical_section();
|
||||
|
||||
ret = up_cpu_paused(cpu);
|
||||
|
||||
leave_critical_section(flags);
|
||||
}
|
||||
|
||||
return OK;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
|
Loading…
Reference in New Issue
Block a user