qemu-system-ppc: extra IPI interrupt on core0
Host environment
- Operating system: Linux
- OS/kernel version: Linux 5.8.0-40-generic #45 (closed)~20.04.1-Ubuntu SMP Fri Jan 15 11:35:04 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
- Architecture: x86_64
- QEMU flavor: qemu-system-ppc
- QEMU version: QEMU emulator version 6.1.0
- QEMU command line:
qemu-system-ppc -M ppce500 -cpu e500mc -smp 4 -m 2G -nographic -serial mon:stdio -kernel Myimage
Emulated/Virtualized environment
- Operating system: vxWroks/linux
- OS/kernel version: irrelevant
- Architecture: PowerPC
Description of problem
When I try to emit an IPI interrupt from core0 to another core via the MPIC controller(IPIDR1—Interprocessor interrupt dispatch register 1), core0 itself generates an unwanted IPI interrupt.
Steps to reproduce
-
Prepare ISR routine, something like:
void ipi_handler (void) { int core_id = CORE_ID_GET(); myprintf("\n IPI interrupt triggered on core:%d\n",core_id); }
-
Create a task and bind it to core0. This task is mainly to write the MPIC controller to emit IPI interrupts to other cores. MPIC_REG_WRITE(MPIC_BASE + IPIDR1, 0xe);
-
run the test task
Additional information
/* Below test was tested on Qemu6.1 */
IPI interrupts are emitted by core:0
IPI interrupt triggered on core:0 /* it's a bug, it should not trigger on core 0. */
IPI interrupt triggered on core:1
IPI interrupt triggered on core:2
IPI interrupt triggered on core:3
This bug only occurs when "emitting an IPIDR1 interrupt from core0".
/* Below test was tested on real board(fsl_p4080ds) */
IPI interrupts are emitted by core:0
IPI interrupt triggered on core:1
IPI interrupt triggered on core:2
IPI interrupt triggered on core:3