WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] patch x86-xen-disable-highmem-pte-allocation-even-when-confi

To: ian.campbell@xxxxxxxxxx, gregkh@xxxxxxx, hpa@xxxxxxxxx, jeremy@xxxxxxxx, mingo@xxxxxxx, pasik@xxxxxx, xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] patch x86-xen-disable-highmem-pte-allocation-even-when-config_highpte-y.patch added to 2.6.33-stable tree
From: <gregkh@xxxxxxx>
Date: Thu, 11 Mar 2010 11:32:29 -0800
Cc: stable@xxxxxxxxxx, stable-commits@xxxxxxxxxxxxxxx
Delivery-date: Thu, 11 Mar 2010 18:51:03 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
This is a note to let you know that we have just queued up the patch titled

    Subject: x86, xen: Disable highmem PTE allocation even when CONFIG_HIGHPTE=y

to the 2.6.33-stable tree.  Its filename is

    x86-xen-disable-highmem-pte-allocation-even-when-config_highpte-y.patch

A git repo of this tree can be found at 
    
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary


>From 817a824b75b1475f1b067c8cee318c7b4d66fcde Mon Sep 17 00:00:00 2001
From: Ian Campbell <ian.campbell@xxxxxxxxxx>
Date: Fri, 26 Feb 2010 17:16:00 +0000
Subject: x86, xen: Disable highmem PTE allocation even when CONFIG_HIGHPTE=y
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

From: Ian Campbell <ian.campbell@xxxxxxxxxx>

commit 817a824b75b1475f1b067c8cee318c7b4d66fcde upstream.

There's a path in the pagefault code where the kernel deliberately
breaks its own locking rules by kmapping a high pte page without
holding the pagetable lock (in at least page_check_address). This
breaks Xen's ability to track the pinned/unpinned state of the
page. There does not appear to be a viable workaround for this
behaviour so simply disable HIGHPTE for all Xen guests.

Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
LKML-Reference: <1267204562-11844-1-git-send-email-ian.campbell@xxxxxxxxxx>
Cc: Jeremy Fitzhardinge <jeremy@xxxxxxxx>
Cc: Ingo Molnar <mingo@xxxxxxx>
Cc: Pasi Kärkkäinen <pasik@xxxxxx>
Cc: <xen-devel@xxxxxxxxxxxxxxxxxxx>
Signed-off-by: H. Peter Anvin <hpa@xxxxxxxxx>
Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxx>

---
 arch/x86/xen/enlighten.c |    7 +++++++
 arch/x86/xen/mmu.c       |   11 ++++++-----
 2 files changed, 13 insertions(+), 5 deletions(-)

--- a/arch/x86/xen/enlighten.c
+++ b/arch/x86/xen/enlighten.c
@@ -50,6 +50,7 @@
 #include <asm/traps.h>
 #include <asm/setup.h>
 #include <asm/desc.h>
+#include <asm/pgalloc.h>
 #include <asm/pgtable.h>
 #include <asm/tlbflush.h>
 #include <asm/reboot.h>
@@ -1094,6 +1095,12 @@ asmlinkage void __init xen_start_kernel(
 
        __supported_pte_mask |= _PAGE_IOMAP;
 
+       /*
+        * Prevent page tables from being allocated in highmem, even
+        * if CONFIG_HIGHPTE is enabled.
+        */
+       __userpte_alloc_gfp &= ~__GFP_HIGHMEM;
+
        /* Work out if we support NX */
        x86_configure_nx();
 
--- a/arch/x86/xen/mmu.c
+++ b/arch/x86/xen/mmu.c
@@ -1432,14 +1432,15 @@ static void *xen_kmap_atomic_pte(struct
 {
        pgprot_t prot = PAGE_KERNEL;
 
+       /*
+        * We disable highmem allocations for page tables so we should never
+        * see any calls to kmap_atomic_pte on a highmem page.
+        */
+       BUG_ON(PageHighMem(page));
+
        if (PagePinned(page))
                prot = PAGE_KERNEL_RO;
 
-       if (0 && PageHighMem(page))
-               printk("mapping highpte %lx type %d prot %s\n",
-                      page_to_pfn(page), type,
-                      (unsigned long)pgprot_val(prot) & _PAGE_RW ? "WRITE" : 
"READ");
-
        return kmap_atomic_prot(page, type, prot);
 }
 #endif


Patches currently in stable-queue which might be from ian.campbell@xxxxxxxxxx 
are


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel