qemu-devel
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]