* 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