Hi there, recently I'm digging on kvm source code and when I use the svm_decache_regs the kvm oops and throw out bug like this
--------------
BUG:unable to handle kernel NULL pointer dereference at 00000000000005f8
IP:[<ffffffff8022a8f6>]svm_decache_regs+0x2f/0x72
PGD 19c98067 PUD 1c8db067 PMD 0
Oops:0002 [1] SMP
--------------
My os is debian-lenny-507 and kernel version is 2.6.26-0.rc8 and cpuinfo is
vendor_id : AuthenticAMD
cpu family : 15
model : 107
model name : AMD Athlon(tm) Dual Core Processor 4850e
stepping : 2
cpu MHz : 2505.188
cache size : 512 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 2
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 1
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow rep_good nopl pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy 3dnowprefetch
the system is x86_64
------------------------------------------------------
Here is my dump of the svm_decache_regs
0xffffffff8022a8c7 <svm_decache_regs+0>: push %rbp
0xffffffff8022a8c8 <svm_decache_regs+1>: mov %rsp,%rbp
0xffffffff8022a8cb <svm_decache_regs+4>: sub $0x18,%rsp
0xffffffff8022a8cf <svm_decache_regs+8>: mov %rdi,-0x18(%rbp)
0xffffffff8022a8d3 <svm_decache_regs+12>: mov -0x18(%rbp),%rdi
0xffffffff8022a8d7 <svm_decache_regs+16>: callq 0xffffffff8022a2a0 <to_svm>
0xffffffff8022a8dc <svm_decache_regs+21>: mov %rax,-0x8(%rbp)
0xffffffff8022a8e0 <svm_decache_regs+25>: mov -0x8(%rbp),%rax
0xffffffff8022a8e4 <svm_decache_regs+29>: mov 0x1ca0(%rax),%rdx
0xffffffff8022a8eb <svm_decache_regs+36>: mov -0x18(%rbp),%rax
0xffffffff8022a8ef <svm_decache_regs+40>: mov 0x168(%rax),%rax
0xffffffff8022a8f6 <svm_decache_regs+47>: mov %rax,0x5f8(%rdx) ---> error step?
0xffffffff8022a8fd <svm_decache_regs+54>: mov -0x8(%rbp),%rax
0xffffffff8022a901 <svm_decache_regs+58>: mov 0x1ca0(%rax),%rdx
0xffffffff8022a908 <svm_decache_regs+65>: mov -0x18(%rbp),%rax
0xffffffff8022a90c <svm_decache_regs+69>: mov 0x188(%rax),%rax
0xffffffff8022a913 <svm_decache_regs+76>: mov %rax,0x5d8(%rdx)
0xffffffff8022a91a <svm_decache_regs+83>: mov -0x8(%rbp),%rax
0xffffffff8022a91e <svm_decache_regs+87>: mov 0x1ca0(%rax),%rdx
0xffffffff8022a925 <svm_decache_regs+94>: mov -0x18(%rbp),%rax
0xffffffff8022a929 <svm_decache_regs+98>: mov 0x1e8(%rax),%rax
0xffffffff8022a930 <svm_decache_regs+105>: mov %rax,0x578(%rdx)
0xffffffff8022a937 <svm_decache_regs+112>: leaveq
0xffffffff8022a938 <svm_decache_regs+113>: retq
AS I see before the BUG means %rax,0x5f8(%rdx) but this address 0x5f8(%rdx) access error.
----------------------------------------
MORE this is a piece of my function dump
0xffffffff8022bfa0 <handle_invalid_op+37>: callq 0xffffffff8022a2a0 <to_svm> ----> here to_svm(vcpu)
0xffffffff8022bfa5 <handle_invalid_op+42>: mov %rax,-0x8(%rbp)
0xffffffff8022bfa9 <handle_invalid_op+46>: mov -0x8(%rbp),%rax
0xffffffff8022bfad <handle_invalid_op+50>: mov 0x1ca0(%rax),%rdx
0xffffffff8022bfb4 <handle_invalid_op+57>: mov -0x20(%rbp),%rax
0xffffffff8022bfb8 <handle_invalid_op+61>: mov 0x168(%rax),%rax
0xffffffff8022bfbf <handle_invalid_op+68>: mov %rax,0x5f8(%rdx) ---->the error instruction, the 0x5f8(%rdx) address
0xffffffff8022bfc6 <handle_invalid_op+75>: mov -0x8(%rbp),%rax
0xffffffff8022bfca <handle_invalid_op+79>: mov 0x1ca0(%rax),%rdx
0xffffffff8022bfd1 <handle_invalid_op+86>: mov -0x20(%rbp),%rax
0xffffffff8022bfd5 <handle_invalid_op+90>: mov 0x1e8(%rax),%rax
0xffffffff8022bfdc <handle_invalid_op+97>: mov %rax,0x578(%rdx)
0xffffffff8022bfe3 <handle_invalid_op+104>: mov -0x20(%rbp),%rax
0xffffffff8022bfe7 <handle_invalid_op+108>: mov 0x1e8(%rax),%rax
0xffffffff8022bfee <handle_invalid_op+115>: cmp $0xffffffff8026103a,%rax
0xffffffff8022bff4 <handle_invalid_op+121>: jne 0xffffffff8022c06a <handle_invalid_op+239>
0xffffffff8022bff6 <handle_invalid_op+123>: mov $0xffffffff805f07a3,%rdi
static int handle_invalid_op(struct kvm_run *kvm_run, struct kvm_vcpu *vcpu)
{
struct vcpu_svm *svm = to_svm(vcpu);
do something
}
----------------------------------------
ADDON: my kvm startup command is:kvm -hda xxx -cdrom xxx -net nic,model=rtl8139,macaddress=11:11:11:11:11:11 -net tap,ifname=tap,script=xxx vnc xxxx -boot c
when I start the kvm and then it oops and a memory error like that.
---------------------------------------
Is anyone will check how svm_decache_regs works?