From: Tony Luck Date: Mon, 25 Apr 2005 20:22:44 +0000 (-0700) Subject: [IA64] Need to handle lfetch in "no_context" case. X-Git-Tag: v2.6.12-rc4~197^2~9 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f0a8d3c9ec1f82d2a41faa6c46b8db7bd5b1eb8d;p=linux-2.6 [IA64] Need to handle lfetch in "no_context" case. Thanks to Mark for tracking down this one. Users of __copy_from_user_inatomic() will be sad if we don't handle lfetch faults for the "no_context" case. Signed-off-by: Tony Luck --- diff --git a/arch/ia64/mm/fault.c b/arch/ia64/mm/fault.c index da859125aa..4174ec999d 100644 --- a/arch/ia64/mm/fault.c +++ b/arch/ia64/mm/fault.c @@ -209,10 +209,13 @@ ia64_do_page_fault (unsigned long address, unsigned long isr, struct pt_regs *re } no_context: - if (isr & IA64_ISR_SP) { + if ((isr & IA64_ISR_SP) + || ((isr & IA64_ISR_NA) && (isr & IA64_ISR_CODE_MASK) == IA64_ISR_CODE_LFETCH)) + { /* - * This fault was due to a speculative load set the "ed" bit in the psr to - * ensure forward progress (target register will get a NaT). + * This fault was due to a speculative load or lfetch.fault, set the "ed" + * bit in the psr to ensure forward progress. (Target register will get a + * NaT for ld.s, lfetch will be canceled.) */ ia64_psr(regs)->ed = 1; return;