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/
Home Products Support Community News


[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.32-stable tree
From: <gregkh@xxxxxxx>
Date: Thu, 11 Mar 2010 11:31:18 -0800
Cc: stable@xxxxxxxxxx, stable-commits@xxxxxxxxxxxxxxx
Delivery-date: Thu, 11 Mar 2010 18:49:51 -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.32-stable tree.  Its filename is


A git repo of this tree can be found at 

>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
@@ -48,6 +48,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>
@@ -1092,6 +1093,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;
 #ifdef CONFIG_X86_64
        /* Work out if we support 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" : 
        return kmap_atomic_prot(page, type, prot);

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

Xen-devel mailing list

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-devel] patch x86-xen-disable-highmem-pte-allocation-even-when-config_highpte-y.patch added to 2.6.32-stable tree, gregkh <=