diff options
Diffstat (limited to 'arch/arc/mm')
| -rw-r--r-- | arch/arc/mm/fault.c | 13 | ||||
| -rw-r--r-- | arch/arc/mm/init.c | 3 |
2 files changed, 11 insertions, 5 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: | |||
| 141 | */ | 141 | */ |
| 142 | fault = handle_mm_fault(vma, address, flags); | 142 | fault = handle_mm_fault(vma, address, flags); |
| 143 | 143 | ||
| 144 | /* If Pagefault was interrupted by SIGKILL, exit page fault "early" */ | ||
| 145 | if (fatal_signal_pending(current)) { | 144 | if (fatal_signal_pending(current)) { |
| 146 | if ((fault & VM_FAULT_ERROR) && !(fault & VM_FAULT_RETRY)) | 145 | |
| 147 | up_read(&mm->mmap_sem); | 146 | /* |
| 148 | if (user_mode(regs)) | 147 | * if fault retry, mmap_sem already relinquished by core mm |
| 148 | * so OK to return to user mode (with signal handled first) | ||
| 149 | */ | ||
| 150 | if (fault & VM_FAULT_RETRY) { | ||
| 151 | if (!user_mode(regs)) | ||
| 152 | goto no_context; | ||
| 149 | return; | 153 | return; |
| 154 | } | ||
| 150 | } | 155 | } |
| 151 | 156 | ||
| 152 | perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address); | 157 | perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address); |
diff --git a/arch/arc/mm/init.c b/arch/arc/mm/init.c index 43bf4c3a1290..e1ab2d7f1d64 100644 --- a/arch/arc/mm/init.c +++ b/arch/arc/mm/init.c | |||
| @@ -119,7 +119,8 @@ void __init setup_arch_memory(void) | |||
| 119 | */ | 119 | */ |
| 120 | 120 | ||
| 121 | memblock_add_node(low_mem_start, low_mem_sz, 0); | 121 | memblock_add_node(low_mem_start, low_mem_sz, 0); |
| 122 | memblock_reserve(low_mem_start, __pa(_end) - low_mem_start); | 122 | memblock_reserve(CONFIG_LINUX_LINK_BASE, |
| 123 | __pa(_end) - CONFIG_LINUX_LINK_BASE); | ||
| 123 | 124 | ||
| 124 | #ifdef CONFIG_BLK_DEV_INITRD | 125 | #ifdef CONFIG_BLK_DEV_INITRD |
| 125 | if (phys_initrd_size) { | 126 | if (phys_initrd_size) { |
