x86, mm: fault.c, give another attempt at prefetch handing before SIGBUS
Impact: extend prefetch handling on 64-bit Currently there's an extra is_prefetch() check done in do_sigbus(), which we only do on 32 bits. This is a last-ditch check before we terminate a task, so it's worth giving prefetch instructions another chance - should none of our existing quirks have caught a prefetch instruction related spurious fault. The only risk is if a prefetch causes a real sigbus, in that case we'll not OOM but try another fault. But this code has been on 32-bit for a long time, so it should be fine in practice. So do this on 64-bit too - and thus remove one more #ifdef. Cc: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
Родитель
7c178a26d3
Коммит
cd1b68f08f
|
@ -836,11 +836,9 @@ do_sigbus(struct pt_regs *regs, unsigned long error_code, unsigned long address)
|
|||
if (!(error_code & PF_USER))
|
||||
no_context(regs, error_code, address);
|
||||
|
||||
#ifdef CONFIG_X86_32
|
||||
/* User space => ok to do another page fault: */
|
||||
/* User-space => ok to do another page fault: */
|
||||
if (is_prefetch(regs, error_code, address))
|
||||
return;
|
||||
#endif
|
||||
|
||||
tsk->thread.cr2 = address;
|
||||
tsk->thread.error_code = error_code;
|
||||
|
|
Загрузка…
Ссылка в новой задаче