CC: [email protected] CC: [email protected] TO: Michel Lespinasse <[email protected]> CC: Andrew Morton <[email protected]> CC: Linux Memory Management List <[email protected]> CC: Vlastimil Babka <[email protected]> CC: Davidlohr Bueso <[email protected]> CC: Daniel Jordan <[email protected]>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master head: c03c21ba6f4e95e406a1a7b4c34ef334b977c194 commit: da1c55f1b272f4bd54671d459b39ea7b54944ef9 mmap locking API: rename mmap_sem to mmap_lock date: 9 months ago :::::: branch date: 8 hours ago :::::: commit date: 9 months ago config: riscv-randconfig-m031-20210224 (attached as .config) compiler: riscv64-linux-gcc (GCC) 9.3.0 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <[email protected]> Reported-by: Dan Carpenter <[email protected]> smatch warnings: arch/riscv/mm/fault.c:275 do_page_fault() warn: inconsistent returns '&mm->mmap_lock'. vim +275 arch/riscv/mm/fault.c ffaee2728f9b27 Paul Walmsley 2019-10-17 22 07037db5d479f9 Palmer Dabbelt 2017-07-10 23 /* 07037db5d479f9 Palmer Dabbelt 2017-07-10 24 * This routine handles page faults. It determines the address and the 07037db5d479f9 Palmer Dabbelt 2017-07-10 25 * problem, and then passes it off to one of the appropriate routines. 07037db5d479f9 Palmer Dabbelt 2017-07-10 26 */ 07037db5d479f9 Palmer Dabbelt 2017-07-10 27 asmlinkage void do_page_fault(struct pt_regs *regs) 07037db5d479f9 Palmer Dabbelt 2017-07-10 28 { 07037db5d479f9 Palmer Dabbelt 2017-07-10 29 struct task_struct *tsk; 07037db5d479f9 Palmer Dabbelt 2017-07-10 30 struct vm_area_struct *vma; 07037db5d479f9 Palmer Dabbelt 2017-07-10 31 struct mm_struct *mm; 07037db5d479f9 Palmer Dabbelt 2017-07-10 32 unsigned long addr, cause; dde1607248328c Peter Xu 2020-04-01 33 unsigned int flags = FAULT_FLAG_DEFAULT; 50a7ca3c6fc869 Souptick Joarder 2018-08-17 34 int code = SEGV_MAPERR; 50a7ca3c6fc869 Souptick Joarder 2018-08-17 35 vm_fault_t fault; 07037db5d479f9 Palmer Dabbelt 2017-07-10 36 a4c3733d32a72f Christoph Hellwig 2019-10-28 37 cause = regs->cause; a4c3733d32a72f Christoph Hellwig 2019-10-28 38 addr = regs->badaddr; 07037db5d479f9 Palmer Dabbelt 2017-07-10 39 07037db5d479f9 Palmer Dabbelt 2017-07-10 40 tsk = current; 07037db5d479f9 Palmer Dabbelt 2017-07-10 41 mm = tsk->mm; 07037db5d479f9 Palmer Dabbelt 2017-07-10 42 07037db5d479f9 Palmer Dabbelt 2017-07-10 43 /* 07037db5d479f9 Palmer Dabbelt 2017-07-10 44 * Fault-in kernel-space virtual memory on-demand. 07037db5d479f9 Palmer Dabbelt 2017-07-10 45 * The 'reference' page table is init_mm.pgd. 07037db5d479f9 Palmer Dabbelt 2017-07-10 46 * 07037db5d479f9 Palmer Dabbelt 2017-07-10 47 * NOTE! We MUST NOT take any locks for this case. We may 07037db5d479f9 Palmer Dabbelt 2017-07-10 48 * be in an interrupt or a critical region, and should 07037db5d479f9 Palmer Dabbelt 2017-07-10 49 * only copy the information from the master page table, 07037db5d479f9 Palmer Dabbelt 2017-07-10 50 * nothing more. 07037db5d479f9 Palmer Dabbelt 2017-07-10 51 */ 07037db5d479f9 Palmer Dabbelt 2017-07-10 52 if (unlikely((addr >= VMALLOC_START) && (addr <= VMALLOC_END))) 07037db5d479f9 Palmer Dabbelt 2017-07-10 53 goto vmalloc_fault; 07037db5d479f9 Palmer Dabbelt 2017-07-10 54 07037db5d479f9 Palmer Dabbelt 2017-07-10 55 /* Enable interrupts if they were enabled in the parent context. */ a4c3733d32a72f Christoph Hellwig 2019-10-28 56 if (likely(regs->status & SR_PIE)) 07037db5d479f9 Palmer Dabbelt 2017-07-10 57 local_irq_enable(); 07037db5d479f9 Palmer Dabbelt 2017-07-10 58 07037db5d479f9 Palmer Dabbelt 2017-07-10 59 /* 07037db5d479f9 Palmer Dabbelt 2017-07-10 60 * If we're in an interrupt, have no user context, or are running 07037db5d479f9 Palmer Dabbelt 2017-07-10 61 * in an atomic region, then we must not take the fault. 07037db5d479f9 Palmer Dabbelt 2017-07-10 62 */ 07037db5d479f9 Palmer Dabbelt 2017-07-10 63 if (unlikely(faulthandler_disabled() || !mm)) 07037db5d479f9 Palmer Dabbelt 2017-07-10 64 goto no_context; 07037db5d479f9 Palmer Dabbelt 2017-07-10 65 07037db5d479f9 Palmer Dabbelt 2017-07-10 66 if (user_mode(regs)) 07037db5d479f9 Palmer Dabbelt 2017-07-10 67 flags |= FAULT_FLAG_USER; 07037db5d479f9 Palmer Dabbelt 2017-07-10 68 07037db5d479f9 Palmer Dabbelt 2017-07-10 69 perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, addr); 07037db5d479f9 Palmer Dabbelt 2017-07-10 70 07037db5d479f9 Palmer Dabbelt 2017-07-10 71 retry: d8ed45c5dcd455 Michel Lespinasse 2020-06-08 72 mmap_read_lock(mm); 07037db5d479f9 Palmer Dabbelt 2017-07-10 73 vma = find_vma(mm, addr); 07037db5d479f9 Palmer Dabbelt 2017-07-10 74 if (unlikely(!vma)) 07037db5d479f9 Palmer Dabbelt 2017-07-10 75 goto bad_area; 07037db5d479f9 Palmer Dabbelt 2017-07-10 76 if (likely(vma->vm_start <= addr)) 07037db5d479f9 Palmer Dabbelt 2017-07-10 77 goto good_area; 07037db5d479f9 Palmer Dabbelt 2017-07-10 78 if (unlikely(!(vma->vm_flags & VM_GROWSDOWN))) 07037db5d479f9 Palmer Dabbelt 2017-07-10 79 goto bad_area; 07037db5d479f9 Palmer Dabbelt 2017-07-10 80 if (unlikely(expand_stack(vma, addr))) 07037db5d479f9 Palmer Dabbelt 2017-07-10 81 goto bad_area; 07037db5d479f9 Palmer Dabbelt 2017-07-10 82 07037db5d479f9 Palmer Dabbelt 2017-07-10 83 /* 07037db5d479f9 Palmer Dabbelt 2017-07-10 84 * Ok, we have a good vm_area for this memory access, so 07037db5d479f9 Palmer Dabbelt 2017-07-10 85 * we can handle it. 07037db5d479f9 Palmer Dabbelt 2017-07-10 86 */ 07037db5d479f9 Palmer Dabbelt 2017-07-10 87 good_area: 07037db5d479f9 Palmer Dabbelt 2017-07-10 88 code = SEGV_ACCERR; 07037db5d479f9 Palmer Dabbelt 2017-07-10 89 07037db5d479f9 Palmer Dabbelt 2017-07-10 90 switch (cause) { 07037db5d479f9 Palmer Dabbelt 2017-07-10 91 case EXC_INST_PAGE_FAULT: 07037db5d479f9 Palmer Dabbelt 2017-07-10 92 if (!(vma->vm_flags & VM_EXEC)) 07037db5d479f9 Palmer Dabbelt 2017-07-10 93 goto bad_area; 07037db5d479f9 Palmer Dabbelt 2017-07-10 94 break; 07037db5d479f9 Palmer Dabbelt 2017-07-10 95 case EXC_LOAD_PAGE_FAULT: 07037db5d479f9 Palmer Dabbelt 2017-07-10 96 if (!(vma->vm_flags & VM_READ)) 07037db5d479f9 Palmer Dabbelt 2017-07-10 97 goto bad_area; 07037db5d479f9 Palmer Dabbelt 2017-07-10 98 break; 07037db5d479f9 Palmer Dabbelt 2017-07-10 99 case EXC_STORE_PAGE_FAULT: 07037db5d479f9 Palmer Dabbelt 2017-07-10 100 if (!(vma->vm_flags & VM_WRITE)) 07037db5d479f9 Palmer Dabbelt 2017-07-10 101 goto bad_area; 07037db5d479f9 Palmer Dabbelt 2017-07-10 102 flags |= FAULT_FLAG_WRITE; 07037db5d479f9 Palmer Dabbelt 2017-07-10 103 break; 07037db5d479f9 Palmer Dabbelt 2017-07-10 104 default: 07037db5d479f9 Palmer Dabbelt 2017-07-10 105 panic("%s: unhandled cause %lu", __func__, cause); 07037db5d479f9 Palmer Dabbelt 2017-07-10 106 } 07037db5d479f9 Palmer Dabbelt 2017-07-10 107 07037db5d479f9 Palmer Dabbelt 2017-07-10 108 /* 07037db5d479f9 Palmer Dabbelt 2017-07-10 109 * If for any reason at all we could not handle the fault, 07037db5d479f9 Palmer Dabbelt 2017-07-10 110 * make sure we exit gracefully rather than endlessly redo 07037db5d479f9 Palmer Dabbelt 2017-07-10 111 * the fault. 07037db5d479f9 Palmer Dabbelt 2017-07-10 112 */ 07037db5d479f9 Palmer Dabbelt 2017-07-10 113 fault = handle_mm_fault(vma, addr, flags); 07037db5d479f9 Palmer Dabbelt 2017-07-10 114 07037db5d479f9 Palmer Dabbelt 2017-07-10 115 /* 07037db5d479f9 Palmer Dabbelt 2017-07-10 116 * If we need to retry but a fatal signal is pending, handle the 07037db5d479f9 Palmer Dabbelt 2017-07-10 117 * signal first. We do not need to release the mmap_sem because it 07037db5d479f9 Palmer Dabbelt 2017-07-10 118 * would already be released in __lock_page_or_retry in mm/filemap.c. 07037db5d479f9 Palmer Dabbelt 2017-07-10 119 */ 4ef873226ceb9c Peter Xu 2020-04-01 120 if (fault_signal_pending(fault, regs)) 07037db5d479f9 Palmer Dabbelt 2017-07-10 121 return; 07037db5d479f9 Palmer Dabbelt 2017-07-10 122 07037db5d479f9 Palmer Dabbelt 2017-07-10 123 if (unlikely(fault & VM_FAULT_ERROR)) { 07037db5d479f9 Palmer Dabbelt 2017-07-10 124 if (fault & VM_FAULT_OOM) 07037db5d479f9 Palmer Dabbelt 2017-07-10 125 goto out_of_memory; 07037db5d479f9 Palmer Dabbelt 2017-07-10 126 else if (fault & VM_FAULT_SIGBUS) 07037db5d479f9 Palmer Dabbelt 2017-07-10 127 goto do_sigbus; 07037db5d479f9 Palmer Dabbelt 2017-07-10 128 BUG(); 07037db5d479f9 Palmer Dabbelt 2017-07-10 129 } 07037db5d479f9 Palmer Dabbelt 2017-07-10 130 07037db5d479f9 Palmer Dabbelt 2017-07-10 131 /* 07037db5d479f9 Palmer Dabbelt 2017-07-10 132 * Major/minor page fault accounting is only done on the 07037db5d479f9 Palmer Dabbelt 2017-07-10 133 * initial attempt. If we go through a retry, it is extremely 07037db5d479f9 Palmer Dabbelt 2017-07-10 134 * likely that the page will be found in page cache at that point. 07037db5d479f9 Palmer Dabbelt 2017-07-10 135 */ 07037db5d479f9 Palmer Dabbelt 2017-07-10 136 if (flags & FAULT_FLAG_ALLOW_RETRY) { 07037db5d479f9 Palmer Dabbelt 2017-07-10 137 if (fault & VM_FAULT_MAJOR) { 07037db5d479f9 Palmer Dabbelt 2017-07-10 138 tsk->maj_flt++; 07037db5d479f9 Palmer Dabbelt 2017-07-10 139 perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MAJ, 07037db5d479f9 Palmer Dabbelt 2017-07-10 140 1, regs, addr); 07037db5d479f9 Palmer Dabbelt 2017-07-10 141 } else { 07037db5d479f9 Palmer Dabbelt 2017-07-10 142 tsk->min_flt++; 07037db5d479f9 Palmer Dabbelt 2017-07-10 143 perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MIN, 07037db5d479f9 Palmer Dabbelt 2017-07-10 144 1, regs, addr); 07037db5d479f9 Palmer Dabbelt 2017-07-10 145 } 07037db5d479f9 Palmer Dabbelt 2017-07-10 146 if (fault & VM_FAULT_RETRY) { 07037db5d479f9 Palmer Dabbelt 2017-07-10 147 flags |= FAULT_FLAG_TRIED; 07037db5d479f9 Palmer Dabbelt 2017-07-10 148 07037db5d479f9 Palmer Dabbelt 2017-07-10 149 /* 07037db5d479f9 Palmer Dabbelt 2017-07-10 150 * No need to up_read(&mm->mmap_sem) as we would 07037db5d479f9 Palmer Dabbelt 2017-07-10 151 * have already released it in __lock_page_or_retry 07037db5d479f9 Palmer Dabbelt 2017-07-10 152 * in mm/filemap.c. 07037db5d479f9 Palmer Dabbelt 2017-07-10 153 */ 07037db5d479f9 Palmer Dabbelt 2017-07-10 154 goto retry; 07037db5d479f9 Palmer Dabbelt 2017-07-10 155 } 07037db5d479f9 Palmer Dabbelt 2017-07-10 156 } 07037db5d479f9 Palmer Dabbelt 2017-07-10 157 d8ed45c5dcd455 Michel Lespinasse 2020-06-08 158 mmap_read_unlock(mm); 07037db5d479f9 Palmer Dabbelt 2017-07-10 159 return; 07037db5d479f9 Palmer Dabbelt 2017-07-10 160 07037db5d479f9 Palmer Dabbelt 2017-07-10 161 /* 07037db5d479f9 Palmer Dabbelt 2017-07-10 162 * Something tried to access memory that isn't in our memory map. 07037db5d479f9 Palmer Dabbelt 2017-07-10 163 * Fix it, but check if it's kernel or user first. 07037db5d479f9 Palmer Dabbelt 2017-07-10 164 */ 07037db5d479f9 Palmer Dabbelt 2017-07-10 165 bad_area: d8ed45c5dcd455 Michel Lespinasse 2020-06-08 166 mmap_read_unlock(mm); 07037db5d479f9 Palmer Dabbelt 2017-07-10 167 /* User mode accesses just cause a SIGSEGV */ 07037db5d479f9 Palmer Dabbelt 2017-07-10 168 if (user_mode(regs)) { 6f25a967646aa3 Eric W. Biederman 2019-02-05 169 do_trap(regs, SIGSEGV, code, addr); 07037db5d479f9 Palmer Dabbelt 2017-07-10 170 return; 07037db5d479f9 Palmer Dabbelt 2017-07-10 171 } 07037db5d479f9 Palmer Dabbelt 2017-07-10 172 07037db5d479f9 Palmer Dabbelt 2017-07-10 173 no_context: 07037db5d479f9 Palmer Dabbelt 2017-07-10 174 /* Are we prepared to handle this kernel fault? */ 07037db5d479f9 Palmer Dabbelt 2017-07-10 175 if (fixup_exception(regs)) 07037db5d479f9 Palmer Dabbelt 2017-07-10 176 return; 07037db5d479f9 Palmer Dabbelt 2017-07-10 177 07037db5d479f9 Palmer Dabbelt 2017-07-10 178 /* 07037db5d479f9 Palmer Dabbelt 2017-07-10 179 * Oops. The kernel tried to access some bad page. We'll have to 07037db5d479f9 Palmer Dabbelt 2017-07-10 180 * terminate things with extreme prejudice. 07037db5d479f9 Palmer Dabbelt 2017-07-10 181 */ 07037db5d479f9 Palmer Dabbelt 2017-07-10 182 bust_spinlocks(1); 07037db5d479f9 Palmer Dabbelt 2017-07-10 183 pr_alert("Unable to handle kernel %s at virtual address " REG_FMT "\n", 07037db5d479f9 Palmer Dabbelt 2017-07-10 184 (addr < PAGE_SIZE) ? "NULL pointer dereference" : 07037db5d479f9 Palmer Dabbelt 2017-07-10 185 "paging request", addr); 07037db5d479f9 Palmer Dabbelt 2017-07-10 186 die(regs, "Oops"); 07037db5d479f9 Palmer Dabbelt 2017-07-10 187 do_exit(SIGKILL); 07037db5d479f9 Palmer Dabbelt 2017-07-10 188 07037db5d479f9 Palmer Dabbelt 2017-07-10 189 /* 07037db5d479f9 Palmer Dabbelt 2017-07-10 190 * We ran out of memory, call the OOM killer, and return the userspace 07037db5d479f9 Palmer Dabbelt 2017-07-10 191 * (which will retry the fault, or kill us if we got oom-killed). 07037db5d479f9 Palmer Dabbelt 2017-07-10 192 */ 07037db5d479f9 Palmer Dabbelt 2017-07-10 193 out_of_memory: d8ed45c5dcd455 Michel Lespinasse 2020-06-08 194 mmap_read_unlock(mm); 07037db5d479f9 Palmer Dabbelt 2017-07-10 195 if (!user_mode(regs)) 07037db5d479f9 Palmer Dabbelt 2017-07-10 196 goto no_context; 07037db5d479f9 Palmer Dabbelt 2017-07-10 197 pagefault_out_of_memory(); 07037db5d479f9 Palmer Dabbelt 2017-07-10 198 return; 07037db5d479f9 Palmer Dabbelt 2017-07-10 199 07037db5d479f9 Palmer Dabbelt 2017-07-10 200 do_sigbus: d8ed45c5dcd455 Michel Lespinasse 2020-06-08 201 mmap_read_unlock(mm); 07037db5d479f9 Palmer Dabbelt 2017-07-10 202 /* Kernel mode? Handle exceptions or die */ 07037db5d479f9 Palmer Dabbelt 2017-07-10 203 if (!user_mode(regs)) 07037db5d479f9 Palmer Dabbelt 2017-07-10 204 goto no_context; 6f25a967646aa3 Eric W. Biederman 2019-02-05 205 do_trap(regs, SIGBUS, BUS_ADRERR, addr); 07037db5d479f9 Palmer Dabbelt 2017-07-10 206 return; 07037db5d479f9 Palmer Dabbelt 2017-07-10 207 07037db5d479f9 Palmer Dabbelt 2017-07-10 208 vmalloc_fault: 07037db5d479f9 Palmer Dabbelt 2017-07-10 209 { 07037db5d479f9 Palmer Dabbelt 2017-07-10 210 pgd_t *pgd, *pgd_k; 07037db5d479f9 Palmer Dabbelt 2017-07-10 211 pud_t *pud, *pud_k; 07037db5d479f9 Palmer Dabbelt 2017-07-10 212 p4d_t *p4d, *p4d_k; 07037db5d479f9 Palmer Dabbelt 2017-07-10 213 pmd_t *pmd, *pmd_k; 07037db5d479f9 Palmer Dabbelt 2017-07-10 214 pte_t *pte_k; 07037db5d479f9 Palmer Dabbelt 2017-07-10 215 int index; 07037db5d479f9 Palmer Dabbelt 2017-07-10 216 8fef9900d43feb Andreas Schwab 2019-05-07 217 /* User mode accesses just cause a SIGSEGV */ 07037db5d479f9 Palmer Dabbelt 2017-07-10 218 if (user_mode(regs)) 6f25a967646aa3 Eric W. Biederman 2019-02-05 219 return do_trap(regs, SIGSEGV, code, addr); 07037db5d479f9 Palmer Dabbelt 2017-07-10 220 07037db5d479f9 Palmer Dabbelt 2017-07-10 221 /* 07037db5d479f9 Palmer Dabbelt 2017-07-10 222 * Synchronize this task's top level page-table 07037db5d479f9 Palmer Dabbelt 2017-07-10 223 * with the 'reference' page table. 07037db5d479f9 Palmer Dabbelt 2017-07-10 224 * 07037db5d479f9 Palmer Dabbelt 2017-07-10 225 * Do _not_ use "tsk->active_mm->pgd" here. 07037db5d479f9 Palmer Dabbelt 2017-07-10 226 * We might be inside an interrupt in the middle 07037db5d479f9 Palmer Dabbelt 2017-07-10 227 * of a task switch. 07037db5d479f9 Palmer Dabbelt 2017-07-10 228 */ 07037db5d479f9 Palmer Dabbelt 2017-07-10 229 index = pgd_index(addr); a3182c91ef4e7d Anup Patel 2019-04-25 230 pgd = (pgd_t *)pfn_to_virt(csr_read(CSR_SATP)) + index; 07037db5d479f9 Palmer Dabbelt 2017-07-10 231 pgd_k = init_mm.pgd + index; 07037db5d479f9 Palmer Dabbelt 2017-07-10 232 07037db5d479f9 Palmer Dabbelt 2017-07-10 233 if (!pgd_present(*pgd_k)) 07037db5d479f9 Palmer Dabbelt 2017-07-10 234 goto no_context; 07037db5d479f9 Palmer Dabbelt 2017-07-10 235 set_pgd(pgd, *pgd_k); 07037db5d479f9 Palmer Dabbelt 2017-07-10 236 07037db5d479f9 Palmer Dabbelt 2017-07-10 237 p4d = p4d_offset(pgd, addr); 07037db5d479f9 Palmer Dabbelt 2017-07-10 238 p4d_k = p4d_offset(pgd_k, addr); 07037db5d479f9 Palmer Dabbelt 2017-07-10 239 if (!p4d_present(*p4d_k)) 07037db5d479f9 Palmer Dabbelt 2017-07-10 240 goto no_context; 07037db5d479f9 Palmer Dabbelt 2017-07-10 241 07037db5d479f9 Palmer Dabbelt 2017-07-10 242 pud = pud_offset(p4d, addr); 07037db5d479f9 Palmer Dabbelt 2017-07-10 243 pud_k = pud_offset(p4d_k, addr); 07037db5d479f9 Palmer Dabbelt 2017-07-10 244 if (!pud_present(*pud_k)) 07037db5d479f9 Palmer Dabbelt 2017-07-10 245 goto no_context; 07037db5d479f9 Palmer Dabbelt 2017-07-10 246 07037db5d479f9 Palmer Dabbelt 2017-07-10 247 /* 07037db5d479f9 Palmer Dabbelt 2017-07-10 248 * Since the vmalloc area is global, it is unnecessary 07037db5d479f9 Palmer Dabbelt 2017-07-10 249 * to copy individual PTEs 07037db5d479f9 Palmer Dabbelt 2017-07-10 250 */ 07037db5d479f9 Palmer Dabbelt 2017-07-10 251 pmd = pmd_offset(pud, addr); 07037db5d479f9 Palmer Dabbelt 2017-07-10 252 pmd_k = pmd_offset(pud_k, addr); 07037db5d479f9 Palmer Dabbelt 2017-07-10 253 if (!pmd_present(*pmd_k)) 07037db5d479f9 Palmer Dabbelt 2017-07-10 254 goto no_context; 07037db5d479f9 Palmer Dabbelt 2017-07-10 255 set_pmd(pmd, *pmd_k); 07037db5d479f9 Palmer Dabbelt 2017-07-10 256 07037db5d479f9 Palmer Dabbelt 2017-07-10 257 /* 07037db5d479f9 Palmer Dabbelt 2017-07-10 258 * Make sure the actual PTE exists as well to 07037db5d479f9 Palmer Dabbelt 2017-07-10 259 * catch kernel vmalloc-area accesses to non-mapped 07037db5d479f9 Palmer Dabbelt 2017-07-10 260 * addresses. If we don't do this, this will just 07037db5d479f9 Palmer Dabbelt 2017-07-10 261 * silently loop forever. 07037db5d479f9 Palmer Dabbelt 2017-07-10 262 */ 07037db5d479f9 Palmer Dabbelt 2017-07-10 263 pte_k = pte_offset_kernel(pmd_k, addr); 07037db5d479f9 Palmer Dabbelt 2017-07-10 264 if (!pte_present(*pte_k)) 07037db5d479f9 Palmer Dabbelt 2017-07-10 265 goto no_context; bf587caae305ae ShihPo Hung 2019-06-17 266 bf587caae305ae ShihPo Hung 2019-06-17 267 /* bf587caae305ae ShihPo Hung 2019-06-17 268 * The kernel assumes that TLBs don't cache invalid bf587caae305ae ShihPo Hung 2019-06-17 269 * entries, but in RISC-V, SFENCE.VMA specifies an bf587caae305ae ShihPo Hung 2019-06-17 270 * ordering constraint, not a cache flush; it is bf587caae305ae ShihPo Hung 2019-06-17 271 * necessary even after writing invalid entries. bf587caae305ae ShihPo Hung 2019-06-17 272 */ bf587caae305ae ShihPo Hung 2019-06-17 273 local_flush_tlb_page(addr); bf587caae305ae ShihPo Hung 2019-06-17 274 07037db5d479f9 Palmer Dabbelt 2017-07-10 @275 return; :::::: The code at line 275 was first introduced by commit :::::: 07037db5d479f90377c998259a4f9a469c404edf RISC-V: Paging and MMU :::::: TO: Palmer Dabbelt <[email protected]> :::::: CC: Palmer Dabbelt <[email protected]> --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/[email protected]
.config.gz
Description: application/gzip
_______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
