[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] odd calls to apic_set_irq on x86_64 startup
From: |
Max Filippov |
Subject: |
[Qemu-devel] odd calls to apic_set_irq on x86_64 startup |
Date: |
Mon, 14 Nov 2011 18:54:56 +0300 |
Hi.
During qemu-system-x86_64 startup there are odd calls to apic_set_irq
with vector_num=0.
I observe the following call sequence: PIT reset
Breakpoint 1, apic_set_irq (s=0x89e3e18, vector_num=0, trigger_mode=0)
at /home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/apic.c:424
424 {
(gdb) bt
#0 apic_set_irq (s=0x89e3e18, vector_num=0, trigger_mode=0) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/apic.c:424
#1 0x081cd717 in apic_local_deliver (s=0x89e3e18, vector=3) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/apic.c:182
#2 0x081cd76f in apic_deliver_pic_intr (d=0x89e3e18, level=1) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/apic.c:191
#3 0x08285846 in pic_irq_request (opaque=0x0, irq=0, level=1) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/pc.c:177
#4 0x080b4b06 in qemu_set_irq (irq=0x89e9338, level=1) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/irq.c:38
#5 0x080ea926 in qemu_irq_raise (irq=0x89e9338) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/irq.h:12
#6 0x080eaafe in pic_update_irq (s=0x8a31a90) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/i8259.c:136
#7 0x080eac3a in pic_set_irq (opaque=0x8a31a90, irq=0, level=1) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/i8259.c:189
#8 0x080b4b06 in qemu_set_irq (irq=0x89e9390, level=1) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/irq.c:38
#9 0x0828551d in gsi_handler (opaque=0x89ea9d0, n=0, level=1) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/pc.c:97
#10 0x080b4b06 in qemu_set_irq (irq=0x89ee9a0, level=1) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/irq.c:38
#11 0x080ea3f8 in pit_irq_timer_update (s=0x8a34fc4, current_time=0)
at /home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/i8254.c:385
#12 0x080e9f27 in pit_load_count (s=0x8a34fc4, val=65536) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/i8254.c:246
#13 0x080ea6df in pit_reset (dev=0x8a34ee0) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/i8254.c:484
#14 0x08164f94 in qdev_reset_one (dev=0x8a34ee0, opaque=0x0) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/qdev.c:334
#15 0x081657d1 in qdev_walk_children (dev=0x8a34ee0, devfn=0x8164f59
<qdev_reset_one>, busfn=0x8164fe3 <qbus_reset_one>, opaque=0x0)
at /home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/qdev.c:530
#16 0x0816575b in qbus_walk_children (bus=0x8a343e0, devfn=0x8164f59
<qdev_reset_one>, busfn=0x8164fe3 <qbus_reset_one>, opaque=0x0)
at /home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/qdev.c:514
#17 0x0816580a in qdev_walk_children (dev=0x8a33c80, devfn=0x8164f59
<qdev_reset_one>, busfn=0x8164fe3 <qbus_reset_one>, opaque=0x0)
at /home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/qdev.c:537
#18 0x08165072 in qdev_reset_all (dev=0x8a33c80) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/qdev.c:358
#19 0x0810c4b9 in pci_device_reset (dev=0x8a33c80) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/pci.c:165
#20 0x0810c6ec in pci_bus_reset (bus=0x89ef8c0) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/pci.c:209
#21 0x0810c735 in pcibus_reset (qbus=0x89ef8c0) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/pci.c:216
#22 0x0816501e in qbus_reset_one (bus=0x89ef8c0, opaque=0x0) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/qdev.c:351
#23 0x08165722 in qbus_walk_children (bus=0x89ef8c0, devfn=0x8164f59
<qdev_reset_one>, busfn=0x8164fe3 <qbus_reset_one>, opaque=0x0)
at /home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/qdev.c:507
#24 0x0816580a in qdev_walk_children (dev=0x89eeac8, devfn=0x8164f59
<qdev_reset_one>, busfn=0x8164fe3 <qbus_reset_one>, opaque=0x0)
at /home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/qdev.c:537
#25 0x0816575b in qbus_walk_children (bus=0x89e3dd8, devfn=0x8164f59
<qdev_reset_one>, busfn=0x8164fe3 <qbus_reset_one>, opaque=0x0)
at /home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/qdev.c:514
#26 0x081650c5 in qbus_reset_all_fn (opaque=0x89e3dd8) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/qdev.c:364
#27 0x0813c88a in qemu_system_reset (report=false) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/vl.c:1381
#28 0x08141bfa in main (argc=6, argv=0xffffd814, envp=0xffffd830) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/vl.c:3462
then PIC reset
Breakpoint 2, apic_set_irq (s=0x89e3e18, vector_num=0, trigger_mode=0)
at /home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/apic.c:424
424 {
(gdb) bt
#0 apic_set_irq (s=0x89e3e18, vector_num=0, trigger_mode=0) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/apic.c:424
#1 0x081cd717 in apic_local_deliver (s=0x89e3e18, vector=3) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/apic.c:182
#2 0x081cd76f in apic_deliver_pic_intr (d=0x89e3e18, level=1) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/apic.c:191
#3 0x08285846 in pic_irq_request (opaque=0x0, irq=0, level=1) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/pc.c:177
#4 0x080b4b06 in qemu_set_irq (irq=0x89e9338, level=1) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/irq.c:38
#5 0x080ea926 in qemu_irq_raise (irq=0x89e9338) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/irq.h:12
#6 0x080eaafe in pic_update_irq (s=0x8a31a90) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/i8259.c:136
#7 0x080eac3a in pic_set_irq (opaque=0x8a31a90, irq=2, level=0) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/i8259.c:189
#8 0x080b4b06 in qemu_set_irq (irq=0x89e93a8, level=0) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/irq.c:38
#9 0x080ea963 in qemu_irq_lower (irq=0x89e93a8) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/irq.h:17
#10 0x080eab0e in pic_update_irq (s=0x8a348a0) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/i8259.c:138
#11 0x080eae74 in pic_init_reset (s=0x8a348a0) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/i8259.c:267
#12 0x080eaeb5 in pic_reset (dev=0x8a348a0) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/i8259.c:274
#13 0x08164f94 in qdev_reset_one (dev=0x8a348a0, opaque=0x0) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/qdev.c:334
#14 0x081657d1 in qdev_walk_children (dev=0x8a348a0, devfn=0x8164f59
<qdev_reset_one>, busfn=0x8164fe3 <qbus_reset_one>, opaque=0x0)
at /home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/qdev.c:530
#15 0x0816575b in qbus_walk_children (bus=0x8a343e0, devfn=0x8164f59
<qdev_reset_one>, busfn=0x8164fe3 <qbus_reset_one>, opaque=0x0)
at /home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/qdev.c:514
#16 0x0816580a in qdev_walk_children (dev=0x8a33c80, devfn=0x8164f59
<qdev_reset_one>, busfn=0x8164fe3 <qbus_reset_one>, opaque=0x0)
at /home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/qdev.c:537
#17 0x08165072 in qdev_reset_all (dev=0x8a33c80) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/qdev.c:358
#18 0x0810c4b9 in pci_device_reset (dev=0x8a33c80) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/pci.c:165
#19 0x0810c6ec in pci_bus_reset (bus=0x89ef8c0) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/pci.c:209
#20 0x0810c735 in pcibus_reset (qbus=0x89ef8c0) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/pci.c:216
#21 0x0816501e in qbus_reset_one (bus=0x89ef8c0, opaque=0x0) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/qdev.c:351
#22 0x08165722 in qbus_walk_children (bus=0x89ef8c0, devfn=0x8164f59
<qdev_reset_one>, busfn=0x8164fe3 <qbus_reset_one>, opaque=0x0)
at /home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/qdev.c:507
#23 0x0816580a in qdev_walk_children (dev=0x89eeac8, devfn=0x8164f59
<qdev_reset_one>, busfn=0x8164fe3 <qbus_reset_one>, opaque=0x0)
at /home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/qdev.c:537
#24 0x0816575b in qbus_walk_children (bus=0x89e3dd8, devfn=0x8164f59
<qdev_reset_one>, busfn=0x8164fe3 <qbus_reset_one>, opaque=0x0)
at /home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/qdev.c:514
#25 0x081650c5 in qbus_reset_all_fn (opaque=0x89e3dd8) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/qdev.c:364
#26 0x0813c88a in qemu_system_reset (report=false) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/vl.c:1381
#27 0x08141bfa in main (argc=6, argv=0xffffd814, envp=0xffffd830) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/vl.c:3462
and then APIC reset
Breakpoint 3, apic_reset (d=0x89e3e18) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/apic.c:963
963 {
(gdb) bt
#0 apic_reset (d=0x89e3e18) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/apic.c:963
#1 0x08164f94 in qdev_reset_one (dev=0x89e3e18, opaque=0x0) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/qdev.c:334
#2 0x081657d1 in qdev_walk_children (dev=0x89e3e18, devfn=0x8164f59
<qdev_reset_one>, busfn=0x8164fe3 <qbus_reset_one>, opaque=0x0)
at /home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/qdev.c:530
#3 0x0816575b in qbus_walk_children (bus=0x89e3dd8, devfn=0x8164f59
<qdev_reset_one>, busfn=0x8164fe3 <qbus_reset_one>, opaque=0x0)
at /home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/qdev.c:514
#4 0x081650c5 in qbus_reset_all_fn (opaque=0x89e3dd8) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/qdev.c:364
#5 0x0813c88a in qemu_system_reset (report=false) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/vl.c:1381
#6 0x08141bfa in main (argc=6, argv=0xffffd814, envp=0xffffd830) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/vl.c:3462
I see that it happens in one loop. However the order is important
here: if APIC is not reset last then spurious interrupt is delivered.
The question is the following: what guarantees that the APIC will be reset last?
With current qemu wrong reset order has the following side effect for me:
[ 0.225110] Performance Events: AMD PMU driver.
[ 0.228504] ... version: 0
[ 0.228950] ... bit width: 48
[ 0.229376] ... generic registers: 4
[ 0.230000] ... value mask: 0000ffffffffffff
[ 0.230141] ... max period: 00007fffffffffff
[ 0.230655] ... fixed-purpose events: 0
[ 0.231091] ... event mask: 000000000000000f
[ 0.240822] SMP alternatives: switching to UP code
[ 0.580000] Freeing SMP alternatives: 16k freed
[ 0.588768] ACPI: Core revision 20100702
[ 0.799949] Setting APIC routing to flat
[ 1.812234] ------------[ cut here ]------------
[ 1.816885] WARNING: at arch/x86/kernel/apic/apic.c:1238
setup_local_APIC+0x18f/0x285()
[ 1.817855] Hardware name: Bochs
[ 1.818452] Modules linked in:
[ 1.821957] Pid: 1, comm: swapper Not tainted 2.6.36.2-cosim.4 #3
[ 1.822811] Call Trace:
[ 1.825945] [<ffffffff81037da7>] warn_slowpath_common+0x80/0x98
[ 1.826835] [<ffffffff81037dd4>] warn_slowpath_null+0x15/0x17
[ 1.827463] [<ffffffff812d6ce3>] setup_local_APIC+0x18f/0x285
[ 1.828125] [<ffffffff8166b84f>] native_smp_prepare_cpus+0x2b1/0x388
[ 1.828808] [<ffffffff816615c2>] kernel_init+0x79/0x1e5
[ 1.829387] [<ffffffff81003734>] kernel_thread_helper+0x4/0x10
[ 1.830000] [<ffffffff81661549>] ? kernel_init+0x0/0x1e5
[ 1.830000] [<ffffffff81003730>] ? kernel_thread_helper+0x0/0x10
[ 1.838868] ---[ end trace 4eaa2a86a8e2da22 ]---
And there's a number of bug reports with the similar symptoms, e.g.
http://comments.gmane.org/gmane.comp.emulators.kvm.devel/57940
--
Thanks.
-- Max
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Qemu-devel] odd calls to apic_set_irq on x86_64 startup,
Max Filippov <=