Hi!
I am working on a light-weight KVM userspace launcher for Linux and am
bit stuck with a guest Linux kernel restarting when it tries to enter
long mode.
The register dump looks like this:
penb...@tiger:~/vm$ ./kvm bzImage
KVM exit reason: 8 ("KVM_EXIT_SHUTDOWN")
Registers:
rip: 00000000001000ed rsp: 00000000005d54b8 flags: 0000000000010046
rax: 0000000080000001 rbx: 0000000001f2c000 rcx: 00000000c0000080
rdx: 0000000000000000 rsi: 0000000000013670 rdi: 0000000002408000
rbp: 0000000000100000 r8: 0000000000000000 r9: 0000000000000000
r10: 0000000000000000 r11: 0000000000000000 r12: 0000000000000000
r13: 0000000000000000 r14: 0000000000000000 r15: 0000000000000000
cr0: 0000000080000011 cr2: 00000000001000ed cr3: 0000000002402000
cr4: 0000000000000020 cr8: 0000000000000000
Segment registers:
register selector base limit type p dpl db s l g avl
cs 0010 0000000000000000 ffffffff 0b 1 0 1 1 0 1 0
ss 0018 0000000000000000 ffffffff 03 1 0 1 1 0 1 0
ds 0018 0000000000000000 ffffffff 03 1 0 1 1 0 1 0
es 0018 0000000000000000 ffffffff 03 1 0 1 1 0 1 0
fs 0018 0000000000000000 ffffffff 03 1 0 1 1 0 1 0
gs 0018 0000000000000000 ffffffff 03 1 0 1 1 0 1 0
tr 0020 0000000000001000 00000067 0b 1 0 0 0 0 0 0
ldt 0000 0000000000000000 ffffffff 00 0 0 0 0 0 0 0
[ efer: 0000000000000500 apic base: 0000000000000000 nmi: disabled ]
Interrupt bitmap:
0000000000000000 0000000000000000 0000000000000000 0000000000000000
Code: 08 49 75 f3 8d 83 00 60 4d 00 0f 22 d8 b9 80 00 00 c0 0f 32 0f
ba e8 08 0f 30 6a 10 8d 85 00 02 00 00 50 b8 01 00 00 80 0f 22 c0 <cb>
f4 eb fd 9c 6a 00 9d 9c 58 89 c3 35 00 00 20 00 50 9d 9c 58
Using Linux 'scripts/decodecode', we can see that we are at
startup_32() of arch/x86/boot/compressed/head_64.S:
All code
========
0: 08 49 75 or %cl,0x75(%rcx)
3: f3 8d 83 00 60 4d 00 repz lea 0x4d6000(%rbx),%eax
a: 0f 22 d8 mov %rax,%cr3
d: b9 80 00 00 c0 mov $0xc0000080,%ecx
12: 0f 32 rdmsr
14: 0f ba e8 08 bts $0x8,%eax
18: 0f 30 wrmsr
1a: 6a 10 pushq $0x10
1c: 8d 85 00 02 00 00 lea 0x200(%rbp),%eax
22: 50 push %rax
23: b8 01 00 00 80 mov $0x80000001,%eax
28: 0f 22 c0 mov %rax,%cr0
2b:* cb lret <-- trapping instruction
2c: f4 hlt
2d: eb fd jmp 0x2c
2f: 9c pushfq
30: 6a 00 pushq $0x0
32: 9d popfq
33: 9c pushfq
34: 58 pop %rax
35: 89 c3 mov %eax,%ebx
37: 35 00 00 20 00 xor $0x200000,%eax
3c: 50 push %rax
3d: 9d popfq
3e: 9c pushfq
3f: 58 pop %rax
I already asked Avi in private about this and he suggested I'd post a
register dump to the list. Please note that I am in no way ruling out
a bug in our fakebios "emulation" but my gut feeling is that I'm just
missing something obvious in the KVM setup.
For those that might be interested, source code to the launcher is
available here:
git clone git://github.com/penberg/vm.git
Launching a Linux kernel is as simple as:
make ; ./kvm bzImage
Pekka
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html