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?