mirror of
https://github.com/torvalds/linux.git
synced 2024-12-29 06:12:08 +00:00
[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 <tony.luck@intel.com>
This commit is contained in:
parent
0985ea8f2d
commit
f0a8d3c9ec
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user