diff options
| author | Thomas Gleixner <tglx@linutronix.de> | 2019-02-14 22:26:50 +0100 |
|---|---|---|
| committer | Thomas Gleixner <tglx@linutronix.de> | 2019-02-14 22:26:50 +0100 |
| commit | d869f86645fc07dc83b89b68f1a22d91ebe29439 (patch) | |
| tree | a3c2c1167bb34c8d0367d77e1a5734fc842d9f30 /arch/arc/mm/fault.c | |
| parent | 030fc443aef663df71cd834331fd8f1ec10c30c0 (diff) | |
| parent | 74e96711e3379fc66630f2a1d184947f80cf2c48 (diff) | |
| download | linux-d869f86645fc07dc83b89b68f1a22d91ebe29439.tar.gz linux-d869f86645fc07dc83b89b68f1a22d91ebe29439.tar.bz2 linux-d869f86645fc07dc83b89b68f1a22d91ebe29439.zip | |
Merge branch 'linus' into irq/core
Pick up upstream changes to avoid conflicts for pending patches.
Diffstat (limited to 'arch/arc/mm/fault.c')
| -rw-r--r-- | arch/arc/mm/fault.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/arch/arc/mm/fault.c b/arch/arc/mm/fault.c index a1d723197084..8df1638259f3 100644 --- a/arch/arc/mm/fault.c +++ b/arch/arc/mm/fault.c @@ -141,12 +141,17 @@ good_area: */ fault = handle_mm_fault(vma, address, flags); - /* If Pagefault was interrupted by SIGKILL, exit page fault "early" */ if (fatal_signal_pending(current)) { - if ((fault & VM_FAULT_ERROR) && !(fault & VM_FAULT_RETRY)) - up_read(&mm->mmap_sem); - if (user_mode(regs)) + + /* + * if fault retry, mmap_sem already relinquished by core mm + * so OK to return to user mode (with signal handled first) + */ + if (fault & VM_FAULT_RETRY) { + if (!user_mode(regs)) + goto no_context; return; + } } perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address); |
