* Re: [PATCH v2 3/3] userfaultfd: convert __mcopy_atomic() to use a folio
@ 2023-03-15 10:50 kernel test robot
0 siblings, 0 replies; 2+ messages in thread
From: kernel test robot @ 2023-03-15 10:50 UTC (permalink / raw)
To: oe-kbuild; +Cc: lkp, Dan Carpenter
BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
In-Reply-To: <20230314131350.924377-4-zhangpeng362@huawei.com>
References: <20230314131350.924377-4-zhangpeng362@huawei.com>
TO: Peng Zhang <zhangpeng362@huawei.com>
TO: linux-mm@kvack.org
TO: linux-kernel@vger.kernel.org
TO: willy@infradead.org
CC: akpm@linux-foundation.org
CC: mike.kravetz@oracle.com
CC: vishal.moola@gmail.com
CC: sidhartha.kumar@oracle.com
CC: wangkefeng.wang@huawei.com
CC: sunnanyong@huawei.com
CC: ZhangPeng <zhangpeng362@huawei.com>
Hi Peng,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on linus/master]
[also build test WARNING on v6.3-rc2 next-20230315]
[cannot apply to akpm-mm/mm-everything]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Peng-Zhang/userfaultfd-convert-mcopy_atomic_pte-to-use-a-folio/20230314-211824
patch link: https://lore.kernel.org/r/20230314131350.924377-4-zhangpeng362%40huawei.com
patch subject: [PATCH v2 3/3] userfaultfd: convert __mcopy_atomic() to use a folio
:::::: branch date: 21 hours ago
:::::: commit date: 21 hours ago
config: microblaze-randconfig-m041-20230312 (https://download.01.org/0day-ci/archive/20230315/202303151800.E99FNcRY-lkp@intel.com/config)
compiler: microblaze-linux-gcc (GCC) 12.1.0
If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Link: https://lore.kernel.org/r/202303151800.E99FNcRY-lkp@intel.com/
New smatch warnings:
mm/shmem.c:2492 shmem_mfill_atomic_pte() error: uninitialized symbol 'folio'.
mm/userfaultfd.c:181 mcopy_atomic_pte() error: uninitialized symbol 'folio'.
Old smatch warnings:
arch/microblaze/include/asm/thread_info.h:85 current_thread_info() error: uninitialized symbol 'sp'.
include/linux/userfaultfd_k.h:149 vma_can_userfault() warn: bitwise AND condition is false here
vim +/folio +2492 mm/shmem.c
^1da177e4c3f41 Linus Torvalds 2005-04-16 2416
3460f6e5c1ed94 Axel Rasmussen 2021-06-30 2417 #ifdef CONFIG_USERFAULTFD
3460f6e5c1ed94 Axel Rasmussen 2021-06-30 2418 int shmem_mfill_atomic_pte(struct mm_struct *dst_mm,
4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2419 pmd_t *dst_pmd,
4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2420 struct vm_area_struct *dst_vma,
4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2421 unsigned long dst_addr,
4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2422 unsigned long src_addr,
8ee79edff6d3b4 Peter Xu 2022-05-12 2423 bool zeropage, bool wp_copy,
732542eb883709 ZhangPeng 2023-03-14 2424 struct folio **foliop)
4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2425 {
4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2426 struct inode *inode = file_inode(dst_vma->vm_file);
4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2427 struct shmem_inode_info *info = SHMEM_I(inode);
4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2428 struct address_space *mapping = inode->i_mapping;
4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2429 gfp_t gfp = mapping_gfp_mask(mapping);
4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2430 pgoff_t pgoff = linear_page_index(dst_vma, dst_addr);
4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2431 void *page_kaddr;
b7dd44a12cf266 Matthew Wilcox (Oracle 2022-05-12 2432) struct folio *folio;
4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2433 int ret;
3460f6e5c1ed94 Axel Rasmussen 2021-06-30 2434 pgoff_t max_off;
4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2435
7ed9d238c7dbb1 Axel Rasmussen 2021-05-14 2436 if (!shmem_inode_acct_block(inode, 1)) {
7ed9d238c7dbb1 Axel Rasmussen 2021-05-14 2437 /*
7ed9d238c7dbb1 Axel Rasmussen 2021-05-14 2438 * We may have got a page, returned -ENOENT triggering a retry,
7ed9d238c7dbb1 Axel Rasmussen 2021-05-14 2439 * and now we find ourselves with -ENOMEM. Release the page, to
7ed9d238c7dbb1 Axel Rasmussen 2021-05-14 2440 * avoid a BUG_ON in our caller.
7ed9d238c7dbb1 Axel Rasmussen 2021-05-14 2441 */
732542eb883709 ZhangPeng 2023-03-14 2442 if (unlikely(*foliop)) {
732542eb883709 ZhangPeng 2023-03-14 2443 folio_put(*foliop);
732542eb883709 ZhangPeng 2023-03-14 2444 *foliop = NULL;
7ed9d238c7dbb1 Axel Rasmussen 2021-05-14 2445 }
7d64ae3ab648a9 Axel Rasmussen 2021-06-30 2446 return -ENOMEM;
7ed9d238c7dbb1 Axel Rasmussen 2021-05-14 2447 }
4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2448
732542eb883709 ZhangPeng 2023-03-14 2449 if (!*foliop) {
7d64ae3ab648a9 Axel Rasmussen 2021-06-30 2450 ret = -ENOMEM;
7a7256d5f512b6 Matthew Wilcox (Oracle 2022-09-02 2451) folio = shmem_alloc_folio(gfp, info, pgoff);
7a7256d5f512b6 Matthew Wilcox (Oracle 2022-09-02 2452) if (!folio)
0f0796945614b7 Mike Rapoport 2017-09-06 2453 goto out_unacct_blocks;
4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2454
3460f6e5c1ed94 Axel Rasmussen 2021-06-30 2455 if (!zeropage) { /* COPY */
7a7256d5f512b6 Matthew Wilcox (Oracle 2022-09-02 2456) page_kaddr = kmap_local_folio(folio, 0);
5dc21f0c0b1c02 Ira Weiny 2022-10-25 2457 /*
5dc21f0c0b1c02 Ira Weiny 2022-10-25 2458 * The read mmap_lock is held here. Despite the
5dc21f0c0b1c02 Ira Weiny 2022-10-25 2459 * mmap_lock being read recursive a deadlock is still
5dc21f0c0b1c02 Ira Weiny 2022-10-25 2460 * possible if a writer has taken a lock. For example:
5dc21f0c0b1c02 Ira Weiny 2022-10-25 2461 *
5dc21f0c0b1c02 Ira Weiny 2022-10-25 2462 * process A thread 1 takes read lock on own mmap_lock
5dc21f0c0b1c02 Ira Weiny 2022-10-25 2463 * process A thread 2 calls mmap, blocks taking write lock
5dc21f0c0b1c02 Ira Weiny 2022-10-25 2464 * process B thread 1 takes page fault, read lock on own mmap lock
5dc21f0c0b1c02 Ira Weiny 2022-10-25 2465 * process B thread 2 calls mmap, blocks taking write lock
5dc21f0c0b1c02 Ira Weiny 2022-10-25 2466 * process A thread 1 blocks taking read lock on process B
5dc21f0c0b1c02 Ira Weiny 2022-10-25 2467 * process B thread 1 blocks taking read lock on process A
5dc21f0c0b1c02 Ira Weiny 2022-10-25 2468 *
5dc21f0c0b1c02 Ira Weiny 2022-10-25 2469 * Disable page faults to prevent potential deadlock
5dc21f0c0b1c02 Ira Weiny 2022-10-25 2470 * and retry the copy outside the mmap_lock.
5dc21f0c0b1c02 Ira Weiny 2022-10-25 2471 */
5dc21f0c0b1c02 Ira Weiny 2022-10-25 2472 pagefault_disable();
8d10396342063c Mike Rapoport 2017-09-06 2473 ret = copy_from_user(page_kaddr,
8d10396342063c Mike Rapoport 2017-09-06 2474 (const void __user *)src_addr,
4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2475 PAGE_SIZE);
5dc21f0c0b1c02 Ira Weiny 2022-10-25 2476 pagefault_enable();
7a7256d5f512b6 Matthew Wilcox (Oracle 2022-09-02 2477) kunmap_local(page_kaddr);
4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2478
c1e8d7c6a7a682 Michel Lespinasse 2020-06-08 2479 /* fallback to copy_from_user outside mmap_lock */
4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2480 if (unlikely(ret)) {
732542eb883709 ZhangPeng 2023-03-14 2481 *foliop = folio;
7d64ae3ab648a9 Axel Rasmussen 2021-06-30 2482 ret = -ENOENT;
4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2483 /* don't free the page */
7d64ae3ab648a9 Axel Rasmussen 2021-06-30 2484 goto out_unacct_blocks;
4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2485 }
19b482c29b6f38 Muchun Song 2022-03-22 2486
7a7256d5f512b6 Matthew Wilcox (Oracle 2022-09-02 2487) flush_dcache_folio(folio);
3460f6e5c1ed94 Axel Rasmussen 2021-06-30 2488 } else { /* ZEROPAGE */
7a7256d5f512b6 Matthew Wilcox (Oracle 2022-09-02 2489) clear_user_highpage(&folio->page, dst_addr);
8d10396342063c Mike Rapoport 2017-09-06 2490 }
4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2491 } else {
732542eb883709 ZhangPeng 2023-03-14 @2492 VM_BUG_ON_FOLIO(folio_test_large(*foliop), folio);
732542eb883709 ZhangPeng 2023-03-14 2493 *foliop = NULL;
4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2494 }
4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2495
7a7256d5f512b6 Matthew Wilcox (Oracle 2022-09-02 2496) VM_BUG_ON(folio_test_locked(folio));
7a7256d5f512b6 Matthew Wilcox (Oracle 2022-09-02 2497) VM_BUG_ON(folio_test_swapbacked(folio));
7a7256d5f512b6 Matthew Wilcox (Oracle 2022-09-02 2498) __folio_set_locked(folio);
7a7256d5f512b6 Matthew Wilcox (Oracle 2022-09-02 2499) __folio_set_swapbacked(folio);
7a7256d5f512b6 Matthew Wilcox (Oracle 2022-09-02 2500) __folio_mark_uptodate(folio);
9cc90c664a65f9 Andrea Arcangeli 2017-02-22 2501
e2a50c1f64145a Andrea Arcangeli 2018-11-30 2502 ret = -EFAULT;
e2a50c1f64145a Andrea Arcangeli 2018-11-30 2503 max_off = DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE);
3460f6e5c1ed94 Axel Rasmussen 2021-06-30 2504 if (unlikely(pgoff >= max_off))
e2a50c1f64145a Andrea Arcangeli 2018-11-30 2505 goto out_release;
e2a50c1f64145a Andrea Arcangeli 2018-11-30 2506
b7dd44a12cf266 Matthew Wilcox (Oracle 2022-05-12 2507) ret = shmem_add_to_page_cache(folio, mapping, pgoff, NULL,
3fea5a499d57de Johannes Weiner 2020-06-03 2508 gfp & GFP_RECLAIM_MASK, dst_mm);
4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2509 if (ret)
3fea5a499d57de Johannes Weiner 2020-06-03 2510 goto out_release;
4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2511
7d64ae3ab648a9 Axel Rasmussen 2021-06-30 2512 ret = mfill_atomic_install_pte(dst_mm, dst_pmd, dst_vma, dst_addr,
7a7256d5f512b6 Matthew Wilcox (Oracle 2022-09-02 2513) &folio->page, true, wp_copy);
7d64ae3ab648a9 Axel Rasmussen 2021-06-30 2514 if (ret)
7d64ae3ab648a9 Axel Rasmussen 2021-06-30 2515 goto out_delete_from_cache;
4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2516
94b7cc01da5a3c Yang Shi 2020-04-20 2517 spin_lock_irq(&info->lock);
4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2518 info->alloced++;
4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2519 inode->i_blocks += BLOCKS_PER_PAGE;
4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2520 shmem_recalc_inode(inode);
94b7cc01da5a3c Yang Shi 2020-04-20 2521 spin_unlock_irq(&info->lock);
4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2522
7a7256d5f512b6 Matthew Wilcox (Oracle 2022-09-02 2523) folio_unlock(folio);
7d64ae3ab648a9 Axel Rasmussen 2021-06-30 2524 return 0;
7d64ae3ab648a9 Axel Rasmussen 2021-06-30 2525 out_delete_from_cache:
7a7256d5f512b6 Matthew Wilcox (Oracle 2022-09-02 2526) filemap_remove_folio(folio);
4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2527 out_release:
7a7256d5f512b6 Matthew Wilcox (Oracle 2022-09-02 2528) folio_unlock(folio);
7a7256d5f512b6 Matthew Wilcox (Oracle 2022-09-02 2529) folio_put(folio);
4c27fe4c4c84f3 Mike Rapoport 2017-02-22 2530 out_unacct_blocks:
0f0796945614b7 Mike Rapoport 2017-09-06 2531 shmem_inode_unacct_blocks(inode, 1);
7d64ae3ab648a9 Axel Rasmussen 2021-06-30 2532 return ret;
8d10396342063c Mike Rapoport 2017-09-06 2533 }
3460f6e5c1ed94 Axel Rasmussen 2021-06-30 2534 #endif /* CONFIG_USERFAULTFD */
8d10396342063c Mike Rapoport 2017-09-06 2535
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests
^ permalink raw reply [flat|nested] 2+ messages in thread* [PATCH v2 0/3] userfaultfd: convert userfaultfd functions to use folios @ 2023-03-14 13:13 Peng Zhang 2023-03-14 13:13 ` [PATCH v2 3/3] userfaultfd: convert __mcopy_atomic() to use a folio Peng Zhang 0 siblings, 1 reply; 2+ messages in thread From: Peng Zhang @ 2023-03-14 13:13 UTC (permalink / raw) To: linux-mm, linux-kernel, willy Cc: akpm, mike.kravetz, vishal.moola, sidhartha.kumar, wangkefeng.wang, sunnanyong, ZhangPeng From: ZhangPeng <zhangpeng362@huawei.com> This patch series converts several userfaultfd functions to use folios. And this series pass the userfaultfd selftests and the LTP userfaultfd test cases. Change log: v1->v2: In patch 2: - Rename copy_large_folio_from_user() to copy_folio_from_user(). - Delete the inner_folio. - kmap() and kmap_atomic() are converted to kmap_local_page(). Use pagefault_disable() to ensure that a deadlock will not occur. - flush_dcache_folio() is placed outside the loop. ZhangPeng (3): userfaultfd: convert mcopy_atomic_pte() to use a folio userfaultfd: convert __mcopy_atomic_hugetlb() to use a folio userfaultfd: convert __mcopy_atomic() to use a folio include/linux/hugetlb.h | 4 +-- include/linux/mm.h | 3 +- include/linux/shmem_fs.h | 2 +- mm/hugetlb.c | 25 +++++++------- mm/memory.c | 27 +++++++-------- mm/shmem.c | 17 +++++---- mm/userfaultfd.c | 74 +++++++++++++++++++--------------------- 7 files changed, 72 insertions(+), 80 deletions(-) -- 2.25.1 ^ permalink raw reply [flat|nested] 2+ messages in thread
* [PATCH v2 3/3] userfaultfd: convert __mcopy_atomic() to use a folio 2023-03-14 13:13 [PATCH v2 0/3] userfaultfd: convert userfaultfd functions to use folios Peng Zhang @ 2023-03-14 13:13 ` Peng Zhang 0 siblings, 0 replies; 2+ messages in thread From: Peng Zhang @ 2023-03-14 13:13 UTC (permalink / raw) To: linux-mm, linux-kernel, willy Cc: akpm, mike.kravetz, vishal.moola, sidhartha.kumar, wangkefeng.wang, sunnanyong, ZhangPeng From: ZhangPeng <zhangpeng362@huawei.com> Convert mcopy_atomic_pte(), shmem_mfill_atomic_pte() and mfill_atomic_pte() to pass in a folio pointer. Convert __mcopy_atomic() to use a folio. Signed-off-by: ZhangPeng <zhangpeng362@huawei.com> --- include/linux/shmem_fs.h | 2 +- mm/shmem.c | 17 ++++++++--------- mm/userfaultfd.c | 35 +++++++++++++++++------------------ 3 files changed, 26 insertions(+), 28 deletions(-) diff --git a/include/linux/shmem_fs.h b/include/linux/shmem_fs.h index 103d1000a5a2..580af0e3bf02 100644 --- a/include/linux/shmem_fs.h +++ b/include/linux/shmem_fs.h @@ -156,7 +156,7 @@ extern int shmem_mfill_atomic_pte(struct mm_struct *dst_mm, pmd_t *dst_pmd, unsigned long dst_addr, unsigned long src_addr, bool zeropage, bool wp_copy, - struct page **pagep); + struct folio **foliop); #else /* !CONFIG_SHMEM */ #define shmem_mfill_atomic_pte(dst_mm, dst_pmd, dst_vma, dst_addr, \ src_addr, zeropage, wp_copy, pagep) ({ BUG(); 0; }) diff --git a/mm/shmem.c b/mm/shmem.c index 448f393d8ab2..986267bf34ef 100644 --- a/mm/shmem.c +++ b/mm/shmem.c @@ -2421,7 +2421,7 @@ int shmem_mfill_atomic_pte(struct mm_struct *dst_mm, unsigned long dst_addr, unsigned long src_addr, bool zeropage, bool wp_copy, - struct page **pagep) + struct folio **foliop) { struct inode *inode = file_inode(dst_vma->vm_file); struct shmem_inode_info *info = SHMEM_I(inode); @@ -2439,14 +2439,14 @@ int shmem_mfill_atomic_pte(struct mm_struct *dst_mm, * and now we find ourselves with -ENOMEM. Release the page, to * avoid a BUG_ON in our caller. */ - if (unlikely(*pagep)) { - put_page(*pagep); - *pagep = NULL; + if (unlikely(*foliop)) { + folio_put(*foliop); + *foliop = NULL; } return -ENOMEM; } - if (!*pagep) { + if (!*foliop) { ret = -ENOMEM; folio = shmem_alloc_folio(gfp, info, pgoff); if (!folio) @@ -2478,7 +2478,7 @@ int shmem_mfill_atomic_pte(struct mm_struct *dst_mm, /* fallback to copy_from_user outside mmap_lock */ if (unlikely(ret)) { - *pagep = &folio->page; + *foliop = folio; ret = -ENOENT; /* don't free the page */ goto out_unacct_blocks; @@ -2489,9 +2489,8 @@ int shmem_mfill_atomic_pte(struct mm_struct *dst_mm, clear_user_highpage(&folio->page, dst_addr); } } else { - folio = page_folio(*pagep); - VM_BUG_ON_FOLIO(folio_test_large(folio), folio); - *pagep = NULL; + VM_BUG_ON_FOLIO(folio_test_large(*foliop), folio); + *foliop = NULL; } VM_BUG_ON(folio_test_locked(folio)); diff --git a/mm/userfaultfd.c b/mm/userfaultfd.c index a7da26cdb731..cfe2d527f1c0 100644 --- a/mm/userfaultfd.c +++ b/mm/userfaultfd.c @@ -132,14 +132,14 @@ static int mcopy_atomic_pte(struct mm_struct *dst_mm, struct vm_area_struct *dst_vma, unsigned long dst_addr, unsigned long src_addr, - struct page **pagep, + struct folio **foliop, bool wp_copy) { void *page_kaddr; int ret; struct folio *folio; - if (!*pagep) { + if (!*foliop) { ret = -ENOMEM; folio = vma_alloc_folio(GFP_HIGHUSER_MOVABLE, 0, dst_vma, dst_addr, false); if (!folio) @@ -171,16 +171,15 @@ static int mcopy_atomic_pte(struct mm_struct *dst_mm, /* fallback to copy_from_user outside mmap_lock */ if (unlikely(ret)) { ret = -ENOENT; - *pagep = &folio->page; + *foliop = folio; /* don't free the page */ goto out; } flush_dcache_folio(folio); } else { - folio = page_folio(*pagep); - VM_BUG_ON_FOLIO(folio_test_large(folio), folio); - *pagep = NULL; + VM_BUG_ON_FOLIO(folio_test_large(*foliop), folio); + *foliop = NULL; } /* @@ -476,7 +475,7 @@ static __always_inline ssize_t mfill_atomic_pte(struct mm_struct *dst_mm, struct vm_area_struct *dst_vma, unsigned long dst_addr, unsigned long src_addr, - struct page **page, + struct folio **foliop, enum mcopy_atomic_mode mode, bool wp_copy) { @@ -500,7 +499,7 @@ static __always_inline ssize_t mfill_atomic_pte(struct mm_struct *dst_mm, if (!(dst_vma->vm_flags & VM_SHARED)) { if (mode == MCOPY_ATOMIC_NORMAL) err = mcopy_atomic_pte(dst_mm, dst_pmd, dst_vma, - dst_addr, src_addr, page, + dst_addr, src_addr, foliop, wp_copy); else err = mfill_zeropage_pte(dst_mm, dst_pmd, @@ -509,7 +508,7 @@ static __always_inline ssize_t mfill_atomic_pte(struct mm_struct *dst_mm, err = shmem_mfill_atomic_pte(dst_mm, dst_pmd, dst_vma, dst_addr, src_addr, mode != MCOPY_ATOMIC_NORMAL, - wp_copy, page); + wp_copy, foliop); } return err; @@ -528,7 +527,7 @@ static __always_inline ssize_t __mcopy_atomic(struct mm_struct *dst_mm, pmd_t *dst_pmd; unsigned long src_addr, dst_addr; long copied; - struct page *page; + struct folio *folio; bool wp_copy; /* @@ -544,7 +543,7 @@ static __always_inline ssize_t __mcopy_atomic(struct mm_struct *dst_mm, src_addr = src_start; dst_addr = dst_start; copied = 0; - page = NULL; + folio = NULL; retry: mmap_read_lock(dst_mm); @@ -641,16 +640,16 @@ static __always_inline ssize_t __mcopy_atomic(struct mm_struct *dst_mm, BUG_ON(pmd_trans_huge(*dst_pmd)); err = mfill_atomic_pte(dst_mm, dst_pmd, dst_vma, dst_addr, - src_addr, &page, mcopy_mode, wp_copy); + src_addr, &folio, mcopy_mode, wp_copy); cond_resched(); if (unlikely(err == -ENOENT)) { void *page_kaddr; mmap_read_unlock(dst_mm); - BUG_ON(!page); + BUG_ON(!folio); - page_kaddr = kmap_local_page(page); + page_kaddr = kmap_local_folio(folio, 0); err = copy_from_user(page_kaddr, (const void __user *) src_addr, PAGE_SIZE); @@ -659,10 +658,10 @@ static __always_inline ssize_t __mcopy_atomic(struct mm_struct *dst_mm, err = -EFAULT; goto out; } - flush_dcache_page(page); + flush_dcache_folio(folio); goto retry; } else - BUG_ON(page); + BUG_ON(folio); if (!err) { dst_addr += PAGE_SIZE; @@ -679,8 +678,8 @@ static __always_inline ssize_t __mcopy_atomic(struct mm_struct *dst_mm, out_unlock: mmap_read_unlock(dst_mm); out: - if (page) - put_page(page); + if (folio) + folio_put(folio); BUG_ON(copied < 0); BUG_ON(err > 0); BUG_ON(!copied && !err); -- 2.25.1 ^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2023-03-15 10:50 UTC | newest] Thread overview: 2+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-03-15 10:50 [PATCH v2 3/3] userfaultfd: convert __mcopy_atomic() to use a folio kernel test robot -- strict thread matches above, loose matches on Subject: below -- 2023-03-14 13:13 [PATCH v2 0/3] userfaultfd: convert userfaultfd functions to use folios Peng Zhang 2023-03-14 13:13 ` [PATCH v2 3/3] userfaultfd: convert __mcopy_atomic() to use a folio Peng Zhang
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.