All of lore.kernel.org
 help / color / mirror / Atom feed
* arch/mips/mm/fault.c:327 __do_page_fault() warn: inconsistent returns 'mm->mmap_lock'.
@ 2020-06-25  0:02 kernel test robot
  0 siblings, 0 replies; 3+ messages in thread
From: kernel test robot @ 2020-06-25  0:02 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 20369 bytes --]

CC: kbuild-all(a)lists.01.org
CC: linux-kernel(a)vger.kernel.org
TO: Michel Lespinasse <walken@google.com>
CC: Andrew Morton <akpm@linux-foundation.org>
CC: Linux Memory Management List <linux-mm@kvack.org>
CC: Vlastimil Babka <vbabka@suse.cz>
CC: Davidlohr Bueso <dbueso@suse.de>
CC: Daniel Jordan <daniel.m.jordan@oracle.com>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   fbb58011fdd9ca2e2f0e329d11085ddf46830c5a
commit: da1c55f1b272f4bd54671d459b39ea7b54944ef9 mmap locking API: rename mmap_sem to mmap_lock
date:   2 weeks ago
:::::: branch date: 3 hours ago
:::::: commit date: 2 weeks ago
config: mips-randconfig-m031-20200624 (attached as .config)
compiler: mipsel-linux-gcc (GCC) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>

smatch warnings:
arch/mips/mm/fault.c:327 __do_page_fault() warn: inconsistent returns 'mm->mmap_lock'.

# https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=da1c55f1b272f4bd54671d459b39ea7b54944ef9
git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
git remote update linus
git checkout da1c55f1b272f4bd54671d459b39ea7b54944ef9
vim +327 arch/mips/mm/fault.c

^1da177e4c3f41 Linus Torvalds     2005-04-16   89  
^1da177e4c3f41 Linus Torvalds     2005-04-16   90  	/*
^1da177e4c3f41 Linus Torvalds     2005-04-16   91  	 * If we're in an interrupt or have no user
^1da177e4c3f41 Linus Torvalds     2005-04-16   92  	 * context, we must not take the fault..
^1da177e4c3f41 Linus Torvalds     2005-04-16   93  	 */
70ffdb9393a726 David Hildenbrand  2015-05-11   94  	if (faulthandler_disabled() || !mm)
^1da177e4c3f41 Linus Torvalds     2005-04-16   95  		goto bad_area_nosemaphore;
^1da177e4c3f41 Linus Torvalds     2005-04-16   96  
759496ba6407c6 Johannes Weiner    2013-09-12   97  	if (user_mode(regs))
759496ba6407c6 Johannes Weiner    2013-09-12   98  		flags |= FAULT_FLAG_USER;
43ca4957a15a12 Kautuk Consul      2011-12-23   99  retry:
89154dd5313f77 Michel Lespinasse  2020-06-08  100  	mmap_read_lock(mm);
^1da177e4c3f41 Linus Torvalds     2005-04-16  101  	vma = find_vma(mm, address);
^1da177e4c3f41 Linus Torvalds     2005-04-16  102  	if (!vma)
^1da177e4c3f41 Linus Torvalds     2005-04-16  103  		goto bad_area;
^1da177e4c3f41 Linus Torvalds     2005-04-16  104  	if (vma->vm_start <= address)
^1da177e4c3f41 Linus Torvalds     2005-04-16  105  		goto good_area;
^1da177e4c3f41 Linus Torvalds     2005-04-16  106  	if (!(vma->vm_flags & VM_GROWSDOWN))
^1da177e4c3f41 Linus Torvalds     2005-04-16  107  		goto bad_area;
^1da177e4c3f41 Linus Torvalds     2005-04-16  108  	if (expand_stack(vma, address))
^1da177e4c3f41 Linus Torvalds     2005-04-16  109  		goto bad_area;
^1da177e4c3f41 Linus Torvalds     2005-04-16  110  /*
^1da177e4c3f41 Linus Torvalds     2005-04-16  111   * Ok, we have a good vm_area for this memory access, so
^1da177e4c3f41 Linus Torvalds     2005-04-16  112   * we can handle it..
^1da177e4c3f41 Linus Torvalds     2005-04-16  113   */
^1da177e4c3f41 Linus Torvalds     2005-04-16  114  good_area:
f43a54a0d9168d Eric W. Biederman  2018-04-15  115  	si_code = SEGV_ACCERR;
^1da177e4c3f41 Linus Torvalds     2005-04-16  116  
^1da177e4c3f41 Linus Torvalds     2005-04-16  117  	if (write) {
^1da177e4c3f41 Linus Torvalds     2005-04-16  118  		if (!(vma->vm_flags & VM_WRITE))
^1da177e4c3f41 Linus Torvalds     2005-04-16  119  			goto bad_area;
759496ba6407c6 Johannes Weiner    2013-09-12  120  		flags |= FAULT_FLAG_WRITE;
6dd9344cfc41bc David Daney        2010-02-10  121  	} else {
05857c64ecf897 Steven J. Hill     2012-09-13  122  		if (cpu_has_rixi) {
6dd9344cfc41bc David Daney        2010-02-10  123  			if (address == regs->cp0_epc && !(vma->vm_flags & VM_EXEC)) {
6dd9344cfc41bc David Daney        2010-02-10  124  #if 0
6dd9344cfc41bc David Daney        2010-02-10  125  				pr_notice("Cpu%d[%s:%d:%0*lx:%ld:%0*lx] XI violation\n",
6dd9344cfc41bc David Daney        2010-02-10  126  					  raw_smp_processor_id(),
6dd9344cfc41bc David Daney        2010-02-10  127  					  current->comm, current->pid,
6dd9344cfc41bc David Daney        2010-02-10  128  					  field, address, write,
6dd9344cfc41bc David Daney        2010-02-10  129  					  field, regs->cp0_epc);
6dd9344cfc41bc David Daney        2010-02-10  130  #endif
6dd9344cfc41bc David Daney        2010-02-10  131  				goto bad_area;
6dd9344cfc41bc David Daney        2010-02-10  132  			}
e070dab73523bc Ralf Baechle       2015-07-23  133  			if (!(vma->vm_flags & VM_READ) &&
e070dab73523bc Ralf Baechle       2015-07-23  134  			    exception_epc(regs) != address) {
6dd9344cfc41bc David Daney        2010-02-10  135  #if 0
6dd9344cfc41bc David Daney        2010-02-10  136  				pr_notice("Cpu%d[%s:%d:%0*lx:%ld:%0*lx] RI violation\n",
6dd9344cfc41bc David Daney        2010-02-10  137  					  raw_smp_processor_id(),
6dd9344cfc41bc David Daney        2010-02-10  138  					  current->comm, current->pid,
6dd9344cfc41bc David Daney        2010-02-10  139  					  field, address, write,
6dd9344cfc41bc David Daney        2010-02-10  140  					  field, regs->cp0_epc);
6dd9344cfc41bc David Daney        2010-02-10  141  #endif
6dd9344cfc41bc David Daney        2010-02-10  142  				goto bad_area;
6dd9344cfc41bc David Daney        2010-02-10  143  			}
^1da177e4c3f41 Linus Torvalds     2005-04-16  144  		} else {
5093c5872be3a0 Anshuman Khandual  2020-04-06  145  			if (unlikely(!vma_is_accessible(vma)))
^1da177e4c3f41 Linus Torvalds     2005-04-16  146  				goto bad_area;
^1da177e4c3f41 Linus Torvalds     2005-04-16  147  		}
6dd9344cfc41bc David Daney        2010-02-10  148  	}
^1da177e4c3f41 Linus Torvalds     2005-04-16  149  
^1da177e4c3f41 Linus Torvalds     2005-04-16  150  	/*
^1da177e4c3f41 Linus Torvalds     2005-04-16  151  	 * If for any reason at all we couldn't handle the fault,
^1da177e4c3f41 Linus Torvalds     2005-04-16  152  	 * make sure we exit gracefully rather than endlessly redo
^1da177e4c3f41 Linus Torvalds     2005-04-16  153  	 * the fault.
^1da177e4c3f41 Linus Torvalds     2005-04-16  154  	 */
dcddffd41d3f1d Kirill A. Shutemov 2016-07-26  155  	fault = handle_mm_fault(vma, address, flags);
43ca4957a15a12 Kautuk Consul      2011-12-23  156  
4ef873226ceb9c Peter Xu           2020-04-01  157  	if (fault_signal_pending(fault, regs))
43ca4957a15a12 Kautuk Consul      2011-12-23  158  		return;
43ca4957a15a12 Kautuk Consul      2011-12-23  159  
a8b0ca17b80e92 Peter Zijlstra     2011-06-27  160  	perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address);
83c54070ee1a2d Nick Piggin        2007-07-19  161  	if (unlikely(fault & VM_FAULT_ERROR)) {
83c54070ee1a2d Nick Piggin        2007-07-19  162  		if (fault & VM_FAULT_OOM)
^1da177e4c3f41 Linus Torvalds     2005-04-16  163  			goto out_of_memory;
33692f27597fca Linus Torvalds     2015-01-29  164  		else if (fault & VM_FAULT_SIGSEGV)
33692f27597fca Linus Torvalds     2015-01-29  165  			goto bad_area;
83c54070ee1a2d Nick Piggin        2007-07-19  166  		else if (fault & VM_FAULT_SIGBUS)
83c54070ee1a2d Nick Piggin        2007-07-19  167  			goto do_sigbus;
^1da177e4c3f41 Linus Torvalds     2005-04-16  168  		BUG();
^1da177e4c3f41 Linus Torvalds     2005-04-16  169  	}
43ca4957a15a12 Kautuk Consul      2011-12-23  170  	if (flags & FAULT_FLAG_ALLOW_RETRY) {
7f788d2d530858 Dengcheng Zhu      2010-10-12  171  		if (fault & VM_FAULT_MAJOR) {
43ca4957a15a12 Kautuk Consul      2011-12-23  172  			perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MAJ, 1,
43ca4957a15a12 Kautuk Consul      2011-12-23  173  						  regs, address);
83c54070ee1a2d Nick Piggin        2007-07-19  174  			tsk->maj_flt++;
7f788d2d530858 Dengcheng Zhu      2010-10-12  175  		} else {
43ca4957a15a12 Kautuk Consul      2011-12-23  176  			perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MIN, 1,
43ca4957a15a12 Kautuk Consul      2011-12-23  177  						  regs, address);
83c54070ee1a2d Nick Piggin        2007-07-19  178  			tsk->min_flt++;
7f788d2d530858 Dengcheng Zhu      2010-10-12  179  		}
43ca4957a15a12 Kautuk Consul      2011-12-23  180  		if (fault & VM_FAULT_RETRY) {
45cac65b0fcd28 Shaohua Li         2012-10-08  181  			flags |= FAULT_FLAG_TRIED;
43ca4957a15a12 Kautuk Consul      2011-12-23  182  
43ca4957a15a12 Kautuk Consul      2011-12-23  183  			/*
43ca4957a15a12 Kautuk Consul      2011-12-23  184  			 * No need to up_read(&mm->mmap_sem) as we would
43ca4957a15a12 Kautuk Consul      2011-12-23  185  			 * have already released it in __lock_page_or_retry
43ca4957a15a12 Kautuk Consul      2011-12-23  186  			 * in mm/filemap.c.
43ca4957a15a12 Kautuk Consul      2011-12-23  187  			 */
43ca4957a15a12 Kautuk Consul      2011-12-23  188  
43ca4957a15a12 Kautuk Consul      2011-12-23  189  			goto retry;
43ca4957a15a12 Kautuk Consul      2011-12-23  190  		}
43ca4957a15a12 Kautuk Consul      2011-12-23  191  	}
^1da177e4c3f41 Linus Torvalds     2005-04-16  192  
89154dd5313f77 Michel Lespinasse  2020-06-08  193  	mmap_read_unlock(mm);
^1da177e4c3f41 Linus Torvalds     2005-04-16  194  	return;
^1da177e4c3f41 Linus Torvalds     2005-04-16  195  
^1da177e4c3f41 Linus Torvalds     2005-04-16  196  /*
^1da177e4c3f41 Linus Torvalds     2005-04-16  197   * Something tried to access memory that isn't in our memory map..
^1da177e4c3f41 Linus Torvalds     2005-04-16  198   * Fix it, but check if it's kernel or user first..
^1da177e4c3f41 Linus Torvalds     2005-04-16  199   */
^1da177e4c3f41 Linus Torvalds     2005-04-16  200  bad_area:
89154dd5313f77 Michel Lespinasse  2020-06-08  201  	mmap_read_unlock(mm);
^1da177e4c3f41 Linus Torvalds     2005-04-16  202  
^1da177e4c3f41 Linus Torvalds     2005-04-16  203  bad_area_nosemaphore:
^1da177e4c3f41 Linus Torvalds     2005-04-16  204  	/* User mode accesses just cause a SIGSEGV */
^1da177e4c3f41 Linus Torvalds     2005-04-16  205  	if (user_mode(regs)) {
^1da177e4c3f41 Linus Torvalds     2005-04-16  206  		tsk->thread.cp0_badvaddr = address;
^1da177e4c3f41 Linus Torvalds     2005-04-16  207  		tsk->thread.error_code = write;
d79d853df12655 Markos Chandras    2015-01-21  208  		if (show_unhandled_signals &&
d79d853df12655 Markos Chandras    2015-01-21  209  		    unhandled_signal(tsk, SIGSEGV) &&
d79d853df12655 Markos Chandras    2015-01-21  210  		    __ratelimit(&ratelimit_state)) {
2a872a5dcec705 Matt Redfearn      2016-11-09  211  			pr_info("do_page_fault(): sending SIGSEGV to %s for invalid %s %0*lx\n",
^1da177e4c3f41 Linus Torvalds     2005-04-16  212  				tsk->comm,
^1da177e4c3f41 Linus Torvalds     2005-04-16  213  				write ? "write access to" : "read access from",
d79d853df12655 Markos Chandras    2015-01-21  214  				field, address);
d79d853df12655 Markos Chandras    2015-01-21  215  			pr_info("epc = %0*lx in", field,
d79d853df12655 Markos Chandras    2015-01-21  216  				(unsigned long) regs->cp0_epc);
2a872a5dcec705 Matt Redfearn      2016-11-09  217  			print_vma_addr(KERN_CONT " ", regs->cp0_epc);
2a872a5dcec705 Matt Redfearn      2016-11-09  218  			pr_cont("\n");
d79d853df12655 Markos Chandras    2015-01-21  219  			pr_info("ra  = %0*lx in", field,
d79d853df12655 Markos Chandras    2015-01-21  220  				(unsigned long) regs->regs[31]);
2a872a5dcec705 Matt Redfearn      2016-11-09  221  			print_vma_addr(KERN_CONT " ", regs->regs[31]);
2a872a5dcec705 Matt Redfearn      2016-11-09  222  			pr_cont("\n");
d79d853df12655 Markos Chandras    2015-01-21  223  		}
e3b28831c18c6c Ralf Baechle       2015-07-28  224  		current->thread.trap_nr = (regs->cp0_cause >> 2) & 0x1f;
2e1661d2673667 Eric W. Biederman  2019-05-23  225  		force_sig_fault(SIGSEGV, si_code, (void __user *)address);
^1da177e4c3f41 Linus Torvalds     2005-04-16  226  		return;
^1da177e4c3f41 Linus Torvalds     2005-04-16  227  	}
^1da177e4c3f41 Linus Torvalds     2005-04-16  228  
^1da177e4c3f41 Linus Torvalds     2005-04-16  229  no_context:
^1da177e4c3f41 Linus Torvalds     2005-04-16  230  	/* Are we prepared to handle this kernel fault?	 */
^1da177e4c3f41 Linus Torvalds     2005-04-16  231  	if (fixup_exception(regs)) {
^1da177e4c3f41 Linus Torvalds     2005-04-16  232  		current->thread.cp0_baduaddr = address;
^1da177e4c3f41 Linus Torvalds     2005-04-16  233  		return;
^1da177e4c3f41 Linus Torvalds     2005-04-16  234  	}
^1da177e4c3f41 Linus Torvalds     2005-04-16  235  
^1da177e4c3f41 Linus Torvalds     2005-04-16  236  	/*
^1da177e4c3f41 Linus Torvalds     2005-04-16  237  	 * Oops. The kernel tried to access some bad page. We'll have to
^1da177e4c3f41 Linus Torvalds     2005-04-16  238  	 * terminate things with extreme prejudice.
^1da177e4c3f41 Linus Torvalds     2005-04-16  239  	 */
^1da177e4c3f41 Linus Torvalds     2005-04-16  240  	bust_spinlocks(1);
^1da177e4c3f41 Linus Torvalds     2005-04-16  241  
^1da177e4c3f41 Linus Torvalds     2005-04-16  242  	printk(KERN_ALERT "CPU %d Unable to handle kernel paging request at "
^1da177e4c3f41 Linus Torvalds     2005-04-16  243  	       "virtual address %0*lx, epc == %0*lx, ra == %0*lx\n",
d6f703602fee8f Ralf Baechle       2007-03-29  244  	       raw_smp_processor_id(), field, address, field, regs->cp0_epc,
^1da177e4c3f41 Linus Torvalds     2005-04-16  245  	       field,  regs->regs[31]);
^1da177e4c3f41 Linus Torvalds     2005-04-16  246  	die("Oops", regs);
^1da177e4c3f41 Linus Torvalds     2005-04-16  247  
c7c1e3846bac1e Ralf Baechle       2009-01-12  248  out_of_memory:
^1da177e4c3f41 Linus Torvalds     2005-04-16  249  	/*
c7c1e3846bac1e Ralf Baechle       2009-01-12  250  	 * We ran out of memory, call the OOM killer, and return the userspace
c7c1e3846bac1e Ralf Baechle       2009-01-12  251  	 * (which will retry the fault, or kill us if we got oom-killed).
^1da177e4c3f41 Linus Torvalds     2005-04-16  252  	 */
89154dd5313f77 Michel Lespinasse  2020-06-08  253  	mmap_read_unlock(mm);
871341023c771a Johannes Weiner    2013-09-12  254  	if (!user_mode(regs))
871341023c771a Johannes Weiner    2013-09-12  255  		goto no_context;
c7c1e3846bac1e Ralf Baechle       2009-01-12  256  	pagefault_out_of_memory();
c7c1e3846bac1e Ralf Baechle       2009-01-12  257  	return;
^1da177e4c3f41 Linus Torvalds     2005-04-16  258  
^1da177e4c3f41 Linus Torvalds     2005-04-16  259  do_sigbus:
89154dd5313f77 Michel Lespinasse  2020-06-08  260  	mmap_read_unlock(mm);
^1da177e4c3f41 Linus Torvalds     2005-04-16  261  
^1da177e4c3f41 Linus Torvalds     2005-04-16  262  	/* Kernel mode? Handle exceptions or die */
^1da177e4c3f41 Linus Torvalds     2005-04-16  263  	if (!user_mode(regs))
^1da177e4c3f41 Linus Torvalds     2005-04-16  264  		goto no_context;
72f941af88a543 Paul Burton        2017-03-30  265  
^1da177e4c3f41 Linus Torvalds     2005-04-16  266  	/*
^1da177e4c3f41 Linus Torvalds     2005-04-16  267  	 * Send a sigbus, regardless of whether we were in kernel
^1da177e4c3f41 Linus Torvalds     2005-04-16  268  	 * or user mode.
^1da177e4c3f41 Linus Torvalds     2005-04-16  269  	 */
41c594ab65fc89 Ralf Baechle       2006-04-05  270  #if 0
41c594ab65fc89 Ralf Baechle       2006-04-05  271  	printk("do_page_fault() #3: sending SIGBUS to %s for "
41c594ab65fc89 Ralf Baechle       2006-04-05  272  	       "invalid %s\n%0*lx (epc == %0*lx, ra == %0*lx)\n",
41c594ab65fc89 Ralf Baechle       2006-04-05  273  	       tsk->comm,
41c594ab65fc89 Ralf Baechle       2006-04-05  274  	       write ? "write access to" : "read access from",
41c594ab65fc89 Ralf Baechle       2006-04-05  275  	       field, address,
41c594ab65fc89 Ralf Baechle       2006-04-05  276  	       field, (unsigned long) regs->cp0_epc,
41c594ab65fc89 Ralf Baechle       2006-04-05  277  	       field, (unsigned long) regs->regs[31]);
41c594ab65fc89 Ralf Baechle       2006-04-05  278  #endif
e3b28831c18c6c Ralf Baechle       2015-07-28  279  	current->thread.trap_nr = (regs->cp0_cause >> 2) & 0x1f;
^1da177e4c3f41 Linus Torvalds     2005-04-16  280  	tsk->thread.cp0_badvaddr = address;
2e1661d2673667 Eric W. Biederman  2019-05-23  281  	force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *)address);
^1da177e4c3f41 Linus Torvalds     2005-04-16  282  
^1da177e4c3f41 Linus Torvalds     2005-04-16  283  	return;
2ca2ebfd952d03 David Daney        2009-09-02  284  #ifndef CONFIG_64BIT
^1da177e4c3f41 Linus Torvalds     2005-04-16  285  vmalloc_fault:
^1da177e4c3f41 Linus Torvalds     2005-04-16  286  	{
^1da177e4c3f41 Linus Torvalds     2005-04-16  287  		/*
^1da177e4c3f41 Linus Torvalds     2005-04-16  288  		 * Synchronize this task's top level page-table
^1da177e4c3f41 Linus Torvalds     2005-04-16  289  		 * with the 'reference' page table.
^1da177e4c3f41 Linus Torvalds     2005-04-16  290  		 *
^1da177e4c3f41 Linus Torvalds     2005-04-16  291  		 * Do _not_ use "tsk" here. We might be inside
^1da177e4c3f41 Linus Torvalds     2005-04-16  292  		 * an interrupt in the middle of a task switch..
^1da177e4c3f41 Linus Torvalds     2005-04-16  293  		 */
31168f033e3751 Mike Rapoport      2019-11-21  294  		int offset = pgd_index(address);
^1da177e4c3f41 Linus Torvalds     2005-04-16  295  		pgd_t *pgd, *pgd_k;
2bee1b58484f03 Mike Rapoport      2019-11-21  296  		p4d_t *p4d, *p4d_k;
c6e8b587718c48 Ralf Baechle       2005-02-10  297  		pud_t *pud, *pud_k;
^1da177e4c3f41 Linus Torvalds     2005-04-16  298  		pmd_t *pmd, *pmd_k;
^1da177e4c3f41 Linus Torvalds     2005-04-16  299  		pte_t *pte_k;
^1da177e4c3f41 Linus Torvalds     2005-04-16  300  
d6f703602fee8f Ralf Baechle       2007-03-29  301  		pgd = (pgd_t *) pgd_current[raw_smp_processor_id()] + offset;
^1da177e4c3f41 Linus Torvalds     2005-04-16  302  		pgd_k = init_mm.pgd + offset;
^1da177e4c3f41 Linus Torvalds     2005-04-16  303  
^1da177e4c3f41 Linus Torvalds     2005-04-16  304  		if (!pgd_present(*pgd_k))
^1da177e4c3f41 Linus Torvalds     2005-04-16  305  			goto no_context;
^1da177e4c3f41 Linus Torvalds     2005-04-16  306  		set_pgd(pgd, *pgd_k);
^1da177e4c3f41 Linus Torvalds     2005-04-16  307  
2bee1b58484f03 Mike Rapoport      2019-11-21  308  		p4d = p4d_offset(pgd, address);
2bee1b58484f03 Mike Rapoport      2019-11-21  309  		p4d_k = p4d_offset(pgd_k, address);
2bee1b58484f03 Mike Rapoport      2019-11-21  310  		if (!p4d_present(*p4d_k))
2bee1b58484f03 Mike Rapoport      2019-11-21  311  			goto no_context;
2bee1b58484f03 Mike Rapoport      2019-11-21  312  
2bee1b58484f03 Mike Rapoport      2019-11-21  313  		pud = pud_offset(p4d, address);
2bee1b58484f03 Mike Rapoport      2019-11-21  314  		pud_k = pud_offset(p4d_k, address);
c6e8b587718c48 Ralf Baechle       2005-02-10  315  		if (!pud_present(*pud_k))
c6e8b587718c48 Ralf Baechle       2005-02-10  316  			goto no_context;
c6e8b587718c48 Ralf Baechle       2005-02-10  317  
c6e8b587718c48 Ralf Baechle       2005-02-10  318  		pmd = pmd_offset(pud, address);
c6e8b587718c48 Ralf Baechle       2005-02-10  319  		pmd_k = pmd_offset(pud_k, address);
^1da177e4c3f41 Linus Torvalds     2005-04-16  320  		if (!pmd_present(*pmd_k))
^1da177e4c3f41 Linus Torvalds     2005-04-16  321  			goto no_context;
^1da177e4c3f41 Linus Torvalds     2005-04-16  322  		set_pmd(pmd, *pmd_k);
^1da177e4c3f41 Linus Torvalds     2005-04-16  323  
^1da177e4c3f41 Linus Torvalds     2005-04-16  324  		pte_k = pte_offset_kernel(pmd_k, address);
^1da177e4c3f41 Linus Torvalds     2005-04-16  325  		if (!pte_present(*pte_k))
^1da177e4c3f41 Linus Torvalds     2005-04-16  326  			goto no_context;
^1da177e4c3f41 Linus Torvalds     2005-04-16 @327  		return;
^1da177e4c3f41 Linus Torvalds     2005-04-16  328  	}
2ca2ebfd952d03 David Daney        2009-09-02  329  #endif
^1da177e4c3f41 Linus Torvalds     2005-04-16  330  }
c3fc5cd5c5a5f4 Ralf Baechle       2013-05-29  331  

:::::: The code at line 327 was first introduced by commit
:::::: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 Linux-2.6.12-rc2

:::::: TO: Linus Torvalds <torvalds@ppc970.osdl.org>
:::::: CC: Linus Torvalds <torvalds@ppc970.osdl.org>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 32439 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

* arch/mips/mm/fault.c:327 __do_page_fault() warn: inconsistent returns 'mm->mmap_lock'.
@ 2021-01-08 18:22 kernel test robot
  0 siblings, 0 replies; 3+ messages in thread
From: kernel test robot @ 2021-01-08 18:22 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 20324 bytes --]

CC: kbuild-all(a)lists.01.org
CC: linux-kernel(a)vger.kernel.org
TO: Michel Lespinasse <walken@google.com>
CC: Andrew Morton <akpm@linux-foundation.org>
CC: Linux Memory Management List <linux-mm@kvack.org>
CC: Vlastimil Babka <vbabka@suse.cz>
CC: Davidlohr Bueso <dbueso@suse.de>
CC: Daniel Jordan <daniel.m.jordan@oracle.com>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   f5e6c330254ae691f6d7befe61c786eb5056007e
commit: da1c55f1b272f4bd54671d459b39ea7b54944ef9 mmap locking API: rename mmap_sem to mmap_lock
date:   7 months ago
:::::: branch date: 22 hours ago
:::::: commit date: 7 months ago
config: mips-randconfig-m031-20210108 (attached as .config)
compiler: mipsel-linux-gcc (GCC) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>

smatch warnings:
arch/mips/mm/fault.c:327 __do_page_fault() warn: inconsistent returns 'mm->mmap_lock'.

vim +327 arch/mips/mm/fault.c

^1da177e4c3f415 Linus Torvalds     2005-04-16   89  
^1da177e4c3f415 Linus Torvalds     2005-04-16   90  	/*
^1da177e4c3f415 Linus Torvalds     2005-04-16   91  	 * If we're in an interrupt or have no user
^1da177e4c3f415 Linus Torvalds     2005-04-16   92  	 * context, we must not take the fault..
^1da177e4c3f415 Linus Torvalds     2005-04-16   93  	 */
70ffdb9393a7264 David Hildenbrand  2015-05-11   94  	if (faulthandler_disabled() || !mm)
^1da177e4c3f415 Linus Torvalds     2005-04-16   95  		goto bad_area_nosemaphore;
^1da177e4c3f415 Linus Torvalds     2005-04-16   96  
759496ba6407c69 Johannes Weiner    2013-09-12   97  	if (user_mode(regs))
759496ba6407c69 Johannes Weiner    2013-09-12   98  		flags |= FAULT_FLAG_USER;
43ca4957a15a120 Kautuk Consul      2011-12-23   99  retry:
89154dd5313f774 Michel Lespinasse  2020-06-08  100  	mmap_read_lock(mm);
^1da177e4c3f415 Linus Torvalds     2005-04-16  101  	vma = find_vma(mm, address);
^1da177e4c3f415 Linus Torvalds     2005-04-16  102  	if (!vma)
^1da177e4c3f415 Linus Torvalds     2005-04-16  103  		goto bad_area;
^1da177e4c3f415 Linus Torvalds     2005-04-16  104  	if (vma->vm_start <= address)
^1da177e4c3f415 Linus Torvalds     2005-04-16  105  		goto good_area;
^1da177e4c3f415 Linus Torvalds     2005-04-16  106  	if (!(vma->vm_flags & VM_GROWSDOWN))
^1da177e4c3f415 Linus Torvalds     2005-04-16  107  		goto bad_area;
^1da177e4c3f415 Linus Torvalds     2005-04-16  108  	if (expand_stack(vma, address))
^1da177e4c3f415 Linus Torvalds     2005-04-16  109  		goto bad_area;
^1da177e4c3f415 Linus Torvalds     2005-04-16  110  /*
^1da177e4c3f415 Linus Torvalds     2005-04-16  111   * Ok, we have a good vm_area for this memory access, so
^1da177e4c3f415 Linus Torvalds     2005-04-16  112   * we can handle it..
^1da177e4c3f415 Linus Torvalds     2005-04-16  113   */
^1da177e4c3f415 Linus Torvalds     2005-04-16  114  good_area:
f43a54a0d9168de Eric W. Biederman  2018-04-15  115  	si_code = SEGV_ACCERR;
^1da177e4c3f415 Linus Torvalds     2005-04-16  116  
^1da177e4c3f415 Linus Torvalds     2005-04-16  117  	if (write) {
^1da177e4c3f415 Linus Torvalds     2005-04-16  118  		if (!(vma->vm_flags & VM_WRITE))
^1da177e4c3f415 Linus Torvalds     2005-04-16  119  			goto bad_area;
759496ba6407c69 Johannes Weiner    2013-09-12  120  		flags |= FAULT_FLAG_WRITE;
6dd9344cfc41bcc David Daney        2010-02-10  121  	} else {
05857c64ecf8972 Steven J. Hill     2012-09-13  122  		if (cpu_has_rixi) {
6dd9344cfc41bcc David Daney        2010-02-10  123  			if (address == regs->cp0_epc && !(vma->vm_flags & VM_EXEC)) {
6dd9344cfc41bcc David Daney        2010-02-10  124  #if 0
6dd9344cfc41bcc David Daney        2010-02-10  125  				pr_notice("Cpu%d[%s:%d:%0*lx:%ld:%0*lx] XI violation\n",
6dd9344cfc41bcc David Daney        2010-02-10  126  					  raw_smp_processor_id(),
6dd9344cfc41bcc David Daney        2010-02-10  127  					  current->comm, current->pid,
6dd9344cfc41bcc David Daney        2010-02-10  128  					  field, address, write,
6dd9344cfc41bcc David Daney        2010-02-10  129  					  field, regs->cp0_epc);
6dd9344cfc41bcc David Daney        2010-02-10  130  #endif
6dd9344cfc41bcc David Daney        2010-02-10  131  				goto bad_area;
6dd9344cfc41bcc David Daney        2010-02-10  132  			}
e070dab73523bcb Ralf Baechle       2015-07-23  133  			if (!(vma->vm_flags & VM_READ) &&
e070dab73523bcb Ralf Baechle       2015-07-23  134  			    exception_epc(regs) != address) {
6dd9344cfc41bcc David Daney        2010-02-10  135  #if 0
6dd9344cfc41bcc David Daney        2010-02-10  136  				pr_notice("Cpu%d[%s:%d:%0*lx:%ld:%0*lx] RI violation\n",
6dd9344cfc41bcc David Daney        2010-02-10  137  					  raw_smp_processor_id(),
6dd9344cfc41bcc David Daney        2010-02-10  138  					  current->comm, current->pid,
6dd9344cfc41bcc David Daney        2010-02-10  139  					  field, address, write,
6dd9344cfc41bcc David Daney        2010-02-10  140  					  field, regs->cp0_epc);
6dd9344cfc41bcc David Daney        2010-02-10  141  #endif
6dd9344cfc41bcc David Daney        2010-02-10  142  				goto bad_area;
6dd9344cfc41bcc David Daney        2010-02-10  143  			}
^1da177e4c3f415 Linus Torvalds     2005-04-16  144  		} else {
5093c5872be3a04 Anshuman Khandual  2020-04-06  145  			if (unlikely(!vma_is_accessible(vma)))
^1da177e4c3f415 Linus Torvalds     2005-04-16  146  				goto bad_area;
^1da177e4c3f415 Linus Torvalds     2005-04-16  147  		}
6dd9344cfc41bcc David Daney        2010-02-10  148  	}
^1da177e4c3f415 Linus Torvalds     2005-04-16  149  
^1da177e4c3f415 Linus Torvalds     2005-04-16  150  	/*
^1da177e4c3f415 Linus Torvalds     2005-04-16  151  	 * If for any reason at all we couldn't handle the fault,
^1da177e4c3f415 Linus Torvalds     2005-04-16  152  	 * make sure we exit gracefully rather than endlessly redo
^1da177e4c3f415 Linus Torvalds     2005-04-16  153  	 * the fault.
^1da177e4c3f415 Linus Torvalds     2005-04-16  154  	 */
dcddffd41d3f1d3 Kirill A. Shutemov 2016-07-26  155  	fault = handle_mm_fault(vma, address, flags);
43ca4957a15a120 Kautuk Consul      2011-12-23  156  
4ef873226ceb9c7 Peter Xu           2020-04-01  157  	if (fault_signal_pending(fault, regs))
43ca4957a15a120 Kautuk Consul      2011-12-23  158  		return;
43ca4957a15a120 Kautuk Consul      2011-12-23  159  
a8b0ca17b80e92f Peter Zijlstra     2011-06-27  160  	perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address);
83c54070ee1a2d0 Nick Piggin        2007-07-19  161  	if (unlikely(fault & VM_FAULT_ERROR)) {
83c54070ee1a2d0 Nick Piggin        2007-07-19  162  		if (fault & VM_FAULT_OOM)
^1da177e4c3f415 Linus Torvalds     2005-04-16  163  			goto out_of_memory;
33692f27597fcab Linus Torvalds     2015-01-29  164  		else if (fault & VM_FAULT_SIGSEGV)
33692f27597fcab Linus Torvalds     2015-01-29  165  			goto bad_area;
83c54070ee1a2d0 Nick Piggin        2007-07-19  166  		else if (fault & VM_FAULT_SIGBUS)
83c54070ee1a2d0 Nick Piggin        2007-07-19  167  			goto do_sigbus;
^1da177e4c3f415 Linus Torvalds     2005-04-16  168  		BUG();
^1da177e4c3f415 Linus Torvalds     2005-04-16  169  	}
43ca4957a15a120 Kautuk Consul      2011-12-23  170  	if (flags & FAULT_FLAG_ALLOW_RETRY) {
7f788d2d5308581 Dengcheng Zhu      2010-10-12  171  		if (fault & VM_FAULT_MAJOR) {
43ca4957a15a120 Kautuk Consul      2011-12-23  172  			perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MAJ, 1,
43ca4957a15a120 Kautuk Consul      2011-12-23  173  						  regs, address);
83c54070ee1a2d0 Nick Piggin        2007-07-19  174  			tsk->maj_flt++;
7f788d2d5308581 Dengcheng Zhu      2010-10-12  175  		} else {
43ca4957a15a120 Kautuk Consul      2011-12-23  176  			perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MIN, 1,
43ca4957a15a120 Kautuk Consul      2011-12-23  177  						  regs, address);
83c54070ee1a2d0 Nick Piggin        2007-07-19  178  			tsk->min_flt++;
7f788d2d5308581 Dengcheng Zhu      2010-10-12  179  		}
43ca4957a15a120 Kautuk Consul      2011-12-23  180  		if (fault & VM_FAULT_RETRY) {
45cac65b0fcd287 Shaohua Li         2012-10-08  181  			flags |= FAULT_FLAG_TRIED;
43ca4957a15a120 Kautuk Consul      2011-12-23  182  
43ca4957a15a120 Kautuk Consul      2011-12-23  183  			/*
43ca4957a15a120 Kautuk Consul      2011-12-23  184  			 * No need to up_read(&mm->mmap_sem) as we would
43ca4957a15a120 Kautuk Consul      2011-12-23  185  			 * have already released it in __lock_page_or_retry
43ca4957a15a120 Kautuk Consul      2011-12-23  186  			 * in mm/filemap.c.
43ca4957a15a120 Kautuk Consul      2011-12-23  187  			 */
43ca4957a15a120 Kautuk Consul      2011-12-23  188  
43ca4957a15a120 Kautuk Consul      2011-12-23  189  			goto retry;
43ca4957a15a120 Kautuk Consul      2011-12-23  190  		}
43ca4957a15a120 Kautuk Consul      2011-12-23  191  	}
^1da177e4c3f415 Linus Torvalds     2005-04-16  192  
89154dd5313f774 Michel Lespinasse  2020-06-08  193  	mmap_read_unlock(mm);
^1da177e4c3f415 Linus Torvalds     2005-04-16  194  	return;
^1da177e4c3f415 Linus Torvalds     2005-04-16  195  
^1da177e4c3f415 Linus Torvalds     2005-04-16  196  /*
^1da177e4c3f415 Linus Torvalds     2005-04-16  197   * Something tried to access memory that isn't in our memory map..
^1da177e4c3f415 Linus Torvalds     2005-04-16  198   * Fix it, but check if it's kernel or user first..
^1da177e4c3f415 Linus Torvalds     2005-04-16  199   */
^1da177e4c3f415 Linus Torvalds     2005-04-16  200  bad_area:
89154dd5313f774 Michel Lespinasse  2020-06-08  201  	mmap_read_unlock(mm);
^1da177e4c3f415 Linus Torvalds     2005-04-16  202  
^1da177e4c3f415 Linus Torvalds     2005-04-16  203  bad_area_nosemaphore:
^1da177e4c3f415 Linus Torvalds     2005-04-16  204  	/* User mode accesses just cause a SIGSEGV */
^1da177e4c3f415 Linus Torvalds     2005-04-16  205  	if (user_mode(regs)) {
^1da177e4c3f415 Linus Torvalds     2005-04-16  206  		tsk->thread.cp0_badvaddr = address;
^1da177e4c3f415 Linus Torvalds     2005-04-16  207  		tsk->thread.error_code = write;
d79d853df126553 Markos Chandras    2015-01-21  208  		if (show_unhandled_signals &&
d79d853df126553 Markos Chandras    2015-01-21  209  		    unhandled_signal(tsk, SIGSEGV) &&
d79d853df126553 Markos Chandras    2015-01-21  210  		    __ratelimit(&ratelimit_state)) {
2a872a5dcec7052 Matt Redfearn      2016-11-09  211  			pr_info("do_page_fault(): sending SIGSEGV to %s for invalid %s %0*lx\n",
^1da177e4c3f415 Linus Torvalds     2005-04-16  212  				tsk->comm,
^1da177e4c3f415 Linus Torvalds     2005-04-16  213  				write ? "write access to" : "read access from",
d79d853df126553 Markos Chandras    2015-01-21  214  				field, address);
d79d853df126553 Markos Chandras    2015-01-21  215  			pr_info("epc = %0*lx in", field,
d79d853df126553 Markos Chandras    2015-01-21  216  				(unsigned long) regs->cp0_epc);
2a872a5dcec7052 Matt Redfearn      2016-11-09  217  			print_vma_addr(KERN_CONT " ", regs->cp0_epc);
2a872a5dcec7052 Matt Redfearn      2016-11-09  218  			pr_cont("\n");
d79d853df126553 Markos Chandras    2015-01-21  219  			pr_info("ra  = %0*lx in", field,
d79d853df126553 Markos Chandras    2015-01-21  220  				(unsigned long) regs->regs[31]);
2a872a5dcec7052 Matt Redfearn      2016-11-09  221  			print_vma_addr(KERN_CONT " ", regs->regs[31]);
2a872a5dcec7052 Matt Redfearn      2016-11-09  222  			pr_cont("\n");
d79d853df126553 Markos Chandras    2015-01-21  223  		}
e3b28831c18c6c9 Ralf Baechle       2015-07-28  224  		current->thread.trap_nr = (regs->cp0_cause >> 2) & 0x1f;
2e1661d2673667d Eric W. Biederman  2019-05-23  225  		force_sig_fault(SIGSEGV, si_code, (void __user *)address);
^1da177e4c3f415 Linus Torvalds     2005-04-16  226  		return;
^1da177e4c3f415 Linus Torvalds     2005-04-16  227  	}
^1da177e4c3f415 Linus Torvalds     2005-04-16  228  
^1da177e4c3f415 Linus Torvalds     2005-04-16  229  no_context:
^1da177e4c3f415 Linus Torvalds     2005-04-16  230  	/* Are we prepared to handle this kernel fault?	 */
^1da177e4c3f415 Linus Torvalds     2005-04-16  231  	if (fixup_exception(regs)) {
^1da177e4c3f415 Linus Torvalds     2005-04-16  232  		current->thread.cp0_baduaddr = address;
^1da177e4c3f415 Linus Torvalds     2005-04-16  233  		return;
^1da177e4c3f415 Linus Torvalds     2005-04-16  234  	}
^1da177e4c3f415 Linus Torvalds     2005-04-16  235  
^1da177e4c3f415 Linus Torvalds     2005-04-16  236  	/*
^1da177e4c3f415 Linus Torvalds     2005-04-16  237  	 * Oops. The kernel tried to access some bad page. We'll have to
^1da177e4c3f415 Linus Torvalds     2005-04-16  238  	 * terminate things with extreme prejudice.
^1da177e4c3f415 Linus Torvalds     2005-04-16  239  	 */
^1da177e4c3f415 Linus Torvalds     2005-04-16  240  	bust_spinlocks(1);
^1da177e4c3f415 Linus Torvalds     2005-04-16  241  
^1da177e4c3f415 Linus Torvalds     2005-04-16  242  	printk(KERN_ALERT "CPU %d Unable to handle kernel paging request at "
^1da177e4c3f415 Linus Torvalds     2005-04-16  243  	       "virtual address %0*lx, epc == %0*lx, ra == %0*lx\n",
d6f703602fee8f8 Ralf Baechle       2007-03-29  244  	       raw_smp_processor_id(), field, address, field, regs->cp0_epc,
^1da177e4c3f415 Linus Torvalds     2005-04-16  245  	       field,  regs->regs[31]);
^1da177e4c3f415 Linus Torvalds     2005-04-16  246  	die("Oops", regs);
^1da177e4c3f415 Linus Torvalds     2005-04-16  247  
c7c1e3846bac1e4 Ralf Baechle       2009-01-12  248  out_of_memory:
^1da177e4c3f415 Linus Torvalds     2005-04-16  249  	/*
c7c1e3846bac1e4 Ralf Baechle       2009-01-12  250  	 * We ran out of memory, call the OOM killer, and return the userspace
c7c1e3846bac1e4 Ralf Baechle       2009-01-12  251  	 * (which will retry the fault, or kill us if we got oom-killed).
^1da177e4c3f415 Linus Torvalds     2005-04-16  252  	 */
89154dd5313f774 Michel Lespinasse  2020-06-08  253  	mmap_read_unlock(mm);
871341023c771ad Johannes Weiner    2013-09-12  254  	if (!user_mode(regs))
871341023c771ad Johannes Weiner    2013-09-12  255  		goto no_context;
c7c1e3846bac1e4 Ralf Baechle       2009-01-12  256  	pagefault_out_of_memory();
c7c1e3846bac1e4 Ralf Baechle       2009-01-12  257  	return;
^1da177e4c3f415 Linus Torvalds     2005-04-16  258  
^1da177e4c3f415 Linus Torvalds     2005-04-16  259  do_sigbus:
89154dd5313f774 Michel Lespinasse  2020-06-08  260  	mmap_read_unlock(mm);
^1da177e4c3f415 Linus Torvalds     2005-04-16  261  
^1da177e4c3f415 Linus Torvalds     2005-04-16  262  	/* Kernel mode? Handle exceptions or die */
^1da177e4c3f415 Linus Torvalds     2005-04-16  263  	if (!user_mode(regs))
^1da177e4c3f415 Linus Torvalds     2005-04-16  264  		goto no_context;
72f941af88a543e Paul Burton        2017-03-30  265  
^1da177e4c3f415 Linus Torvalds     2005-04-16  266  	/*
^1da177e4c3f415 Linus Torvalds     2005-04-16  267  	 * Send a sigbus, regardless of whether we were in kernel
^1da177e4c3f415 Linus Torvalds     2005-04-16  268  	 * or user mode.
^1da177e4c3f415 Linus Torvalds     2005-04-16  269  	 */
41c594ab65fc895 Ralf Baechle       2006-04-05  270  #if 0
41c594ab65fc895 Ralf Baechle       2006-04-05  271  	printk("do_page_fault() #3: sending SIGBUS to %s for "
41c594ab65fc895 Ralf Baechle       2006-04-05  272  	       "invalid %s\n%0*lx (epc == %0*lx, ra == %0*lx)\n",
41c594ab65fc895 Ralf Baechle       2006-04-05  273  	       tsk->comm,
41c594ab65fc895 Ralf Baechle       2006-04-05  274  	       write ? "write access to" : "read access from",
41c594ab65fc895 Ralf Baechle       2006-04-05  275  	       field, address,
41c594ab65fc895 Ralf Baechle       2006-04-05  276  	       field, (unsigned long) regs->cp0_epc,
41c594ab65fc895 Ralf Baechle       2006-04-05  277  	       field, (unsigned long) regs->regs[31]);
41c594ab65fc895 Ralf Baechle       2006-04-05  278  #endif
e3b28831c18c6c9 Ralf Baechle       2015-07-28  279  	current->thread.trap_nr = (regs->cp0_cause >> 2) & 0x1f;
^1da177e4c3f415 Linus Torvalds     2005-04-16  280  	tsk->thread.cp0_badvaddr = address;
2e1661d2673667d Eric W. Biederman  2019-05-23  281  	force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *)address);
^1da177e4c3f415 Linus Torvalds     2005-04-16  282  
^1da177e4c3f415 Linus Torvalds     2005-04-16  283  	return;
2ca2ebfd952d033 David Daney        2009-09-02  284  #ifndef CONFIG_64BIT
^1da177e4c3f415 Linus Torvalds     2005-04-16  285  vmalloc_fault:
^1da177e4c3f415 Linus Torvalds     2005-04-16  286  	{
^1da177e4c3f415 Linus Torvalds     2005-04-16  287  		/*
^1da177e4c3f415 Linus Torvalds     2005-04-16  288  		 * Synchronize this task's top level page-table
^1da177e4c3f415 Linus Torvalds     2005-04-16  289  		 * with the 'reference' page table.
^1da177e4c3f415 Linus Torvalds     2005-04-16  290  		 *
^1da177e4c3f415 Linus Torvalds     2005-04-16  291  		 * Do _not_ use "tsk" here. We might be inside
^1da177e4c3f415 Linus Torvalds     2005-04-16  292  		 * an interrupt in the middle of a task switch..
^1da177e4c3f415 Linus Torvalds     2005-04-16  293  		 */
31168f033e3751d Mike Rapoport      2019-11-21  294  		int offset = pgd_index(address);
^1da177e4c3f415 Linus Torvalds     2005-04-16  295  		pgd_t *pgd, *pgd_k;
2bee1b58484f036 Mike Rapoport      2019-11-21  296  		p4d_t *p4d, *p4d_k;
c6e8b587718c486 Ralf Baechle       2005-02-10  297  		pud_t *pud, *pud_k;
^1da177e4c3f415 Linus Torvalds     2005-04-16  298  		pmd_t *pmd, *pmd_k;
^1da177e4c3f415 Linus Torvalds     2005-04-16  299  		pte_t *pte_k;
^1da177e4c3f415 Linus Torvalds     2005-04-16  300  
d6f703602fee8f8 Ralf Baechle       2007-03-29  301  		pgd = (pgd_t *) pgd_current[raw_smp_processor_id()] + offset;
^1da177e4c3f415 Linus Torvalds     2005-04-16  302  		pgd_k = init_mm.pgd + offset;
^1da177e4c3f415 Linus Torvalds     2005-04-16  303  
^1da177e4c3f415 Linus Torvalds     2005-04-16  304  		if (!pgd_present(*pgd_k))
^1da177e4c3f415 Linus Torvalds     2005-04-16  305  			goto no_context;
^1da177e4c3f415 Linus Torvalds     2005-04-16  306  		set_pgd(pgd, *pgd_k);
^1da177e4c3f415 Linus Torvalds     2005-04-16  307  
2bee1b58484f036 Mike Rapoport      2019-11-21  308  		p4d = p4d_offset(pgd, address);
2bee1b58484f036 Mike Rapoport      2019-11-21  309  		p4d_k = p4d_offset(pgd_k, address);
2bee1b58484f036 Mike Rapoport      2019-11-21  310  		if (!p4d_present(*p4d_k))
2bee1b58484f036 Mike Rapoport      2019-11-21  311  			goto no_context;
2bee1b58484f036 Mike Rapoport      2019-11-21  312  
2bee1b58484f036 Mike Rapoport      2019-11-21  313  		pud = pud_offset(p4d, address);
2bee1b58484f036 Mike Rapoport      2019-11-21  314  		pud_k = pud_offset(p4d_k, address);
c6e8b587718c486 Ralf Baechle       2005-02-10  315  		if (!pud_present(*pud_k))
c6e8b587718c486 Ralf Baechle       2005-02-10  316  			goto no_context;
c6e8b587718c486 Ralf Baechle       2005-02-10  317  
c6e8b587718c486 Ralf Baechle       2005-02-10  318  		pmd = pmd_offset(pud, address);
c6e8b587718c486 Ralf Baechle       2005-02-10  319  		pmd_k = pmd_offset(pud_k, address);
^1da177e4c3f415 Linus Torvalds     2005-04-16  320  		if (!pmd_present(*pmd_k))
^1da177e4c3f415 Linus Torvalds     2005-04-16  321  			goto no_context;
^1da177e4c3f415 Linus Torvalds     2005-04-16  322  		set_pmd(pmd, *pmd_k);
^1da177e4c3f415 Linus Torvalds     2005-04-16  323  
^1da177e4c3f415 Linus Torvalds     2005-04-16  324  		pte_k = pte_offset_kernel(pmd_k, address);
^1da177e4c3f415 Linus Torvalds     2005-04-16  325  		if (!pte_present(*pte_k))
^1da177e4c3f415 Linus Torvalds     2005-04-16  326  			goto no_context;
^1da177e4c3f415 Linus Torvalds     2005-04-16 @327  		return;
^1da177e4c3f415 Linus Torvalds     2005-04-16  328  	}
2ca2ebfd952d033 David Daney        2009-09-02  329  #endif
^1da177e4c3f415 Linus Torvalds     2005-04-16  330  }
c3fc5cd5c5a5f47 Ralf Baechle       2013-05-29  331  

:::::: The code at line 327 was first introduced by commit
:::::: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 Linux-2.6.12-rc2

:::::: TO: Linus Torvalds <torvalds@ppc970.osdl.org>
:::::: CC: Linus Torvalds <torvalds@ppc970.osdl.org>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 22398 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

* arch/mips/mm/fault.c:327 __do_page_fault() warn: inconsistent returns '&mm->mmap_lock'.
@ 2021-04-23 20:09 kernel test robot
  0 siblings, 0 replies; 3+ messages in thread
From: kernel test robot @ 2021-04-23 20:09 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 20324 bytes --]

CC: kbuild-all(a)lists.01.org
CC: linux-kernel(a)vger.kernel.org
TO: Michel Lespinasse <walken@google.com>
CC: Andrew Morton <akpm@linux-foundation.org>
CC: Linux Memory Management List <linux-mm@kvack.org>
CC: Vlastimil Babka <vbabka@suse.cz>
CC: Davidlohr Bueso <dbueso@suse.de>
CC: Daniel Jordan <daniel.m.jordan@oracle.com>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   5bfc75d92efd494db37f5c4c173d3639d4772966
commit: da1c55f1b272f4bd54671d459b39ea7b54944ef9 mmap locking API: rename mmap_sem to mmap_lock
date:   11 months ago
:::::: branch date: 3 hours ago
:::::: commit date: 11 months ago
config: mips-randconfig-m031-20210423 (attached as .config)
compiler: mips-linux-gcc (GCC) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>

smatch warnings:
arch/mips/mm/fault.c:327 __do_page_fault() warn: inconsistent returns '&mm->mmap_lock'.

vim +327 arch/mips/mm/fault.c

^1da177e4c3f415 Linus Torvalds     2005-04-16   89  
^1da177e4c3f415 Linus Torvalds     2005-04-16   90  	/*
^1da177e4c3f415 Linus Torvalds     2005-04-16   91  	 * If we're in an interrupt or have no user
^1da177e4c3f415 Linus Torvalds     2005-04-16   92  	 * context, we must not take the fault..
^1da177e4c3f415 Linus Torvalds     2005-04-16   93  	 */
70ffdb9393a7264 David Hildenbrand  2015-05-11   94  	if (faulthandler_disabled() || !mm)
^1da177e4c3f415 Linus Torvalds     2005-04-16   95  		goto bad_area_nosemaphore;
^1da177e4c3f415 Linus Torvalds     2005-04-16   96  
759496ba6407c69 Johannes Weiner    2013-09-12   97  	if (user_mode(regs))
759496ba6407c69 Johannes Weiner    2013-09-12   98  		flags |= FAULT_FLAG_USER;
43ca4957a15a120 Kautuk Consul      2011-12-23   99  retry:
89154dd5313f774 Michel Lespinasse  2020-06-08  100  	mmap_read_lock(mm);
^1da177e4c3f415 Linus Torvalds     2005-04-16  101  	vma = find_vma(mm, address);
^1da177e4c3f415 Linus Torvalds     2005-04-16  102  	if (!vma)
^1da177e4c3f415 Linus Torvalds     2005-04-16  103  		goto bad_area;
^1da177e4c3f415 Linus Torvalds     2005-04-16  104  	if (vma->vm_start <= address)
^1da177e4c3f415 Linus Torvalds     2005-04-16  105  		goto good_area;
^1da177e4c3f415 Linus Torvalds     2005-04-16  106  	if (!(vma->vm_flags & VM_GROWSDOWN))
^1da177e4c3f415 Linus Torvalds     2005-04-16  107  		goto bad_area;
^1da177e4c3f415 Linus Torvalds     2005-04-16  108  	if (expand_stack(vma, address))
^1da177e4c3f415 Linus Torvalds     2005-04-16  109  		goto bad_area;
^1da177e4c3f415 Linus Torvalds     2005-04-16  110  /*
^1da177e4c3f415 Linus Torvalds     2005-04-16  111   * Ok, we have a good vm_area for this memory access, so
^1da177e4c3f415 Linus Torvalds     2005-04-16  112   * we can handle it..
^1da177e4c3f415 Linus Torvalds     2005-04-16  113   */
^1da177e4c3f415 Linus Torvalds     2005-04-16  114  good_area:
f43a54a0d9168de Eric W. Biederman  2018-04-15  115  	si_code = SEGV_ACCERR;
^1da177e4c3f415 Linus Torvalds     2005-04-16  116  
^1da177e4c3f415 Linus Torvalds     2005-04-16  117  	if (write) {
^1da177e4c3f415 Linus Torvalds     2005-04-16  118  		if (!(vma->vm_flags & VM_WRITE))
^1da177e4c3f415 Linus Torvalds     2005-04-16  119  			goto bad_area;
759496ba6407c69 Johannes Weiner    2013-09-12  120  		flags |= FAULT_FLAG_WRITE;
6dd9344cfc41bcc David Daney        2010-02-10  121  	} else {
05857c64ecf8972 Steven J. Hill     2012-09-13  122  		if (cpu_has_rixi) {
6dd9344cfc41bcc David Daney        2010-02-10  123  			if (address == regs->cp0_epc && !(vma->vm_flags & VM_EXEC)) {
6dd9344cfc41bcc David Daney        2010-02-10  124  #if 0
6dd9344cfc41bcc David Daney        2010-02-10  125  				pr_notice("Cpu%d[%s:%d:%0*lx:%ld:%0*lx] XI violation\n",
6dd9344cfc41bcc David Daney        2010-02-10  126  					  raw_smp_processor_id(),
6dd9344cfc41bcc David Daney        2010-02-10  127  					  current->comm, current->pid,
6dd9344cfc41bcc David Daney        2010-02-10  128  					  field, address, write,
6dd9344cfc41bcc David Daney        2010-02-10  129  					  field, regs->cp0_epc);
6dd9344cfc41bcc David Daney        2010-02-10  130  #endif
6dd9344cfc41bcc David Daney        2010-02-10  131  				goto bad_area;
6dd9344cfc41bcc David Daney        2010-02-10  132  			}
e070dab73523bcb Ralf Baechle       2015-07-23  133  			if (!(vma->vm_flags & VM_READ) &&
e070dab73523bcb Ralf Baechle       2015-07-23  134  			    exception_epc(regs) != address) {
6dd9344cfc41bcc David Daney        2010-02-10  135  #if 0
6dd9344cfc41bcc David Daney        2010-02-10  136  				pr_notice("Cpu%d[%s:%d:%0*lx:%ld:%0*lx] RI violation\n",
6dd9344cfc41bcc David Daney        2010-02-10  137  					  raw_smp_processor_id(),
6dd9344cfc41bcc David Daney        2010-02-10  138  					  current->comm, current->pid,
6dd9344cfc41bcc David Daney        2010-02-10  139  					  field, address, write,
6dd9344cfc41bcc David Daney        2010-02-10  140  					  field, regs->cp0_epc);
6dd9344cfc41bcc David Daney        2010-02-10  141  #endif
6dd9344cfc41bcc David Daney        2010-02-10  142  				goto bad_area;
6dd9344cfc41bcc David Daney        2010-02-10  143  			}
^1da177e4c3f415 Linus Torvalds     2005-04-16  144  		} else {
5093c5872be3a04 Anshuman Khandual  2020-04-06  145  			if (unlikely(!vma_is_accessible(vma)))
^1da177e4c3f415 Linus Torvalds     2005-04-16  146  				goto bad_area;
^1da177e4c3f415 Linus Torvalds     2005-04-16  147  		}
6dd9344cfc41bcc David Daney        2010-02-10  148  	}
^1da177e4c3f415 Linus Torvalds     2005-04-16  149  
^1da177e4c3f415 Linus Torvalds     2005-04-16  150  	/*
^1da177e4c3f415 Linus Torvalds     2005-04-16  151  	 * If for any reason at all we couldn't handle the fault,
^1da177e4c3f415 Linus Torvalds     2005-04-16  152  	 * make sure we exit gracefully rather than endlessly redo
^1da177e4c3f415 Linus Torvalds     2005-04-16  153  	 * the fault.
^1da177e4c3f415 Linus Torvalds     2005-04-16  154  	 */
dcddffd41d3f1d3 Kirill A. Shutemov 2016-07-26  155  	fault = handle_mm_fault(vma, address, flags);
43ca4957a15a120 Kautuk Consul      2011-12-23  156  
4ef873226ceb9c7 Peter Xu           2020-04-01  157  	if (fault_signal_pending(fault, regs))
43ca4957a15a120 Kautuk Consul      2011-12-23  158  		return;
43ca4957a15a120 Kautuk Consul      2011-12-23  159  
a8b0ca17b80e92f Peter Zijlstra     2011-06-27  160  	perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address);
83c54070ee1a2d0 Nick Piggin        2007-07-19  161  	if (unlikely(fault & VM_FAULT_ERROR)) {
83c54070ee1a2d0 Nick Piggin        2007-07-19  162  		if (fault & VM_FAULT_OOM)
^1da177e4c3f415 Linus Torvalds     2005-04-16  163  			goto out_of_memory;
33692f27597fcab Linus Torvalds     2015-01-29  164  		else if (fault & VM_FAULT_SIGSEGV)
33692f27597fcab Linus Torvalds     2015-01-29  165  			goto bad_area;
83c54070ee1a2d0 Nick Piggin        2007-07-19  166  		else if (fault & VM_FAULT_SIGBUS)
83c54070ee1a2d0 Nick Piggin        2007-07-19  167  			goto do_sigbus;
^1da177e4c3f415 Linus Torvalds     2005-04-16  168  		BUG();
^1da177e4c3f415 Linus Torvalds     2005-04-16  169  	}
43ca4957a15a120 Kautuk Consul      2011-12-23  170  	if (flags & FAULT_FLAG_ALLOW_RETRY) {
7f788d2d5308581 Dengcheng Zhu      2010-10-12  171  		if (fault & VM_FAULT_MAJOR) {
43ca4957a15a120 Kautuk Consul      2011-12-23  172  			perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MAJ, 1,
43ca4957a15a120 Kautuk Consul      2011-12-23  173  						  regs, address);
83c54070ee1a2d0 Nick Piggin        2007-07-19  174  			tsk->maj_flt++;
7f788d2d5308581 Dengcheng Zhu      2010-10-12  175  		} else {
43ca4957a15a120 Kautuk Consul      2011-12-23  176  			perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MIN, 1,
43ca4957a15a120 Kautuk Consul      2011-12-23  177  						  regs, address);
83c54070ee1a2d0 Nick Piggin        2007-07-19  178  			tsk->min_flt++;
7f788d2d5308581 Dengcheng Zhu      2010-10-12  179  		}
43ca4957a15a120 Kautuk Consul      2011-12-23  180  		if (fault & VM_FAULT_RETRY) {
45cac65b0fcd287 Shaohua Li         2012-10-08  181  			flags |= FAULT_FLAG_TRIED;
43ca4957a15a120 Kautuk Consul      2011-12-23  182  
43ca4957a15a120 Kautuk Consul      2011-12-23  183  			/*
43ca4957a15a120 Kautuk Consul      2011-12-23  184  			 * No need to up_read(&mm->mmap_sem) as we would
43ca4957a15a120 Kautuk Consul      2011-12-23  185  			 * have already released it in __lock_page_or_retry
43ca4957a15a120 Kautuk Consul      2011-12-23  186  			 * in mm/filemap.c.
43ca4957a15a120 Kautuk Consul      2011-12-23  187  			 */
43ca4957a15a120 Kautuk Consul      2011-12-23  188  
43ca4957a15a120 Kautuk Consul      2011-12-23  189  			goto retry;
43ca4957a15a120 Kautuk Consul      2011-12-23  190  		}
43ca4957a15a120 Kautuk Consul      2011-12-23  191  	}
^1da177e4c3f415 Linus Torvalds     2005-04-16  192  
89154dd5313f774 Michel Lespinasse  2020-06-08  193  	mmap_read_unlock(mm);
^1da177e4c3f415 Linus Torvalds     2005-04-16  194  	return;
^1da177e4c3f415 Linus Torvalds     2005-04-16  195  
^1da177e4c3f415 Linus Torvalds     2005-04-16  196  /*
^1da177e4c3f415 Linus Torvalds     2005-04-16  197   * Something tried to access memory that isn't in our memory map..
^1da177e4c3f415 Linus Torvalds     2005-04-16  198   * Fix it, but check if it's kernel or user first..
^1da177e4c3f415 Linus Torvalds     2005-04-16  199   */
^1da177e4c3f415 Linus Torvalds     2005-04-16  200  bad_area:
89154dd5313f774 Michel Lespinasse  2020-06-08  201  	mmap_read_unlock(mm);
^1da177e4c3f415 Linus Torvalds     2005-04-16  202  
^1da177e4c3f415 Linus Torvalds     2005-04-16  203  bad_area_nosemaphore:
^1da177e4c3f415 Linus Torvalds     2005-04-16  204  	/* User mode accesses just cause a SIGSEGV */
^1da177e4c3f415 Linus Torvalds     2005-04-16  205  	if (user_mode(regs)) {
^1da177e4c3f415 Linus Torvalds     2005-04-16  206  		tsk->thread.cp0_badvaddr = address;
^1da177e4c3f415 Linus Torvalds     2005-04-16  207  		tsk->thread.error_code = write;
d79d853df126553 Markos Chandras    2015-01-21  208  		if (show_unhandled_signals &&
d79d853df126553 Markos Chandras    2015-01-21  209  		    unhandled_signal(tsk, SIGSEGV) &&
d79d853df126553 Markos Chandras    2015-01-21  210  		    __ratelimit(&ratelimit_state)) {
2a872a5dcec7052 Matt Redfearn      2016-11-09  211  			pr_info("do_page_fault(): sending SIGSEGV to %s for invalid %s %0*lx\n",
^1da177e4c3f415 Linus Torvalds     2005-04-16  212  				tsk->comm,
^1da177e4c3f415 Linus Torvalds     2005-04-16  213  				write ? "write access to" : "read access from",
d79d853df126553 Markos Chandras    2015-01-21  214  				field, address);
d79d853df126553 Markos Chandras    2015-01-21  215  			pr_info("epc = %0*lx in", field,
d79d853df126553 Markos Chandras    2015-01-21  216  				(unsigned long) regs->cp0_epc);
2a872a5dcec7052 Matt Redfearn      2016-11-09  217  			print_vma_addr(KERN_CONT " ", regs->cp0_epc);
2a872a5dcec7052 Matt Redfearn      2016-11-09  218  			pr_cont("\n");
d79d853df126553 Markos Chandras    2015-01-21  219  			pr_info("ra  = %0*lx in", field,
d79d853df126553 Markos Chandras    2015-01-21  220  				(unsigned long) regs->regs[31]);
2a872a5dcec7052 Matt Redfearn      2016-11-09  221  			print_vma_addr(KERN_CONT " ", regs->regs[31]);
2a872a5dcec7052 Matt Redfearn      2016-11-09  222  			pr_cont("\n");
d79d853df126553 Markos Chandras    2015-01-21  223  		}
e3b28831c18c6c9 Ralf Baechle       2015-07-28  224  		current->thread.trap_nr = (regs->cp0_cause >> 2) & 0x1f;
2e1661d2673667d Eric W. Biederman  2019-05-23  225  		force_sig_fault(SIGSEGV, si_code, (void __user *)address);
^1da177e4c3f415 Linus Torvalds     2005-04-16  226  		return;
^1da177e4c3f415 Linus Torvalds     2005-04-16  227  	}
^1da177e4c3f415 Linus Torvalds     2005-04-16  228  
^1da177e4c3f415 Linus Torvalds     2005-04-16  229  no_context:
^1da177e4c3f415 Linus Torvalds     2005-04-16  230  	/* Are we prepared to handle this kernel fault?	 */
^1da177e4c3f415 Linus Torvalds     2005-04-16  231  	if (fixup_exception(regs)) {
^1da177e4c3f415 Linus Torvalds     2005-04-16  232  		current->thread.cp0_baduaddr = address;
^1da177e4c3f415 Linus Torvalds     2005-04-16  233  		return;
^1da177e4c3f415 Linus Torvalds     2005-04-16  234  	}
^1da177e4c3f415 Linus Torvalds     2005-04-16  235  
^1da177e4c3f415 Linus Torvalds     2005-04-16  236  	/*
^1da177e4c3f415 Linus Torvalds     2005-04-16  237  	 * Oops. The kernel tried to access some bad page. We'll have to
^1da177e4c3f415 Linus Torvalds     2005-04-16  238  	 * terminate things with extreme prejudice.
^1da177e4c3f415 Linus Torvalds     2005-04-16  239  	 */
^1da177e4c3f415 Linus Torvalds     2005-04-16  240  	bust_spinlocks(1);
^1da177e4c3f415 Linus Torvalds     2005-04-16  241  
^1da177e4c3f415 Linus Torvalds     2005-04-16  242  	printk(KERN_ALERT "CPU %d Unable to handle kernel paging request at "
^1da177e4c3f415 Linus Torvalds     2005-04-16  243  	       "virtual address %0*lx, epc == %0*lx, ra == %0*lx\n",
d6f703602fee8f8 Ralf Baechle       2007-03-29  244  	       raw_smp_processor_id(), field, address, field, regs->cp0_epc,
^1da177e4c3f415 Linus Torvalds     2005-04-16  245  	       field,  regs->regs[31]);
^1da177e4c3f415 Linus Torvalds     2005-04-16  246  	die("Oops", regs);
^1da177e4c3f415 Linus Torvalds     2005-04-16  247  
c7c1e3846bac1e4 Ralf Baechle       2009-01-12  248  out_of_memory:
^1da177e4c3f415 Linus Torvalds     2005-04-16  249  	/*
c7c1e3846bac1e4 Ralf Baechle       2009-01-12  250  	 * We ran out of memory, call the OOM killer, and return the userspace
c7c1e3846bac1e4 Ralf Baechle       2009-01-12  251  	 * (which will retry the fault, or kill us if we got oom-killed).
^1da177e4c3f415 Linus Torvalds     2005-04-16  252  	 */
89154dd5313f774 Michel Lespinasse  2020-06-08  253  	mmap_read_unlock(mm);
871341023c771ad Johannes Weiner    2013-09-12  254  	if (!user_mode(regs))
871341023c771ad Johannes Weiner    2013-09-12  255  		goto no_context;
c7c1e3846bac1e4 Ralf Baechle       2009-01-12  256  	pagefault_out_of_memory();
c7c1e3846bac1e4 Ralf Baechle       2009-01-12  257  	return;
^1da177e4c3f415 Linus Torvalds     2005-04-16  258  
^1da177e4c3f415 Linus Torvalds     2005-04-16  259  do_sigbus:
89154dd5313f774 Michel Lespinasse  2020-06-08  260  	mmap_read_unlock(mm);
^1da177e4c3f415 Linus Torvalds     2005-04-16  261  
^1da177e4c3f415 Linus Torvalds     2005-04-16  262  	/* Kernel mode? Handle exceptions or die */
^1da177e4c3f415 Linus Torvalds     2005-04-16  263  	if (!user_mode(regs))
^1da177e4c3f415 Linus Torvalds     2005-04-16  264  		goto no_context;
72f941af88a543e Paul Burton        2017-03-30  265  
^1da177e4c3f415 Linus Torvalds     2005-04-16  266  	/*
^1da177e4c3f415 Linus Torvalds     2005-04-16  267  	 * Send a sigbus, regardless of whether we were in kernel
^1da177e4c3f415 Linus Torvalds     2005-04-16  268  	 * or user mode.
^1da177e4c3f415 Linus Torvalds     2005-04-16  269  	 */
41c594ab65fc895 Ralf Baechle       2006-04-05  270  #if 0
41c594ab65fc895 Ralf Baechle       2006-04-05  271  	printk("do_page_fault() #3: sending SIGBUS to %s for "
41c594ab65fc895 Ralf Baechle       2006-04-05  272  	       "invalid %s\n%0*lx (epc == %0*lx, ra == %0*lx)\n",
41c594ab65fc895 Ralf Baechle       2006-04-05  273  	       tsk->comm,
41c594ab65fc895 Ralf Baechle       2006-04-05  274  	       write ? "write access to" : "read access from",
41c594ab65fc895 Ralf Baechle       2006-04-05  275  	       field, address,
41c594ab65fc895 Ralf Baechle       2006-04-05  276  	       field, (unsigned long) regs->cp0_epc,
41c594ab65fc895 Ralf Baechle       2006-04-05  277  	       field, (unsigned long) regs->regs[31]);
41c594ab65fc895 Ralf Baechle       2006-04-05  278  #endif
e3b28831c18c6c9 Ralf Baechle       2015-07-28  279  	current->thread.trap_nr = (regs->cp0_cause >> 2) & 0x1f;
^1da177e4c3f415 Linus Torvalds     2005-04-16  280  	tsk->thread.cp0_badvaddr = address;
2e1661d2673667d Eric W. Biederman  2019-05-23  281  	force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *)address);
^1da177e4c3f415 Linus Torvalds     2005-04-16  282  
^1da177e4c3f415 Linus Torvalds     2005-04-16  283  	return;
2ca2ebfd952d033 David Daney        2009-09-02  284  #ifndef CONFIG_64BIT
^1da177e4c3f415 Linus Torvalds     2005-04-16  285  vmalloc_fault:
^1da177e4c3f415 Linus Torvalds     2005-04-16  286  	{
^1da177e4c3f415 Linus Torvalds     2005-04-16  287  		/*
^1da177e4c3f415 Linus Torvalds     2005-04-16  288  		 * Synchronize this task's top level page-table
^1da177e4c3f415 Linus Torvalds     2005-04-16  289  		 * with the 'reference' page table.
^1da177e4c3f415 Linus Torvalds     2005-04-16  290  		 *
^1da177e4c3f415 Linus Torvalds     2005-04-16  291  		 * Do _not_ use "tsk" here. We might be inside
^1da177e4c3f415 Linus Torvalds     2005-04-16  292  		 * an interrupt in the middle of a task switch..
^1da177e4c3f415 Linus Torvalds     2005-04-16  293  		 */
31168f033e3751d Mike Rapoport      2019-11-21  294  		int offset = pgd_index(address);
^1da177e4c3f415 Linus Torvalds     2005-04-16  295  		pgd_t *pgd, *pgd_k;
2bee1b58484f036 Mike Rapoport      2019-11-21  296  		p4d_t *p4d, *p4d_k;
c6e8b587718c486 Ralf Baechle       2005-02-10  297  		pud_t *pud, *pud_k;
^1da177e4c3f415 Linus Torvalds     2005-04-16  298  		pmd_t *pmd, *pmd_k;
^1da177e4c3f415 Linus Torvalds     2005-04-16  299  		pte_t *pte_k;
^1da177e4c3f415 Linus Torvalds     2005-04-16  300  
d6f703602fee8f8 Ralf Baechle       2007-03-29  301  		pgd = (pgd_t *) pgd_current[raw_smp_processor_id()] + offset;
^1da177e4c3f415 Linus Torvalds     2005-04-16  302  		pgd_k = init_mm.pgd + offset;
^1da177e4c3f415 Linus Torvalds     2005-04-16  303  
^1da177e4c3f415 Linus Torvalds     2005-04-16  304  		if (!pgd_present(*pgd_k))
^1da177e4c3f415 Linus Torvalds     2005-04-16  305  			goto no_context;
^1da177e4c3f415 Linus Torvalds     2005-04-16  306  		set_pgd(pgd, *pgd_k);
^1da177e4c3f415 Linus Torvalds     2005-04-16  307  
2bee1b58484f036 Mike Rapoport      2019-11-21  308  		p4d = p4d_offset(pgd, address);
2bee1b58484f036 Mike Rapoport      2019-11-21  309  		p4d_k = p4d_offset(pgd_k, address);
2bee1b58484f036 Mike Rapoport      2019-11-21  310  		if (!p4d_present(*p4d_k))
2bee1b58484f036 Mike Rapoport      2019-11-21  311  			goto no_context;
2bee1b58484f036 Mike Rapoport      2019-11-21  312  
2bee1b58484f036 Mike Rapoport      2019-11-21  313  		pud = pud_offset(p4d, address);
2bee1b58484f036 Mike Rapoport      2019-11-21  314  		pud_k = pud_offset(p4d_k, address);
c6e8b587718c486 Ralf Baechle       2005-02-10  315  		if (!pud_present(*pud_k))
c6e8b587718c486 Ralf Baechle       2005-02-10  316  			goto no_context;
c6e8b587718c486 Ralf Baechle       2005-02-10  317  
c6e8b587718c486 Ralf Baechle       2005-02-10  318  		pmd = pmd_offset(pud, address);
c6e8b587718c486 Ralf Baechle       2005-02-10  319  		pmd_k = pmd_offset(pud_k, address);
^1da177e4c3f415 Linus Torvalds     2005-04-16  320  		if (!pmd_present(*pmd_k))
^1da177e4c3f415 Linus Torvalds     2005-04-16  321  			goto no_context;
^1da177e4c3f415 Linus Torvalds     2005-04-16  322  		set_pmd(pmd, *pmd_k);
^1da177e4c3f415 Linus Torvalds     2005-04-16  323  
^1da177e4c3f415 Linus Torvalds     2005-04-16  324  		pte_k = pte_offset_kernel(pmd_k, address);
^1da177e4c3f415 Linus Torvalds     2005-04-16  325  		if (!pte_present(*pte_k))
^1da177e4c3f415 Linus Torvalds     2005-04-16  326  			goto no_context;
^1da177e4c3f415 Linus Torvalds     2005-04-16 @327  		return;
^1da177e4c3f415 Linus Torvalds     2005-04-16  328  	}
2ca2ebfd952d033 David Daney        2009-09-02  329  #endif
^1da177e4c3f415 Linus Torvalds     2005-04-16  330  }
c3fc5cd5c5a5f47 Ralf Baechle       2013-05-29  331  

:::::: The code at line 327 was first introduced by commit
:::::: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 Linux-2.6.12-rc2

:::::: TO: Linus Torvalds <torvalds@ppc970.osdl.org>
:::::: CC: Linus Torvalds <torvalds@ppc970.osdl.org>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 26633 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2021-04-23 20:09 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-01-08 18:22 arch/mips/mm/fault.c:327 __do_page_fault() warn: inconsistent returns 'mm->mmap_lock' kernel test robot
  -- strict thread matches above, loose matches on Subject: below --
2021-04-23 20:09 arch/mips/mm/fault.c:327 __do_page_fault() warn: inconsistent returns '&mm->mmap_lock' kernel test robot
2020-06-25  0:02 arch/mips/mm/fault.c:327 __do_page_fault() warn: inconsistent returns 'mm->mmap_lock' kernel test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.