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]

Attachment: .config.gz
Description: application/gzip

_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to