lkml.org 
[lkml]   [2006]   [Dec]   [3]   [last100]   RSS Feed
Views: [more markup]  [less markup]  [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
DateSun, 03 Dec 2006 10:46:33 +0200
FromAvi Kivity <>
SubjectRe: 2.6.19-rc6-mm2
Avi Kivity wrote:
> Andrew Morton wrote:
>> On Tue, 28 Nov 2006 19:24:45 -0500
>> Thomas Tuttle <thinkinginbinary@gmail.com> wrote:
>>
>> 
>>> I've found a couple of bugs so far...
>>>
>>> 1. I did `modprobe kvm' and then tried running a version of the KVM 
>>> Qemu
>>> compiled for a different kernel.  My mistake.  But I got an oops:
>>>
>>> BUG: unable to handle kernel NULL pointer dereference at virtual 
>>> address 00000008
>>> Code: 14 0f 87 77 02 00 00 8b 0c b5 00 15 20 f9 85 c9 0f 84 68 02 00 
>>> 00 89 ea 89 f8 ff d1 85 c0 0f 84 4c 02 00 00 89 f8 e8 31 e9 ff ff 
>>> <65> a1 08 00 00 00 8b 40 04 8b 40 08 a8 04 0f 85 ae 02 00 00 e8 
>>> EIP: [<f91f9c3f>] kvm_vmx_return+0xef/0x4d0 [kvm] SS:ESP 0068:e5a4fd54
>>>
>>> 
>
> 65 a1 08 00 00 00       mov    %gs:0x8,%eax
>
> kvm isn't restoring gs properly.
>
> I'll look into it.

This comes from the pda patches.

Does the attached patch fix it?


-- 
error compiling committee.c: too many arguments to function

diff -X /home/avi/kvm/linux-2.6/Documentation/dontdiff --exclude=Makefile -ru /home/avi/kvm/linux-2.6/drivers/kvm/kvm_main.c /home/avi/kvm-release/kernel/kvm_main.c
--- linux-2.6/drivers/kvm/kvm_main.c	2006-12-03 10:43:09.000000000 +0200
+++ linux-2.6/drivers/kvm/kvm_main.c	2006-12-03 10:42:36.000000000 +0200
@@ -90,6 +90,9 @@
 	typedef unsigned long ul;
 	unsigned long v;
 
+	if (selector == 0)
+	    return 0;
+
 	asm ("sgdt %0" : "=m"(gdt));
 	table_base = gdt.base;
 
diff -X /home/avi/kvm/linux-2.6/Documentation/dontdiff --exclude=Makefile -ru /home/avi/kvm/linux-2.6/drivers/kvm/vmx.c /home/avi/kvm-release/kernel/vmx.c
--- linux-2.6/drivers/kvm/vmx.c	2006-12-03 10:43:09.000000000 +0200
+++ linux-2.6/drivers/kvm/vmx.c	2006-12-03 10:41:44.000000000 +0200
@@ -1702,6 +1702,9 @@
 #ifdef __x86_64__
 	vmcs_writel(HOST_FS_BASE, read_msr(MSR_FS_BASE));
 	vmcs_writel(HOST_GS_BASE, read_msr(MSR_GS_BASE));
+#else
+	vmcs_writel(HOST_FS_BASE, segment_base(fs_sel));
+	vmcs_writel(HOST_GS_BASE, segment_base(gs_sel));
 #endif
 
 	if (vcpu->irq_summary &&
\
 
 \ /
  Last update: 2006-12-03 09:51    [from the cache]
©2003-2008