arch: cxd56xx: Fix IRQ request handling in cxd56_cpupause.c

Summary:
- During Wi-Fi audio streaming test, I noticed data corruption in tcb
- Finally, I found an issue in IRQ request handing with IPI
- This commit fixes this issue

Impact:
- Affects SMP only

Testing:
- Tested with spresense:wifi_smp

Signed-off-by: Masayuki Ishikawa <Masayuki.Ishikawa@jp.sony.com>
This commit is contained in:
Masayuki Ishikawa 2020-10-08 12:54:32 +09:00 committed by Alin Jerpelea
parent c7865ddca3
commit bebc2d2405

View File

@ -210,6 +210,13 @@ bool up_cpu_pausereq(int cpu)
int up_cpu_paused(int cpu)
{
/* Fistly, check if this IPI is to enable/disable IRQ */
if (handle_irqreq(cpu))
{
return OK;
}
FAR struct tcb_s *tcb = this_task();
/* Update scheduler parameters */
@ -283,13 +290,6 @@ int arm_pause_handler(int irq, void *c, FAR void *arg)
putreg32(0, CXD56_CPU_P2_INT + (4 * cpu));
/* Check if this IPI is to enable/disable IRQ */
if (handle_irqreq(cpu))
{
return OK;
}
/* Check for false alarms. Such false could occur as a consequence of
* some deadlock breaking logic that might have already serviced the SG2
* interrupt by calling up_cpu_paused.