From: Sidhartha Kumar <sidhartha.kumar@oracle.com>
To: Peng Zhang <zhangpeng362@huawei.com>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
akpm@linux-foundation.org, willy@infradead.org,
mike.kravetz@oracle.com
Cc: vishal.moola@gmail.com, muchun.song@linux.dev,
wangkefeng.wang@huawei.com, sunnanyong@huawei.com
Subject: Re: [PATCH v4 3/6] userfaultfd: convert copy_huge_page_from_user() to copy_folio_from_user()
Date: Thu, 30 Mar 2023 10:18:16 -0700 [thread overview]
Message-ID: <17698a8b-b917-fd83-98a6-20ea0d8059b5@oracle.com> (raw)
In-Reply-To: <20230330134045.375163-4-zhangpeng362@huawei.com>
On 3/30/23 6:40 AM, Peng Zhang wrote:
> From: ZhangPeng <zhangpeng362@huawei.com>
>
> Replace copy_huge_page_from_user() with copy_folio_from_user().
> copy_folio_from_user() does the same as copy_huge_page_from_user(), but
> takes in a folio instead of a page. Convert page_kaddr to kaddr in
> copy_folio_from_user() to do indenting cleanup.
>
> Signed-off-by: ZhangPeng <zhangpeng362@huawei.com>
> ---
> include/linux/mm.h | 7 +++----
> mm/hugetlb.c | 5 ++---
> mm/memory.c | 26 ++++++++++++--------------
> mm/userfaultfd.c | 6 ++----
> 4 files changed, 19 insertions(+), 25 deletions(-)
>
> diff --git a/include/linux/mm.h b/include/linux/mm.h
> index e249208f8fbe..cf4d773ca506 100644
> --- a/include/linux/mm.h
> +++ b/include/linux/mm.h
> @@ -3682,10 +3682,9 @@ extern void copy_user_huge_page(struct page *dst, struct page *src,
> unsigned long addr_hint,
> struct vm_area_struct *vma,
> unsigned int pages_per_huge_page);
> -extern long copy_huge_page_from_user(struct page *dst_page,
> - const void __user *usr_src,
> - unsigned int pages_per_huge_page,
> - bool allow_pagefault);
> +long copy_folio_from_user(struct folio *dst_folio,
> + const void __user *usr_src,
> + bool allow_pagefault);
>
> /**
> * vma_is_special_huge - Are transhuge page-table entries considered special?
> diff --git a/mm/hugetlb.c b/mm/hugetlb.c
> index 7e4a80769c9e..aade1b513474 100644
> --- a/mm/hugetlb.c
> +++ b/mm/hugetlb.c
> @@ -6217,9 +6217,8 @@ int hugetlb_mfill_atomic_pte(pte_t *dst_pte,
> goto out;
> }
>
> - ret = copy_huge_page_from_user(&folio->page,
> - (const void __user *) src_addr,
> - pages_per_huge_page(h), false);
> + ret = copy_folio_from_user(folio, (const void __user *) src_addr,
> + false);
>
> /* fallback to copy_from_user outside mmap_lock */
> if (unlikely(ret)) {
> diff --git a/mm/memory.c b/mm/memory.c
> index c47b8991410a..9d59dad319b3 100644
> --- a/mm/memory.c
> +++ b/mm/memory.c
> @@ -5854,35 +5854,33 @@ void copy_user_huge_page(struct page *dst, struct page *src,
> process_huge_page(addr_hint, pages_per_huge_page, copy_subpage, &arg);
> }
>
> -long copy_huge_page_from_user(struct page *dst_page,
> - const void __user *usr_src,
> - unsigned int pages_per_huge_page,
> - bool allow_pagefault)
> +long copy_folio_from_user(struct folio *dst_folio,
> + const void __user *usr_src,
> + bool allow_pagefault)
> {
> - void *page_kaddr;
> + void *kaddr;
> unsigned long i, rc = 0;
> - unsigned long ret_val = pages_per_huge_page * PAGE_SIZE;
> + unsigned int nr_pages = folio_nr_pages(dst_folio);
> + unsigned long ret_val = nr_pages * PAGE_SIZE;
> struct page *subpage;
>
> - for (i = 0; i < pages_per_huge_page; i++) {
> - subpage = nth_page(dst_page, i);
> - page_kaddr = kmap_local_page(subpage);
> + for (i = 0; i < nr_pages; i++) {
> + subpage = folio_page(dst_folio, i);
> + kaddr = kmap_local_page(subpage);
> if (!allow_pagefault)
> pagefault_disable();
> - rc = copy_from_user(page_kaddr,
> - usr_src + i * PAGE_SIZE, PAGE_SIZE);
> + rc = copy_from_user(kaddr, usr_src + i * PAGE_SIZE, PAGE_SIZE);
> if (!allow_pagefault)
> pagefault_enable();
> - kunmap_local(page_kaddr);
> + kunmap_local(kaddr);
>
> ret_val -= (PAGE_SIZE - rc);
> if (rc)
> break;
>
> - flush_dcache_page(subpage);
> -
> cond_resched();
> }
> + flush_dcache_folio(dst_folio);
> return ret_val;
> }
> #endif /* CONFIG_TRANSPARENT_HUGEPAGE || CONFIG_HUGETLBFS */
> diff --git a/mm/userfaultfd.c b/mm/userfaultfd.c
> index efa9e1d681ee..b453a4d2a0d3 100644
> --- a/mm/userfaultfd.c
> +++ b/mm/userfaultfd.c
> @@ -422,10 +422,8 @@ static __always_inline ssize_t mfill_atomic_hugetlb(
> mmap_read_unlock(dst_mm);
> BUG_ON(!page);
>
> - err = copy_huge_page_from_user(page,
> - (const void __user *)src_addr,
> - vma_hpagesize / PAGE_SIZE,
> - true);
> + err = copy_folio_from_user(page_folio(page),
> + (const void __user *)src_addr, true);
> if (unlikely(err)) {
> err = -EFAULT;
> goto out;
Reviewed-by: Sidhartha Kumar <sidhartha.kumar@oracle.com>
next prev parent reply other threads:[~2023-03-30 17:18 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-30 13:40 [PATCH v4 0/6] userfaultfd: convert userfaultfd functions to use folios Peng Zhang
2023-03-30 13:40 ` [PATCH v4 1/6] userfaultfd: convert mfill_atomic_pte_copy() to use a folio Peng Zhang
2023-03-30 17:02 ` Sidhartha Kumar
2023-03-30 18:02 ` Matthew Wilcox
2023-03-31 9:38 ` zhangpeng (AS)
2023-04-06 21:28 ` Mike Kravetz
2023-03-30 13:40 ` [PATCH v4 2/6] userfaultfd: use kmap_local_page() in copy_huge_page_from_user() Peng Zhang
2023-03-30 13:40 ` [PATCH v4 3/6] userfaultfd: convert copy_huge_page_from_user() to copy_folio_from_user() Peng Zhang
2023-03-30 17:18 ` Sidhartha Kumar [this message]
2023-03-30 13:40 ` [PATCH v4 4/6] userfaultfd: convert mfill_atomic_hugetlb() to use a folio Peng Zhang
2023-03-30 17:29 ` Sidhartha Kumar
2023-03-30 13:40 ` [PATCH v4 5/6] mm: convert copy_user_huge_page() to copy_user_folio() Peng Zhang
2023-03-30 18:15 ` Matthew Wilcox
2023-03-31 9:38 ` zhangpeng (AS)
2023-03-30 13:40 ` [PATCH v4 6/6] userfaultfd: convert mfill_atomic() to use a folio Peng Zhang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=17698a8b-b917-fd83-98a6-20ea0d8059b5@oracle.com \
--to=sidhartha.kumar@oracle.com \
--cc=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mike.kravetz@oracle.com \
--cc=muchun.song@linux.dev \
--cc=sunnanyong@huawei.com \
--cc=vishal.moola@gmail.com \
--cc=wangkefeng.wang@huawei.com \
--cc=willy@infradead.org \
--cc=zhangpeng362@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox