Guest is a 2.6.38-10-server x86_64 kernel with ubuntu patches applied (configured to have some set of modules built-in + debugging symbols + non-preemptive + HZ=100). I can provide the config file if necessary. Root fs contains a minimal 10.04 server.
Here is how I launch the VM:
$ qemu-system-x86_64 -s -m 512 -drive file="root1.qcow2" -kernel ../../linux-2.6.38/arch/x86/boot/bzImage -append " console=tty1 root=/dev/sda1 ro "
VM launches fine and drops to a login shell. Then I start gdb and connect to the server:
$ gdb ../../linux-2.6.38/vmlinux
{Init messages...}
Reading symbols from ../../linux-2.6.38/vmlinux...done.
(gdb) target remote :1234
Remote debugging using :1234
0xffffffff81076a0b in pvclock_clocksource_read (src=0xffffffff82201fd8) at arch/x86/kernel/pvclock.c:106
106 if ((valid_flags & PVCLOCK_TSC_STABLE_BIT) &&
(gdb)
At this point the VM is unresponsive. Then I set a breakpoint at schedule() (which should be called 100 times per second) and let the VM go.
(gdb) b schedule
Breakpoint 1 at 0xffffffff81b2b3f0: file kernel/sched.c, line 3946.
(gdb) c
Continuing.
I would expect the debugger to hit the breakpoint but it never does. VM is fully functional at this point. Then I pause the VM again with ctrl+c and print the stack trace:
^C
Program received signal SIGINT, Interrupt.
0xffffffff81076a0b in pvclock_clocksource_read (src=0xffffffff82201fd8) at arch/x86/kernel/pvclock.c:106
106 if ((valid_flags & PVCLOCK_TSC_STABLE_BIT) &&
(gdb) where
#0 0xffffffff81076a0b in pvclock_clocksource_read (src=0xffffffff82201fd8) at arch/x86/kernel/pvclock.c:106
#1 0xffffffff81053255 in arch_safe_halt () at /DOCS/nmc/linux-2.6.38/arch/x86/include/asm/paravirt.h:110
#2 default_idle () at arch/x86/kernel/process.c:391
#3 0xffffffff8104921b in cpu_idle () at arch/x86/kernel/process_64.c:139
#4 0xffffffff81ad9cce in device_irq_init (pdata=0xffffffff824cdfa0, chip=0xffffffff824c99c0) at drivers/mfd/88pm860x-core.c:508
#5 device_8607_init (chip=0xffffffff824c99c0, i2c=<optimized out>, pdata=0xffffffff824cdfa0) at drivers/mfd/88pm860x-core.c:682
#6 0xffffffff8247bc6f in start_kernel () at init/main.c:734
#7 0xffffffff8247b347 in x86_64_start_reservations (real_mode_data=<optimized out>) at arch/x86/kernel/head64.c:124
#8 0xffffffff8247b44d in x86_64_start_kernel (real_mode_data=0xffff88001fffb880 " console=tty1") at arch/x86/kernel/head64.c:94
#9 0x0000000000000000 in ?? ()
(gdb)
I see the same stack trace every single time I stop the VM; while sitting idle on the console, while running a busy-loop application, while doing net/disk IO. I also set other breakpoints at frequently executed kernel functions like do_timer() but the VM never stops at these breakpoints.
Please let me know if more information is necessary.
Guest is a 2.6.38-10-server x86_64 kernel with ubuntu patches applied (configured to have some set of modules built-in + debugging symbols + non-preemptive + HZ=100). I can provide the config file if necessary. Root fs contains a minimal 10.04 server.
Here is how I launch the VM: 2.6.38/ arch/x86/ boot/bzImage -append " console=tty1 root=/dev/sda1 ro "
$ qemu-system-x86_64 -s -m 512 -drive file="root1.qcow2" -kernel ../../linux-
VM launches fine and drops to a login shell. Then I start gdb and connect to the server: 2.6.38/ vmlinux 2.6.38/ vmlinux. ..done. clocksource_ read (src=0xffffffff 82201fd8) at arch/x86/ kernel/ pvclock. c:106 TSC_STABLE_ BIT) &&
$ gdb ../../linux-
{Init messages...}
Reading symbols from ../../linux-
(gdb) target remote :1234
Remote debugging using :1234
0xffffffff81076a0b in pvclock_
106 if ((valid_flags & PVCLOCK_
(gdb)
At this point the VM is unresponsive. Then I set a breakpoint at schedule() (which should be called 100 times per second) and let the VM go.
(gdb) b schedule
Breakpoint 1 at 0xffffffff81b2b3f0: file kernel/sched.c, line 3946.
(gdb) c
Continuing.
I would expect the debugger to hit the breakpoint but it never does. VM is fully functional at this point. Then I pause the VM again with ctrl+c and print the stack trace:
^C clocksource_ read (src=0xffffffff 82201fd8) at arch/x86/ kernel/ pvclock. c:106 TSC_STABLE_ BIT) && clocksource_ read (src=0xffffffff 82201fd8) at arch/x86/ kernel/ pvclock. c:106 linux-2. 6.38/arch/ x86/include/ asm/paravirt. h:110 kernel/ process. c:391 kernel/ process_ 64.c:139 0xffffffff824cd fa0, chip=0xffffffff 824c99c0) at drivers/ mfd/88pm860x- core.c: 508 f824c99c0, i2c=<optimized out>, pdata=0xfffffff f824cdfa0) at drivers/ mfd/88pm860x- core.c: 682 start_reservati ons (real_mode_ data=<optimized out>) at arch/x86/ kernel/ head64. c:124 data=0xffff8800 1fffb880 " console=tty1") at arch/x86/ kernel/ head64. c:94
Program received signal SIGINT, Interrupt.
0xffffffff81076a0b in pvclock_
106 if ((valid_flags & PVCLOCK_
(gdb) where
#0 0xffffffff81076a0b in pvclock_
#1 0xffffffff81053255 in arch_safe_halt () at /DOCS/nmc/
#2 default_idle () at arch/x86/
#3 0xffffffff8104921b in cpu_idle () at arch/x86/
#4 0xffffffff81ad9cce in device_irq_init (pdata=
#5 device_8607_init (chip=0xfffffff
#6 0xffffffff8247bc6f in start_kernel () at init/main.c:734
#7 0xffffffff8247b347 in x86_64_
#8 0xffffffff8247b44d in x86_64_start_kernel (real_mode_
#9 0x0000000000000000 in ?? ()
(gdb)
I see the same stack trace every single time I stop the VM; while sitting idle on the console, while running a busy-loop application, while doing net/disk IO. I also set other breakpoints at frequently executed kernel functions like do_timer() but the VM never stops at these breakpoints.
Please let me know if more information is necessary.