public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
* KVM kernel oops when changing guest OS resolution to 1024x768
@ 2007-06-07 19:06 Daniel Paquet
       [not found] ` <16bf1df90706071206x7faec689x161b16968337190a-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
  0 siblings, 1 reply; 2+ messages in thread
From: Daniel Paquet @ 2007-06-07 19:06 UTC (permalink / raw)
  To: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f


[-- Attachment #1.1: Type: text/plain, Size: 5106 bytes --]

Hello!

So here it is, im getting a kernel error when I try to go to a 1024:768
resolution or higher on my XP guest OS.

I have kvm-27

my kernel is a vanilla 2.6.21.3

im running debian sid
My cpu is a Intel(R) Core(TM)2 CPU         T7200  @ 2.00GHz

So here is the nasty log from the kernel


Jun  7 14:54:43 localhost kernel: kernel BUG at
/usr/local/src/kvm-27/kernel/mmu.c:276!
Jun  7 14:54:43 localhost kernel: invalid opcode: 0000 [#1]
Jun  7 14:54:43 localhost kernel: SMP
Jun  7 14:54:43 localhost kernel: Modules linked in: xt_limit xt_tcpudp
nf_nat_irc nf_nat_ftp ipt_LOG ipt_MASQUERADE ipt_TOS ipt_REJECT
nf_conntrack_irc nf_conntrack_ftp xt_state iptable_mangle iptable_filter
iptable_nat ip_tables x_tables nf_conntrack_ipv4 nf_nat nf_conntrack rfcomm
l2cap ppdev lp button ac battery ipv6 nls_iso8859_1 ntfs dm_snapshot
dm_mirror dm_mod tun kvm_intel kvm sbp2 loop snd_hda_intel joydev
snd_hda_codec snd_pcm_oss snd_mixer_oss pcmcia snd_pcm tsdev snd_timer
ipw3945 intel_agp sdhci usb_storage hci_usb agpgart usbhid snd bluetooth
ieee80211 ieee80211_crypt iTCO_wdt rtc parport_pc parport mmc_core soundcore
snd_page_alloc serio_raw psmouse yenta_socket rsrc_nonstatic pcmcia_core
pcspkr firmware_class evdev ext3 jbd mbcache ide_cd cdrom ata_piix sd_mod
ata_generic ehci_hcd uhci_hcd ohci1394 ieee1394 ahci piix generic ide_core
usbcore tg3 thermal processor fan
Jun  7 14:54:43 localhost kernel: CPU:    1
Jun  7 14:54:43 localhost kernel: EIP:    0060:[<f8aec7be>]    Not tainted
VLI
Jun  7 14:54:43 localhost kernel: EFLAGS: 00210246   (2.6.21.3 #1)
Jun  7 14:54:43 localhost kernel: EIP is at mmu_memory_cache_alloc+0xd/0x36
[kvm]
Jun  7 14:54:43 localhost kernel: eax: 00000000   ebx: 00000000   ecx:
d1b092a4   edx: 0000002c
Jun  7 14:54:43 localhost kernel: esi: 00000322   edi: d1b08dc0   ebp:
0000a34a   esp: ca885c6c
Jun  7 14:54:43 localhost kernel: ds: 007b   es: 007b   fs: 00d8  gs: 0000
ss: 0068
Jun  7 14:54:43 localhost kernel: Process kvm (pid: 7814, ti=ca884000
task=c9a12a50 task.ti=ca884000)
Jun  7 14:54:43 localhost kernel: Stack: f8ae90e1 00000000 d1b08dc0 f8aed009
d1b09098 00000000 0000b7be c1a48fe0
Jun  7 14:54:43 localhost kernel:        d1b09098 0000a34a 00000018 c0000000
f8aed211 00000002 00000000 00000000
Jun  7 14:54:43 localhost kernel:        00000000 00000003 d1b09098 0000a34a
00000003 00000003 f8aed2dd d1b09098
Jun  7 14:54:43 localhost kernel: Call Trace:
Jun  7 14:54:43 localhost kernel:  [<f8ae90e1>] gfn_to_page+0x14/0x27 [kvm]
Jun  7 14:54:43 localhost kernel:  [<f8aed009>] kvm_mmu_get_page+0x1b2/0x328
[kvm]
Jun  7 14:54:43 localhost kernel:  [<f8aed211>] mmu_alloc_roots+0x92/0xed
[kvm]
Jun  7 14:54:43 localhost kernel:  [<f8aed2dd>] paging_new_cr3+0x21/0x48
[kvm]
Jun  7 14:54:43 localhost kernel:  [<f8ae9a6f>] set_cr3+0x7f/0x88 [kvm]
Jun  7 14:54:43 localhost kernel:  [<f897034c>] handle_cr+0xe3/0x20f
[kvm_intel]
Jun  7 14:54:43 localhost kernel:  [<f896fdfb>] vmx_vcpu_run+0x52d/0x631
[kvm_intel]
Jun  7 14:54:43 localhost kernel:  [<c01198f7>] __activate_task+0x1c/0x29
Jun  7 14:54:43 localhost kernel:  [<f8aeb3d1>] kvm_vcpu_ioctl+0x0/0xccd
[kvm]
Jun  7 14:54:43 localhost kernel:  [<f8aeb659>] kvm_vcpu_ioctl+0x288/0xccd
[kvm]
Jun  7 14:54:43 localhost kernel:  [<c0128dde>] __sigqueue_alloc+0x33/0x59
Jun  7 14:54:43 localhost kernel:  [<c0129316>]
__group_send_sig_info+0x74/0x7f
Jun  7 14:54:43 localhost kernel:  [<c0129998>]
group_send_sig_info+0x4e/0x56
Jun  7 14:54:43 localhost kernel:  [<c0129f32>]
send_group_sig_info+0x1e/0x29
Jun  7 14:54:43 localhost kernel:  [<c0123b89>] it_real_fn+0x0/0x17
Jun  7 14:54:43 localhost kernel:  [<c0123b9b>] it_real_fn+0x12/0x17
Jun  7 14:54:43 localhost kernel:  [<c0132b6d>]
hrtimer_run_queues+0x101/0x144
Jun  7 14:54:43 localhost kernel:  [<c014c172>] free_pages_bulk+0x95/0x19e
Jun  7 14:54:43 localhost kernel:  [<c016cf37>] core_sys_select+0x1ce/0x2a2
Jun  7 14:54:43 localhost kernel:  [<c0108580>]
convert_fxsr_to_user+0xe2/0x135
Jun  7 14:54:43 localhost kernel:  [<c01088dd>] save_i387+0x118/0x12a
Jun  7 14:54:43 localhost kernel:  [<c01030f1>] setup_sigcontext+0x105/0x189
Jun  7 14:54:43 localhost kernel:  [<c010389b>] do_notify_resume+0x4d6/0x5cc
Jun  7 14:54:43 localhost kernel:  [<c0129998>]
group_send_sig_info+0x4e/0x56
Jun  7 14:54:43 localhost kernel:  [<c0132b6d>]
hrtimer_run_queues+0x101/0x144
Jun  7 14:54:43 localhost kernel:  [<f8aeb3d1>] kvm_vcpu_ioctl+0x0/0xccd
[kvm]
Jun  7 14:54:43 localhost kernel:  [<c016be67>] do_ioctl+0x1f/0x62
Jun  7 14:54:43 localhost kernel:  [<c016c0ee>] vfs_ioctl+0x244/0x256
Jun  7 14:54:43 localhost kernel:  [<c016c14c>] sys_ioctl+0x4c/0x64
Jun  7 14:54:43 localhost kernel:  [<c0103c84>] sysenter_past_esp+0x5d/0x81
Jun  7 14:54:43 localhost kernel:  =======================
Jun  7 14:54:43 localhost kernel: Code: 01 00 00 e8 ce ff ff ff 8d 83 b8 01
00 00 81 c3 0c 02 00 00 e8 bd ff ff ff 89 d8 5b eb b8 57 89 c1 53 83 ec 04
8b 00 85 c0 75 04 <0f> 0b eb fe 48 8b 5c 81 04 89 01 89 d1 31 c0 c1 e9 02 89
df f3
Jun  7 14:54:43 localhost kernel: EIP: [<f8aec7be>]
mmu_memory_cache_alloc+0xd/0x36 [kvm] SS:ESP 0068:ca885c6c

[-- Attachment #1.2: Type: text/html, Size: 6257 bytes --]

[-- Attachment #2: Type: text/plain, Size: 286 bytes --]

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/

[-- Attachment #3: Type: text/plain, Size: 186 bytes --]

_______________________________________________
kvm-devel mailing list
kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
https://lists.sourceforge.net/lists/listinfo/kvm-devel

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: KVM kernel oops when changing guest OS resolution to 1024x768
       [not found] ` <16bf1df90706071206x7faec689x161b16968337190a-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
@ 2007-06-10  7:52   ` Avi Kivity
  0 siblings, 0 replies; 2+ messages in thread
From: Avi Kivity @ 2007-06-10  7:52 UTC (permalink / raw)
  To: Daniel Paquet; +Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f

[-- Attachment #1: Type: text/plain, Size: 350 bytes --]

Daniel Paquet wrote:
> Hello!
>
> So here it is, im getting a kernel error when I try to go to a 
> 1024:768 resolution or higher on my XP guest OS.
>
> Jun  7 14:54:43 localhost kernel: kernel BUG at 
> /usr/local/src/kvm-27/kernel/mmu.c:276!


Known issue. Try the attached patch.


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


[-- Attachment #2: kvm-fix-oops-on-guest-context-switch.patch --]
[-- Type: text/x-patch, Size: 4551 bytes --]

diff --git a/drivers/kvm/kvm.h b/drivers/kvm/kvm.h
index 0632d0b..0fdd5a6 100644
--- a/drivers/kvm/kvm.h
+++ b/drivers/kvm/kvm.h
@@ -543,6 +543,8 @@ void kvm_mmu_pte_write(struct kvm_vcpu *vcpu, gpa_t gpa,
 		       const u8 *old, const u8 *new, int bytes);
 int kvm_mmu_unprotect_page_virt(struct kvm_vcpu *vcpu, gva_t gva);
 void kvm_mmu_free_some_pages(struct kvm_vcpu *vcpu);
+int kvm_mmu_load(struct kvm_vcpu *vcpu);
+void kvm_mmu_unload(struct kvm_vcpu *vcpu);
 
 int kvm_hypercall(struct kvm_vcpu *vcpu, struct kvm_run *run);
 
@@ -554,6 +556,14 @@ static inline int kvm_mmu_page_fault(struct kvm_vcpu *vcpu, gva_t gva,
 	return vcpu->mmu.page_fault(vcpu, gva, error_code);
 }
 
+static inline int kvm_mmu_reload(struct kvm_vcpu *vcpu)
+{
+	if (likely(vcpu->mmu.root_hpa != INVALID_PAGE))
+		return 0;
+
+	return kvm_mmu_load(vcpu);
+}
+
 static inline int is_long_mode(struct kvm_vcpu *vcpu)
 {
 #ifdef CONFIG_X86_64
diff --git a/drivers/kvm/kvm_main.c b/drivers/kvm/kvm_main.c
diff --git a/drivers/kvm/mmu.c b/drivers/kvm/mmu.c
index 283df03..5915d7a 100644
--- a/drivers/kvm/mmu.c
+++ b/drivers/kvm/mmu.c
@@ -949,9 +949,7 @@ static int nonpaging_init_context(struct kvm_vcpu *vcpu)
 	context->free = nonpaging_free;
 	context->root_level = 0;
 	context->shadow_root_level = PT32E_ROOT_LEVEL;
-	mmu_alloc_roots(vcpu);
-	ASSERT(VALID_PAGE(context->root_hpa));
-	kvm_arch_ops->set_cr3(vcpu, context->root_hpa);
+	context->root_hpa = INVALID_PAGE;
 	return 0;
 }
 
@@ -965,11 +963,6 @@ static void paging_new_cr3(struct kvm_vcpu *vcpu)
 {
 	pgprintk("%s: cr3 %lx\n", __FUNCTION__, vcpu->cr3);
 	mmu_free_roots(vcpu);
-	if (unlikely(vcpu->kvm->n_free_mmu_pages < KVM_MIN_FREE_MMU_PAGES))
-		kvm_mmu_free_some_pages(vcpu);
-	mmu_alloc_roots(vcpu);
-	kvm_mmu_flush_tlb(vcpu);
-	kvm_arch_ops->set_cr3(vcpu, vcpu->mmu.root_hpa);
 }
 
 static void inject_page_fault(struct kvm_vcpu *vcpu,
@@ -1003,10 +996,7 @@ static int paging64_init_context_common(struct kvm_vcpu *vcpu, int level)
 	context->free = paging_free;
 	context->root_level = level;
 	context->shadow_root_level = level;
-	mmu_alloc_roots(vcpu);
-	ASSERT(VALID_PAGE(context->root_hpa));
-	kvm_arch_ops->set_cr3(vcpu, context->root_hpa |
-		    (vcpu->cr3 & (CR3_PCD_MASK | CR3_WPT_MASK)));
+	context->root_hpa = INVALID_PAGE;
 	return 0;
 }
 
@@ -1025,10 +1015,7 @@ static int paging32_init_context(struct kvm_vcpu *vcpu)
 	context->free = paging_free;
 	context->root_level = PT32_ROOT_LEVEL;
 	context->shadow_root_level = PT32E_ROOT_LEVEL;
-	mmu_alloc_roots(vcpu);
-	ASSERT(VALID_PAGE(context->root_hpa));
-	kvm_arch_ops->set_cr3(vcpu, context->root_hpa |
-		    (vcpu->cr3 & (CR3_PCD_MASK | CR3_WPT_MASK)));
+	context->root_hpa = INVALID_PAGE;
 	return 0;
 }
 
@@ -1042,7 +1029,6 @@ static int init_kvm_mmu(struct kvm_vcpu *vcpu)
 	ASSERT(vcpu);
 	ASSERT(!VALID_PAGE(vcpu->mmu.root_hpa));
 
-	mmu_topup_memory_caches(vcpu);
 	if (!is_paging(vcpu))
 		return nonpaging_init_context(vcpu);
 	else if (is_long_mode(vcpu))
@@ -1064,16 +1050,31 @@ static void destroy_kvm_mmu(struct kvm_vcpu *vcpu)
 
 int kvm_mmu_reset_context(struct kvm_vcpu *vcpu)
 {
+	destroy_kvm_mmu(vcpu);
+	return init_kvm_mmu(vcpu);
+}
+
+int kvm_mmu_load(struct kvm_vcpu *vcpu)
+{
 	int r;
 
-	destroy_kvm_mmu(vcpu);
-	r = init_kvm_mmu(vcpu);
-	if (r < 0)
-		goto out;
+	spin_lock(&vcpu->kvm->lock);
 	r = mmu_topup_memory_caches(vcpu);
+	if (r)
+		goto out;
+	mmu_alloc_roots(vcpu);
+	kvm_arch_ops->set_cr3(vcpu, vcpu->mmu.root_hpa);
+	kvm_mmu_flush_tlb(vcpu);
 out:
+	spin_unlock(&vcpu->kvm->lock);
 	return r;
 }
+EXPORT_SYMBOL_GPL(kvm_mmu_load);
+
+void kvm_mmu_unload(struct kvm_vcpu *vcpu)
+{
+	mmu_free_roots(vcpu);
+}
 
 static void mmu_pte_write_zap_pte(struct kvm_vcpu *vcpu,
 				  struct kvm_mmu_page *page,
diff --git a/drivers/kvm/paging_tmpl.h b/drivers/kvm/paging_tmpl.h
diff --git a/drivers/kvm/svm.c b/drivers/kvm/svm.c
index b621403..ed33f59 100644
--- a/drivers/kvm/svm.c
+++ b/drivers/kvm/svm.c
@@ -1482,6 +1482,10 @@ static int svm_vcpu_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
 	int r;
 
 again:
+	r = kvm_mmu_reload(vcpu);
+	if (unlikely(r))
+		return r;
+
 	if (!vcpu->mmio_read_completed)
 		do_interrupt_requests(vcpu, kvm_run);
 
diff --git a/drivers/kvm/vmx.c b/drivers/kvm/vmx.c
index 09e3609..a499989 100644
--- a/drivers/kvm/vmx.c
+++ b/drivers/kvm/vmx.c
@@ -1987,6 +1987,10 @@ again:
 	vmx_save_host_state(vcpu);
 	kvm_load_guest_fpu(vcpu);
 
+	r = kvm_mmu_reload(vcpu);
+	if (unlikely(r))
+		goto out;
+
 	/*
 	 * Loading guest fpu may have cleared host cr0.ts
 	 */

[-- Attachment #3: Type: text/plain, Size: 286 bytes --]

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/

[-- Attachment #4: Type: text/plain, Size: 186 bytes --]

_______________________________________________
kvm-devel mailing list
kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
https://lists.sourceforge.net/lists/listinfo/kvm-devel

^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2007-06-10  7:52 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-06-07 19:06 KVM kernel oops when changing guest OS resolution to 1024x768 Daniel Paquet
     [not found] ` <16bf1df90706071206x7faec689x161b16968337190a-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2007-06-10  7:52   ` Avi Kivity

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox