All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] x86_64 linux kernel doesn't boot with -icount enabled
@ 2011-11-08 13:45 Max Filippov
  2011-11-08 14:03 ` Max Filippov
                   ` (2 more replies)
  0 siblings, 3 replies; 16+ messages in thread
From: Max Filippov @ 2011-11-08 13:45 UTC (permalink / raw)
  To: qemu-devel

Hi.

I'm trying to run stock Debian 6.0 x86_64 kernel using qemu git head.
With the following command line it's ok (getting to rootfs mounting
and panics):

qemu-system-x86_64 -serial stdio -monitor null -nographic -kernel
/boot/vmlinuz-2.6.38-bpo.2-amd64 -append 'console=ttyS0 panic=1'

But once I add -icount option (have tried -icount 1, 2, 16, 256, auto,
the result is the same) qemu loops infinitely in the qemu_run_timers:

    for(;;) {
        ts = *ptimer_head;
        if (!qemu_timer_expired_ns(ts, current_time)) {
            break;
        }
        /* remove timer from the list before calling the callback */
        *ptimer_head = ts->next;
        ts->next = NULL;

        /* run the callback (the timer list can be modified) */
        ts->cb(ts->opaque);
    }

With ts being hpet timer and inside ts->cb that is hpet_timer,  diff =
hpet_calculate_diff(t, cur_tick) is always zero.
The following patch breaks the loop:

diff --git a/hw/hpet.c b/hw/hpet.c
index 12bd64d..eadec7b 100644
--- a/hw/hpet.c
+++ b/hw/hpet.c
@@ -297,13 +297,17 @@ static void hpet_timer(void *opaque)
             }
         }
         diff = hpet_calculate_diff(t, cur_tick);
-        qemu_mod_timer(t->qemu_timer,
-                       qemu_get_clock_ns(vm_clock) +
(int64_t)ticks_to_ns(diff));
+        if (diff) {
+            qemu_mod_timer(t->qemu_timer,
+                    qemu_get_clock_ns(vm_clock) + (int64_t)ticks_to_ns(diff));
+        }
     } else if (t->config & HPET_TN_32BIT && !timer_is_periodic(t)) {
         if (t->wrap_flag) {
             diff = hpet_calculate_diff(t, cur_tick);
-            qemu_mod_timer(t->qemu_timer, qemu_get_clock_ns(vm_clock) +
-                           (int64_t)ticks_to_ns(diff));
+            if (diff) {
+                qemu_mod_timer(t->qemu_timer, qemu_get_clock_ns(vm_clock) +
+                        (int64_t)ticks_to_ns(diff));
+            }
             t->wrap_flag = 0;
         }
     }


but with this patch applied qemu fails as follows:

[    0.000000] Console: colour VGA+ 80x25
[    0.000000] console [ttyS0] enabled
[    0.000000] Fast TSC calibration using PIT
[    0.000000] Detected 999.951 MHz processor.
[    0.000003] Calibrating delay loop (skipped), value calculated
using timer frequency.. 1999.90 BogoMIPS (lpj=3999804)
[    0.000039] pid_max: default: 32768 minimum: 301
[    0.000129] Security Framework initialized
[    0.000144] SELinux:  Disabled at boot.
[    0.000255] Dentry cache hash table entries: 16384 (order: 5, 131072 bytes)
[    0.000572] Inode-cache hash table entries: 8192 (order: 4, 65536 bytes)
[    0.000735] Mount-cache hash table entries: 256
[    0.001121] Initializing cgroup subsys ns
[    0.001136] ns_cgroup deprecated: consider using the
'clone_children' flag without the ns_cgroup.
[    0.001161] Initializing cgroup subsys cpuacct
[    0.001193] Initializing cgroup subsys devices
[    0.001208] Initializing cgroup subsys freezer
[    0.001224] Initializing cgroup subsys net_cls
[    0.001239] Initializing cgroup subsys blkio
[    0.001328] mce: CPU supports 10 MCE banks
[    0.001356] SMP alternatives: switching to UP code
[    0.008000] Freeing SMP alternatives: 16k freed
[    0.008000] ACPI: Core revision 20110112
[    0.008000] Setting APIC routing to flat
[    0.008000] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1
[    0.012000] ..MP-BIOS bug: 8254 timer not connected to IO-APIC
[    0.012000] ...trying to set up timer (IRQ0) through the 8259A ...
[    0.012000] ..... (found apic 0 pin 2) ...
[    0.016000] ....... failed.
[    0.016000] ...trying to set up timer as Virtual Wire IRQ...
Segmentation fault

b/o the following infinite recursion:

(gdb) bt
#0  0x081b9564 in clz32 (val=0) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/host-utils.h:53
#1  0x081b97c2 in fls_bit (value=65536) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/apic.c:121
#2  0x081ba16d in get_highest_priority_int (tab=0x89cec54) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/apic.c:346
#3  0x081ba275 in apic_irq_pending (s=0x89cdea8) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/apic.c:383
#4  0x081ba301 in apic_update_irq (s=0x89cdea8) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/apic.c:401
#5  0x081ba492 in apic_set_irq (s=0x89cdea8, vector_num=48,
trigger_mode=0) at /home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/apic.c:434
#6  0x081b9a77 in apic_local_deliver (s=0x89cdea8, vector=3) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/apic.c:182
#7  0x081b9acf in apic_deliver_pic_intr (d=0x89cdea8, level=1) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/apic.c:191
#8  0x081ba353 in apic_update_irq (s=0x89cdea8) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/apic.c:405
#9  0x081ba492 in apic_set_irq (s=0x89cdea8, vector_num=48,
trigger_mode=0) at /home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/apic.c:434
#10 0x081b9a77 in apic_local_deliver (s=0x89cdea8, vector=3) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/apic.c:182
#11 0x081b9acf in apic_deliver_pic_intr (d=0x89cdea8, level=1) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/apic.c:191
#12 0x081ba353 in apic_update_irq (s=0x89cdea8) at
/home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/apic.c:405
#13 0x081ba492 in apic_set_irq (s=0x89cdea8, vector_num=48,
trigger_mode=0) at /home/jcmvbkbc/ws/xtensa/qemu-xtensa/hw/apic.c:434
...

-- 
Thanks.
-- Max

^ permalink raw reply related	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2011-11-14  6:18 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-11-08 13:45 [Qemu-devel] x86_64 linux kernel doesn't boot with -icount enabled Max Filippov
2011-11-08 14:03 ` Max Filippov
2011-11-08 14:14 ` Paolo Bonzini
2011-11-08 14:21   ` Max Filippov
2011-11-08 15:52 ` Max Filippov
2011-11-09  9:41   ` Cao,Bing Bu
2011-11-09 10:42     ` Cao,Bing Bu
2011-11-09 10:50       ` Max Filippov
2011-11-10  2:54         ` Cao,Bing Bu
2011-11-10  9:05           ` Max Filippov
2011-11-10  9:15             ` Paolo Bonzini
2011-11-10 10:25               ` Max Filippov
2011-11-10 11:25                 ` Paolo Bonzini
2011-11-11  7:09                   ` [Qemu-devel] [PATCH] Give an error when using -icount option with kvm accelerator Cao,Bing Bu
2011-11-14  6:17                     ` Cao,Bing Bu
2011-11-13 21:57                   ` [Qemu-devel] x86_64 linux kernel doesn't boot with -icount enabled Benoît Canet

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.