diff options
Diffstat (limited to 'sysutils/xenkernel3/patches/patch-ae')
-rw-r--r-- | sysutils/xenkernel3/patches/patch-ae | 39 |
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)) ) |