From: kfraser@localhost.localdomain Date: Thu, 17 Aug 2006 18:16:01 +0000 (+0100) Subject: [XEN] Fix page-fault handler to fall back to shadow-mode fault path if X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~15710^2~49 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=5d1382fb9719939316188ab8ae3cf9b854610002;p=xen.git [XEN] Fix page-fault handler to fall back to shadow-mode fault path if writable pagetable logic fails to fix up a fault. Signed-off-by: Keir Fraser --- diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c index 2d398712fe..7a5d2f868a 100644 --- a/xen/arch/x86/traps.c +++ b/xen/arch/x86/traps.c @@ -888,11 +888,12 @@ static int fixup_page_fault(unsigned long addr, struct cpu_user_regs *regs) return (spurious_page_fault(addr, regs) ? EXCRET_not_a_fault : 0); } - if ( likely(VM_ASSIST(d, VMASST_TYPE_writable_pagetables)) && + if ( VM_ASSIST(d, VMASST_TYPE_writable_pagetables) && guest_kernel_mode(v, regs) && ((regs->error_code & (PGERR_write_access|PGERR_page_present)) == - (PGERR_write_access|PGERR_page_present)) ) - return ptwr_do_page_fault(d, addr, regs) ? EXCRET_fault_fixed : 0; + (PGERR_write_access|PGERR_page_present)) && + ptwr_do_page_fault(d, addr, regs) ) + return EXCRET_fault_fixed; if ( shadow2_mode_enabled(d) ) return shadow2_fault(addr, regs);