CC: [email protected] TO: [email protected] tree: https://android.googlesource.com/kernel/common android12-5.4 head: 2c6775a89bc167ea4c153db9ffc3b081d34a05b8 commit: 0309b3f479b967acb644f99d214e2b25297a20b1 [17/27] BACKPORT: FROMGIT: userfaultfd: support minor fault handling for shmem :::::: branch date: 12 hours ago :::::: commit date: 13 hours ago config: x86_64-randconfig-m001-20210409 (attached as .config) compiler: gcc-9 (Debian 9.3.0-22) 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: mm/shmem.c:2448 shmem_mcopy_atomic_pte() error: uninitialized symbol 'memcg'. vim +/memcg +2448 mm/shmem.c 0cd6144aadd2af Johannes Weiner 2014-04-03 2312 0309b3f479b967 Axel Rasmussen 2021-03-18 2313 #ifdef CONFIG_USERFAULTFD 0309b3f479b967 Axel Rasmussen 2021-03-18 2314 int shmem_mcopy_atomic_pte(struct mm_struct *dst_mm, pmd_t *dst_pmd, 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2315 struct vm_area_struct *dst_vma, 0309b3f479b967 Axel Rasmussen 2021-03-18 2316 unsigned long dst_addr, unsigned long src_addr, 0309b3f479b967 Axel Rasmussen 2021-03-18 2317 enum mcopy_atomic_mode mode, struct page **pagep) 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2318 { 0309b3f479b967 Axel Rasmussen 2021-03-18 2319 bool is_continue = (mode == MCOPY_ATOMIC_CONTINUE); 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2320 struct inode *inode = file_inode(dst_vma->vm_file); 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2321 struct shmem_inode_info *info = SHMEM_I(inode); 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2322 struct address_space *mapping = inode->i_mapping; 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2323 gfp_t gfp = mapping_gfp_mask(mapping); 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2324 pgoff_t pgoff = linear_page_index(dst_vma, dst_addr); 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2325 struct mem_cgroup *memcg; 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2326 spinlock_t *ptl; 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2327 void *page_kaddr; 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2328 struct page *page; 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2329 pte_t _dst_pte, *dst_pte; 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2330 int ret; e2a50c1f64145a Andrea Arcangeli 2018-11-30 2331 pgoff_t offset, max_off; 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2332 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2333 ret = -ENOMEM; 0f0796945614b7 Mike Rapoport 2017-09-06 2334 if (!shmem_inode_acct_block(inode, 1)) 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2335 goto out; 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2336 0309b3f479b967 Axel Rasmussen 2021-03-18 2337 if (is_continue) { 0309b3f479b967 Axel Rasmussen 2021-03-18 2338 ret = -EFAULT; 0309b3f479b967 Axel Rasmussen 2021-03-18 2339 page = find_lock_page(mapping, pgoff); 0309b3f479b967 Axel Rasmussen 2021-03-18 2340 if (!page) 0309b3f479b967 Axel Rasmussen 2021-03-18 2341 goto out_unacct_blocks; 0309b3f479b967 Axel Rasmussen 2021-03-18 2342 } else if (!*pagep) { 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2343 page = shmem_alloc_page(gfp, info, pgoff); 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2344 if (!page) 0f0796945614b7 Mike Rapoport 2017-09-06 2345 goto out_unacct_blocks; 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2346 0309b3f479b967 Axel Rasmussen 2021-03-18 2347 if (mode == MCOPY_ATOMIC_NORMAL) { /* mcopy_atomic */ 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2348 page_kaddr = kmap_atomic(page); 8d10396342063c Mike Rapoport 2017-09-06 2349 ret = copy_from_user(page_kaddr, 8d10396342063c Mike Rapoport 2017-09-06 2350 (const void __user *)src_addr, 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2351 PAGE_SIZE); 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2352 kunmap_atomic(page_kaddr); 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2353 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2354 /* fallback to copy_from_user outside mmap_sem */ 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2355 if (unlikely(ret)) { 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2356 *pagep = page; 0f0796945614b7 Mike Rapoport 2017-09-06 2357 shmem_inode_unacct_blocks(inode, 1); 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2358 /* don't free the page */ 9e368259ad9883 Andrea Arcangeli 2018-11-30 2359 return -ENOENT; 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2360 } 0309b3f479b967 Axel Rasmussen 2021-03-18 2361 } else { /* zeropage */ 8d10396342063c Mike Rapoport 2017-09-06 2362 clear_highpage(page); 8d10396342063c Mike Rapoport 2017-09-06 2363 } 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2364 } else { 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2365 page = *pagep; 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2366 *pagep = NULL; 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2367 } 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2368 0309b3f479b967 Axel Rasmussen 2021-03-18 2369 if (!is_continue) { 0309b3f479b967 Axel Rasmussen 2021-03-18 2370 VM_BUG_ON(PageSwapBacked(page)); 0309b3f479b967 Axel Rasmussen 2021-03-18 2371 VM_BUG_ON(PageLocked(page)); 9cc90c664a65f9 Andrea Arcangeli 2017-02-22 2372 __SetPageLocked(page); 9cc90c664a65f9 Andrea Arcangeli 2017-02-22 2373 __SetPageSwapBacked(page); a425d3584e7e69 Andrea Arcangeli 2017-02-22 2374 __SetPageUptodate(page); 0309b3f479b967 Axel Rasmussen 2021-03-18 2375 } 9cc90c664a65f9 Andrea Arcangeli 2017-02-22 2376 e2a50c1f64145a Andrea Arcangeli 2018-11-30 2377 ret = -EFAULT; e2a50c1f64145a Andrea Arcangeli 2018-11-30 2378 offset = linear_page_index(dst_vma, dst_addr); e2a50c1f64145a Andrea Arcangeli 2018-11-30 2379 max_off = DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE); e2a50c1f64145a Andrea Arcangeli 2018-11-30 2380 if (unlikely(offset >= max_off)) e2a50c1f64145a Andrea Arcangeli 2018-11-30 2381 goto out_release; e2a50c1f64145a Andrea Arcangeli 2018-11-30 2382 0309b3f479b967 Axel Rasmussen 2021-03-18 2383 /* If page wasn't already in the page cache, add it. */ 0309b3f479b967 Axel Rasmussen 2021-03-18 2384 if (!is_continue) { 2cf855837b89d9 Tejun Heo 2018-07-03 2385 ret = mem_cgroup_try_charge_delay(page, dst_mm, gfp, &memcg, false); 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2386 if (ret) 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2387 goto out_release; 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2388 552446a4166189 Matthew Wilcox 2017-12-01 2389 ret = shmem_add_to_page_cache(page, mapping, pgoff, NULL, 552446a4166189 Matthew Wilcox 2017-12-01 2390 gfp & GFP_RECLAIM_MASK); 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2391 if (ret) 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2392 goto out_release_uncharge; 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2393 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2394 mem_cgroup_commit_charge(page, memcg, false, false); 0309b3f479b967 Axel Rasmussen 2021-03-18 2395 } 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2396 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2397 _dst_pte = mk_pte(page, dst_vma->vm_page_prot); 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2398 if (dst_vma->vm_flags & VM_WRITE) 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2399 _dst_pte = pte_mkwrite(pte_mkdirty(_dst_pte)); dcf7fe9d89763a Andrea Arcangeli 2018-11-30 2400 else { dcf7fe9d89763a Andrea Arcangeli 2018-11-30 2401 /* dcf7fe9d89763a Andrea Arcangeli 2018-11-30 2402 * We don't set the pte dirty if the vma has no dcf7fe9d89763a Andrea Arcangeli 2018-11-30 2403 * VM_WRITE permission, so mark the page dirty or it dcf7fe9d89763a Andrea Arcangeli 2018-11-30 2404 * could be freed from under us. We could do it dcf7fe9d89763a Andrea Arcangeli 2018-11-30 2405 * unconditionally before unlock_page(), but doing it dcf7fe9d89763a Andrea Arcangeli 2018-11-30 2406 * only if VM_WRITE is not set is faster. dcf7fe9d89763a Andrea Arcangeli 2018-11-30 2407 */ dcf7fe9d89763a Andrea Arcangeli 2018-11-30 2408 set_page_dirty(page); dcf7fe9d89763a Andrea Arcangeli 2018-11-30 2409 } 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2410 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2411 dst_pte = pte_offset_map_lock(dst_mm, dst_pmd, dst_addr, &ptl); e2a50c1f64145a Andrea Arcangeli 2018-11-30 2412 e2a50c1f64145a Andrea Arcangeli 2018-11-30 2413 ret = -EFAULT; e2a50c1f64145a Andrea Arcangeli 2018-11-30 2414 max_off = DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE); e2a50c1f64145a Andrea Arcangeli 2018-11-30 2415 if (unlikely(offset >= max_off)) e2a50c1f64145a Andrea Arcangeli 2018-11-30 2416 goto out_release_uncharge_unlock; e2a50c1f64145a Andrea Arcangeli 2018-11-30 2417 e2a50c1f64145a Andrea Arcangeli 2018-11-30 2418 ret = -EEXIST; 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2419 if (!pte_none(*dst_pte)) 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2420 goto out_release_uncharge_unlock; 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2421 0309b3f479b967 Axel Rasmussen 2021-03-18 2422 if (!is_continue) { 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2423 lru_cache_add_anon(page); 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2424 e5329fcdc907f5 Yang Shi 2020-04-20 2425 spin_lock_irq(&info->lock); 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2426 info->alloced++; 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2427 inode->i_blocks += BLOCKS_PER_PAGE; 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2428 shmem_recalc_inode(inode); e5329fcdc907f5 Yang Shi 2020-04-20 2429 spin_unlock_irq(&info->lock); 0309b3f479b967 Axel Rasmussen 2021-03-18 2430 } 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2431 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2432 inc_mm_counter(dst_mm, mm_counter_file(page)); 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2433 page_add_file_rmap(page, false); 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2434 set_pte_at(dst_mm, dst_addr, dst_pte, _dst_pte); 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2435 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2436 /* No need to invalidate - it was non-present before */ 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2437 update_mmu_cache(dst_vma, dst_addr, dst_pte); 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2438 pte_unmap_unlock(dst_pte, ptl); e2a50c1f64145a Andrea Arcangeli 2018-11-30 2439 unlock_page(page); 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2440 ret = 0; 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2441 out: 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2442 return ret; 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2443 out_release_uncharge_unlock: 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2444 pte_unmap_unlock(dst_pte, ptl); dcf7fe9d89763a Andrea Arcangeli 2018-11-30 2445 ClearPageDirty(page); e2a50c1f64145a Andrea Arcangeli 2018-11-30 2446 delete_from_page_cache(page); 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2447 out_release_uncharge: 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 @2448 mem_cgroup_cancel_charge(page, memcg, false); 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2449 out_release: 9cc90c664a65f9 Andrea Arcangeli 2017-02-22 2450 unlock_page(page); 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2451 put_page(page); 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2452 out_unacct_blocks: 0f0796945614b7 Mike Rapoport 2017-09-06 2453 shmem_inode_unacct_blocks(inode, 1); 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2454 goto out; 4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2455 } 0309b3f479b967 Axel Rasmussen 2021-03-18 2456 #endif /* CONFIG_USERFAULTFD */ 8d10396342063c Mike Rapoport 2017-09-06 2457 :::::: The code at line 2448 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]
