blob: 103a13739748f83f41aa555d8d81e7ee2cf000e9 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
device: 0.886
graphic: 0.866
PID: 0.823
debug: 0.787
performance: 0.769
semantic: 0.726
vnc: 0.713
other: 0.692
network: 0.658
boot: 0.632
socket: 0.595
permissions: 0.587
files: 0.336
KVM: 0.244
qemu-system-ppc: extra IPI interrupt on core0
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:
1. 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);
}
2. 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**);
3. 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
|