summaryrefslogtreecommitdiff
path: root/sysutils/xenkernel3/patches/patch-ae
diff options
context:
space:
mode:
Diffstat (limited to 'sysutils/xenkernel3/patches/patch-ae')
-rw-r--r--sysutils/xenkernel3/patches/patch-ae39
1 files changed, 39 insertions, 0 deletions
diff --git a/sysutils/xenkernel3/patches/patch-ae b/sysutils/xenkernel3/patches/patch-ae
new file mode 100644
index 00000000000..0830d2d99f1
--- /dev/null
+++ b/sysutils/xenkernel3/patches/patch-ae
@@ -0,0 +1,39 @@
+$NetBSD: patch-ae,v 1.1 2007/10/16 20:31:57 bouyer Exp $
+
+--- xen/arch/x86/mm.c.orig 2007-05-18 16:45:21.000000000 +0200
++++ xen/arch/x86/mm.c 2007-10-17 05:03:09.000000000 +0200
+@@ -1741,15 +1741,26 @@
+ nx |= PGT_validated;
+ }
+ }
+- else if ( unlikely((x & (PGT_type_mask|PGT_pae_xen_l2)) != type) )
++ else if (unlikely((x & (PGT_type_mask|PGT_pae_xen_l2)) != type) )
+ {
+- if ( ((x & PGT_type_mask) != PGT_l2_page_table) ||
+- (type != PGT_l1_page_table) )
+- MEM_LOG("Bad type (saw %" PRtype_info
+- " != exp %" PRtype_info ") "
+- "for mfn %lx (pfn %lx)",
+- x, type, page_to_mfn(page),
+- get_gpfn_from_mfn(page_to_mfn(page)));
++ /*
++ * if it's a recursive mapping failure here is expected.
++ * Don't log it
++ */
++ if ((x & PGT_type_mask) == PGT_l2_page_table &&
++ type == PGT_l1_page_table)
++ return 0;
++ if ((x & PGT_type_mask) == PGT_l3_page_table &&
++ type == PGT_l2_page_table)
++ return 0;
++ if ((x & PGT_type_mask) == PGT_l4_page_table &&
++ type == PGT_l3_page_table)
++ return 0;
++ MEM_LOG("Bad type (saw %" PRtype_info
++ " != exp %" PRtype_info ") "
++ "for mfn %lx (pfn %lx)",
++ x, type, page_to_mfn(page),
++ get_gpfn_from_mfn(page_to_mfn(page)));
+ return 0;
+ }
+ else if ( unlikely(!(x & PGT_validated)) )