CC: [email protected] CC: Linux Memory Management List <[email protected]> TO: Axel Rasmussen <[email protected]> CC: Andrew Morton <[email protected]> CC: Linux Memory Management List <[email protected]>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master head: e99d8a8495175df8cb8b739f8cf9b0fc9d0cd3b5 commit: a311f80f1475642eea71c635c368043783c22f4a [8382/11648] userfaultfd: support minor fault handling for shmem :::::: branch date: 6 hours ago :::::: commit date: 9 days ago config: parisc-randconfig-s031-20210409 (attached as .config) compiler: hppa64-linux-gcc (GCC) 9.3.0 reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # apt-get install sparse # sparse version: v0.6.3-279-g6d5d9b42-dirty # https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=a311f80f1475642eea71c635c368043783c22f4a git remote add linux-next https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git git fetch --no-tags linux-next master git checkout a311f80f1475642eea71c635c368043783c22f4a # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=parisc If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <[email protected]> sparse warnings: (new ones prefixed by >>) >> mm/shmem.c:2478:9: sparse: sparse: context imbalance in >> 'shmem_mcopy_atomic_pte' - different lock contexts for basic block vim +/shmem_mcopy_atomic_pte +2478 mm/shmem.c ^1da177e4c3f41 Linus Torvalds 2005-04-16 2361 a311f80f147564 Axel Rasmussen 2021-04-01 2362 int shmem_mcopy_atomic_pte(struct mm_struct *dst_mm, pmd_t *dst_pmd, 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2363 struct vm_area_struct *dst_vma, a311f80f147564 Axel Rasmussen 2021-04-01 2364 unsigned long dst_addr, unsigned long src_addr, a311f80f147564 Axel Rasmussen 2021-04-01 2365 enum mcopy_atomic_mode mode, struct page **pagep) 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2366 { a311f80f147564 Axel Rasmussen 2021-04-01 2367 bool is_continue = (mode == MCOPY_ATOMIC_CONTINUE); 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2368 struct inode *inode = file_inode(dst_vma->vm_file); 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2369 struct shmem_inode_info *info = SHMEM_I(inode); 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2370 struct address_space *mapping = inode->i_mapping; 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2371 gfp_t gfp = mapping_gfp_mask(mapping); 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2372 pgoff_t pgoff = linear_page_index(dst_vma, dst_addr); 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2373 spinlock_t *ptl; 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2374 void *page_kaddr; 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2375 struct page *page; 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2376 pte_t _dst_pte, *dst_pte; 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2377 int ret; e2a50c1f64145a Andrea Arcangeli 2018-11-30 2378 pgoff_t offset, max_off; 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2379 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2380 ret = -ENOMEM; 0f0796945614b7 Mike Rapoport 2017-09-06 2381 if (!shmem_inode_acct_block(inode, 1)) 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2382 goto out; 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2383 a311f80f147564 Axel Rasmussen 2021-04-01 2384 if (is_continue) { a311f80f147564 Axel Rasmussen 2021-04-01 2385 ret = -EFAULT; a311f80f147564 Axel Rasmussen 2021-04-01 2386 page = find_lock_page(mapping, pgoff); a311f80f147564 Axel Rasmussen 2021-04-01 2387 if (!page) a311f80f147564 Axel Rasmussen 2021-04-01 2388 goto out_unacct_blocks; a311f80f147564 Axel Rasmussen 2021-04-01 2389 } else if (!*pagep) { 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2390 page = shmem_alloc_page(gfp, info, pgoff); 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2391 if (!page) 0f0796945614b7 Mike Rapoport 2017-09-06 2392 goto out_unacct_blocks; 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2393 a311f80f147564 Axel Rasmussen 2021-04-01 2394 if (mode == MCOPY_ATOMIC_NORMAL) { /* mcopy_atomic */ 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2395 page_kaddr = kmap_atomic(page); 8d10396342063c Mike Rapoport 2017-09-06 2396 ret = copy_from_user(page_kaddr, 8d10396342063c Mike Rapoport 2017-09-06 2397 (const void __user *)src_addr, 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2398 PAGE_SIZE); 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2399 kunmap_atomic(page_kaddr); 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2400 c1e8d7c6a7a682 Michel Lespinasse 2020-06-08 2401 /* fallback to copy_from_user outside mmap_lock */ 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2402 if (unlikely(ret)) { 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2403 *pagep = page; 0f0796945614b7 Mike Rapoport 2017-09-06 2404 shmem_inode_unacct_blocks(inode, 1); 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2405 /* don't free the page */ 9e368259ad9883 Andrea Arcangeli 2018-11-30 2406 return -ENOENT; 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2407 } a311f80f147564 Axel Rasmussen 2021-04-01 2408 } else { /* zeropage */ 8d10396342063c Mike Rapoport 2017-09-06 2409 clear_highpage(page); 8d10396342063c Mike Rapoport 2017-09-06 2410 } 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2411 } else { 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2412 page = *pagep; 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2413 *pagep = NULL; 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2414 } 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2415 a311f80f147564 Axel Rasmussen 2021-04-01 2416 if (!is_continue) { a311f80f147564 Axel Rasmussen 2021-04-01 2417 VM_BUG_ON(PageSwapBacked(page)); a311f80f147564 Axel Rasmussen 2021-04-01 2418 VM_BUG_ON(PageLocked(page)); 9cc90c664a65f9 Andrea Arcangeli 2017-02-22 2419 __SetPageLocked(page); 9cc90c664a65f9 Andrea Arcangeli 2017-02-22 2420 __SetPageSwapBacked(page); a425d3584e7e69 Andrea Arcangeli 2017-02-22 2421 __SetPageUptodate(page); a311f80f147564 Axel Rasmussen 2021-04-01 2422 } 9cc90c664a65f9 Andrea Arcangeli 2017-02-22 2423 e2a50c1f64145a Andrea Arcangeli 2018-11-30 2424 ret = -EFAULT; e2a50c1f64145a Andrea Arcangeli 2018-11-30 2425 offset = linear_page_index(dst_vma, dst_addr); e2a50c1f64145a Andrea Arcangeli 2018-11-30 2426 max_off = DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE); e2a50c1f64145a Andrea Arcangeli 2018-11-30 2427 if (unlikely(offset >= max_off)) e2a50c1f64145a Andrea Arcangeli 2018-11-30 2428 goto out_release; e2a50c1f64145a Andrea Arcangeli 2018-11-30 2429 a311f80f147564 Axel Rasmussen 2021-04-01 2430 /* If page wasn't already in the page cache, add it. */ a311f80f147564 Axel Rasmussen 2021-04-01 2431 if (!is_continue) { 552446a4166189 Matthew Wilcox 2017-12-01 2432 ret = shmem_add_to_page_cache(page, mapping, pgoff, NULL, 3fea5a499d57de Johannes Weiner 2020-06-03 2433 gfp & GFP_RECLAIM_MASK, dst_mm); 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2434 if (ret) 3fea5a499d57de Johannes Weiner 2020-06-03 2435 goto out_release; a311f80f147564 Axel Rasmussen 2021-04-01 2436 } 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2437 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2438 _dst_pte = mk_pte(page, dst_vma->vm_page_prot); 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2439 if (dst_vma->vm_flags & VM_WRITE) 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2440 _dst_pte = pte_mkwrite(pte_mkdirty(_dst_pte)); dcf7fe9d89763a Andrea Arcangeli 2018-11-30 2441 else { dcf7fe9d89763a Andrea Arcangeli 2018-11-30 2442 /* dcf7fe9d89763a Andrea Arcangeli 2018-11-30 2443 * We don't set the pte dirty if the vma has no dcf7fe9d89763a Andrea Arcangeli 2018-11-30 2444 * VM_WRITE permission, so mark the page dirty or it dcf7fe9d89763a Andrea Arcangeli 2018-11-30 2445 * could be freed from under us. We could do it dcf7fe9d89763a Andrea Arcangeli 2018-11-30 2446 * unconditionally before unlock_page(), but doing it dcf7fe9d89763a Andrea Arcangeli 2018-11-30 2447 * only if VM_WRITE is not set is faster. dcf7fe9d89763a Andrea Arcangeli 2018-11-30 2448 */ dcf7fe9d89763a Andrea Arcangeli 2018-11-30 2449 set_page_dirty(page); dcf7fe9d89763a Andrea Arcangeli 2018-11-30 2450 } 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2451 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2452 dst_pte = pte_offset_map_lock(dst_mm, dst_pmd, dst_addr, &ptl); e2a50c1f64145a Andrea Arcangeli 2018-11-30 2453 e2a50c1f64145a Andrea Arcangeli 2018-11-30 2454 ret = -EFAULT; e2a50c1f64145a Andrea Arcangeli 2018-11-30 2455 max_off = DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE); e2a50c1f64145a Andrea Arcangeli 2018-11-30 2456 if (unlikely(offset >= max_off)) 3fea5a499d57de Johannes Weiner 2020-06-03 2457 goto out_release_unlock; e2a50c1f64145a Andrea Arcangeli 2018-11-30 2458 e2a50c1f64145a Andrea Arcangeli 2018-11-30 2459 ret = -EEXIST; 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2460 if (!pte_none(*dst_pte)) 3fea5a499d57de Johannes Weiner 2020-06-03 2461 goto out_release_unlock; 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2462 a311f80f147564 Axel Rasmussen 2021-04-01 2463 if (!is_continue) { 6058eaec816f29 Johannes Weiner 2020-06-03 2464 lru_cache_add(page); 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2465 94b7cc01da5a3c Yang Shi 2020-04-20 2466 spin_lock_irq(&info->lock); 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2467 info->alloced++; 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2468 inode->i_blocks += BLOCKS_PER_PAGE; 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2469 shmem_recalc_inode(inode); 94b7cc01da5a3c Yang Shi 2020-04-20 2470 spin_unlock_irq(&info->lock); a311f80f147564 Axel Rasmussen 2021-04-01 2471 } 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2472 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2473 inc_mm_counter(dst_mm, mm_counter_file(page)); 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2474 page_add_file_rmap(page, false); 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2475 set_pte_at(dst_mm, dst_addr, dst_pte, _dst_pte); 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2476 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2477 /* No need to invalidate - it was non-present before */ 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 @2478 update_mmu_cache(dst_vma, dst_addr, dst_pte); 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2479 pte_unmap_unlock(dst_pte, ptl); e2a50c1f64145a Andrea Arcangeli 2018-11-30 2480 unlock_page(page); 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2481 ret = 0; 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2482 out: 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2483 return ret; 3fea5a499d57de Johannes Weiner 2020-06-03 2484 out_release_unlock: 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2485 pte_unmap_unlock(dst_pte, ptl); dcf7fe9d89763a Andrea Arcangeli 2018-11-30 2486 ClearPageDirty(page); e2a50c1f64145a Andrea Arcangeli 2018-11-30 2487 delete_from_page_cache(page); 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2488 out_release: 9cc90c664a65f9 Andrea Arcangeli 2017-02-22 2489 unlock_page(page); 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2490 put_page(page); 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2491 out_unacct_blocks: 0f0796945614b7 Mike Rapoport 2017-09-06 2492 shmem_inode_unacct_blocks(inode, 1); 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2493 goto out; 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2494 } 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2495 :::::: The code at line 2478 was first introduced by commit :::::: 4c27fe4c4c84f3afd504ecff2420cc1ad420d38e userfaultfd: shmem: add shmem_mcopy_atomic_pte for userfaultfd support :::::: TO: Mike Rapoport <[email protected]> :::::: CC: Linus Torvalds <[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]
