From mboxrd@z Thu Jan 1 00:00:00 1970 From: Aurelien Jarno Subject: cr3 OOS optimisation breaks 32-bit GNU/kFreeBSD guest Date: Mon, 23 Feb 2009 01:33:05 +0100 Message-ID: <20090223003305.GW12976@hall.aurel32.net> Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-15 Cc: Marcelo Tosatti To: kvm@vger.kernel.org Return-path: Received: from hall.aurel32.net ([88.191.82.174]:55806 "EHLO hall.aurel32.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750884AbZBWBS5 (ORCPT ); Sun, 22 Feb 2009 20:18:57 -0500 Content-Disposition: inline Sender: kvm-owner@vger.kernel.org List-ID: Hi, Since kvm-81, I have noticed that GNU/kFreeBSD 32-bit guest are crashing under high load (during a compilation for example) with the following error message: | Fatal trap 12: page fault while in kernel mode | fault virtual address = 0x4 | fault code = supervisor read, page not present | instruction pointer = 0x20:0xc0a4fc00 | stack pointer = 0x28:0xe66d7a70 | frame pointer = 0x28:0xe66d7a80 | code segment = base 0x0, limit 0xfffff, type 0x1b | = DPL 0, pres 1, def32 1, gran 1 | processor eflags = interrupt enabled, resume, IOPL = 0 | current process = 24037 (bash) | trap number = 12 | panic: page fault | Uptime: 4m7s | Cannot dump. No dump device defined. | Automatic reboot in 15 seconds - press a key on the console to abort I haven't tried yet with a plain FreeBSD guest, but I also expect it to crash given the kernel (version 7.1) is almost the same. A closer investigation has shown that the following commit is causing the problem: | commit 6364a3918cb5c28376849e7fca3e09bd66b859f3 | Author: Marcelo Tosatti | Date: Mon Dec 1 22:32:04 2008 -0200 | | KVM: MMU: skip global pgtables on sync due to cr3 switch | | Skip syncing global pages on cr3 switch (but not on cr4/cr0). This is | important for Linux 32-bit guests with PAE, where the kmap page is | marked as global. | | Signed-off-by: Marcelo Tosatti | Signed-off-by: Avi Kivity As expected, loading the KVM module with oos_shadow=0 workaround the problem. Please note that the guest is running in 32-bit mode, does not use PAE, and uses global pages. My host has an Intel Q9450 CPU, and the problem appears with both a 2.6.26 and a 2.6.28 64-bit kernel. Does anybody see any problem in this patch? How can I further debug the problem? Aurelien -- Aurelien Jarno GPG: 1024D/F1BCDB73 aurelien@aurel32.net http://www.aurel32.net