From: Mel Gorman <mel@csn.ul.ie>
To: Andrea Arcangeli <aarcange@redhat.com>
Cc: linux-mm@kvack.org, Marcelo Tosatti <mtosatti@redhat.com>,
Adam Litke <agl@us.ibm.com>, Avi Kivity <avi@redhat.com>,
Izik Eidus <ieidus@redhat.com>,
Hugh Dickins <hugh.dickins@tiscali.co.uk>,
Nick Piggin <npiggin@suse.de>, Rik van Riel <riel@redhat.com>,
Andi Kleen <andi@firstfloor.org>,
Dave Hansen <dave@linux.vnet.ibm.com>,
Benjamin Herrenschmidt <benh@kernel.crashing.org>,
Ingo Molnar <mingo@elte.hu>, Mike Travis <travis@sgi.com>,
KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
Christoph Lameter <cl@linux-foundation.org>,
Chris Wright <chrisw@sous-sol.org>,
Andrew Morton <akpm@linux-foundation.org>,
bpicco@redhat.com, Christoph Hellwig <chellwig@redhat.com>,
KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Subject: Re: [PATCH 23 of 31] clear_copy_huge_page
Date: Tue, 26 Jan 2010 20:10:26 +0000 [thread overview]
Message-ID: <20100126201026.GY16468@csn.ul.ie> (raw)
In-Reply-To: <cf4634443c63583c5603.1264513938@v2.random>
On Tue, Jan 26, 2010 at 02:52:18PM +0100, Andrea Arcangeli wrote:
> From: Andrea Arcangeli <aarcange@redhat.com>
>
> Move the copy/clear_huge_page functions to common code to share between
> hugetlb.c and huge_memory.c.
>
> Signed-off-by: Andrea Arcangeli <aarcange@redhat.com>
Acked-by: Mel Gorman <mel@csn.ul.ie>
> ---
>
> diff --git a/include/linux/mm.h b/include/linux/mm.h
> --- a/include/linux/mm.h
> +++ b/include/linux/mm.h
> @@ -1386,5 +1386,14 @@ extern void shake_page(struct page *p, i
> extern atomic_long_t mce_bad_pages;
> extern int soft_offline_page(struct page *page, int flags);
>
> +#if defined(CONFIG_TRANSPARENT_HUGEPAGE) || defined(CONFIG_HUGETLBFS)
> +extern void clear_huge_page(struct page *page,
> + unsigned long addr,
> + unsigned int pages_per_huge_page);
> +extern void copy_huge_page(struct page *dst, struct page *src,
> + unsigned long addr, struct vm_area_struct *vma,
> + unsigned int pages_per_huge_page);
> +#endif /* CONFIG_TRANSPARENT_HUGEPAGE || CONFIG_HUGETLBFS */
> +
> #endif /* __KERNEL__ */
> #endif /* _LINUX_MM_H */
> diff --git a/mm/hugetlb.c b/mm/hugetlb.c
> --- a/mm/hugetlb.c
> +++ b/mm/hugetlb.c
> @@ -385,70 +385,6 @@ static int vma_has_reserves(struct vm_ar
> return 0;
> }
>
> -static void clear_gigantic_page(struct page *page,
> - unsigned long addr, unsigned long sz)
> -{
> - int i;
> - struct page *p = page;
> -
> - might_sleep();
> - for (i = 0; i < sz/PAGE_SIZE; i++, p = mem_map_next(p, page, i)) {
> - cond_resched();
> - clear_user_highpage(p, addr + i * PAGE_SIZE);
> - }
> -}
> -static void clear_huge_page(struct page *page,
> - unsigned long addr, unsigned long sz)
> -{
> - int i;
> -
> - if (unlikely(sz/PAGE_SIZE > MAX_ORDER_NR_PAGES)) {
> - clear_gigantic_page(page, addr, sz);
> - return;
> - }
> -
> - might_sleep();
> - for (i = 0; i < sz/PAGE_SIZE; i++) {
> - cond_resched();
> - clear_user_highpage(page + i, addr + i * PAGE_SIZE);
> - }
> -}
> -
> -static void copy_gigantic_page(struct page *dst, struct page *src,
> - unsigned long addr, struct vm_area_struct *vma)
> -{
> - int i;
> - struct hstate *h = hstate_vma(vma);
> - struct page *dst_base = dst;
> - struct page *src_base = src;
> - might_sleep();
> - for (i = 0; i < pages_per_huge_page(h); ) {
> - cond_resched();
> - copy_user_highpage(dst, src, addr + i*PAGE_SIZE, vma);
> -
> - i++;
> - dst = mem_map_next(dst, dst_base, i);
> - src = mem_map_next(src, src_base, i);
> - }
> -}
> -static void copy_huge_page(struct page *dst, struct page *src,
> - unsigned long addr, struct vm_area_struct *vma)
> -{
> - int i;
> - struct hstate *h = hstate_vma(vma);
> -
> - if (unlikely(pages_per_huge_page(h) > MAX_ORDER_NR_PAGES)) {
> - copy_gigantic_page(dst, src, addr, vma);
> - return;
> - }
> -
> - might_sleep();
> - for (i = 0; i < pages_per_huge_page(h); i++) {
> - cond_resched();
> - copy_user_highpage(dst + i, src + i, addr + i*PAGE_SIZE, vma);
> - }
> -}
> -
> static void enqueue_huge_page(struct hstate *h, struct page *page)
> {
> int nid = page_to_nid(page);
> @@ -2334,7 +2270,8 @@ retry_avoidcopy:
> return -PTR_ERR(new_page);
> }
>
> - copy_huge_page(new_page, old_page, address, vma);
> + copy_huge_page(new_page, old_page, address, vma,
> + pages_per_huge_page(h));
> __SetPageUptodate(new_page);
>
> /*
> diff --git a/mm/memory.c b/mm/memory.c
> --- a/mm/memory.c
> +++ b/mm/memory.c
> @@ -3396,3 +3396,73 @@ void might_fault(void)
> }
> EXPORT_SYMBOL(might_fault);
> #endif
> +
> +#if defined(CONFIG_TRANSPARENT_HUGEPAGE) || defined(CONFIG_HUGETLBFS)
> +static void clear_gigantic_page(struct page *page,
> + unsigned long addr,
> + unsigned int pages_per_huge_page)
> +{
> + int i;
> + struct page *p = page;
> +
> + might_sleep();
> + for (i = 0; i < pages_per_huge_page;
> + i++, p = mem_map_next(p, page, i)) {
> + cond_resched();
> + clear_user_highpage(p, addr + i * PAGE_SIZE);
> + }
> +}
> +void clear_huge_page(struct page *page,
> + unsigned long addr, unsigned int pages_per_huge_page)
> +{
> + int i;
> +
> + if (unlikely(pages_per_huge_page > MAX_ORDER_NR_PAGES)) {
> + clear_gigantic_page(page, addr, pages_per_huge_page);
> + return;
> + }
> +
> + might_sleep();
> + for (i = 0; i < pages_per_huge_page; i++) {
> + cond_resched();
> + clear_user_highpage(page + i, addr + i * PAGE_SIZE);
> + }
> +}
> +
> +static void copy_gigantic_page(struct page *dst, struct page *src,
> + unsigned long addr,
> + struct vm_area_struct *vma,
> + unsigned int pages_per_huge_page)
> +{
> + int i;
> + struct page *dst_base = dst;
> + struct page *src_base = src;
> + might_sleep();
> + for (i = 0; i < pages_per_huge_page; ) {
> + cond_resched();
> + copy_user_highpage(dst, src, addr + i*PAGE_SIZE, vma);
> +
> + i++;
> + dst = mem_map_next(dst, dst_base, i);
> + src = mem_map_next(src, src_base, i);
> + }
> +}
> +void copy_huge_page(struct page *dst, struct page *src,
> + unsigned long addr, struct vm_area_struct *vma,
> + unsigned int pages_per_huge_page)
> +{
> + int i;
> +
> + if (unlikely(pages_per_huge_page > MAX_ORDER_NR_PAGES)) {
> + copy_gigantic_page(dst, src, addr, vma, pages_per_huge_page);
> + return;
> + }
> +
> + might_sleep();
> + for (i = 0; i < pages_per_huge_page; i++) {
> + cond_resched();
> + copy_user_highpage(dst + i, src + i, addr + i*PAGE_SIZE,
> + vma);
> + }
> +}
> +#endif /* CONFIG_TRANSPARENT_HUGEPAGE || CONFIG_HUGETLBFS */
>
--
Mel Gorman
Part-time Phd Student Linux Technology Center
University of Limerick IBM Dublin Software Lab
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2010-01-26 20:10 UTC|newest]
Thread overview: 118+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-01-26 13:51 [PATCH 00 of 31] Transparent Hugepage support #7 Andrea Arcangeli
2010-01-26 13:51 ` [PATCH 01 of 31] define MADV_HUGEPAGE Andrea Arcangeli
2010-01-26 14:49 ` Rik van Riel
2010-01-26 17:49 ` Mel Gorman
2010-01-27 16:37 ` Hugh Dickins
2010-01-27 17:13 ` Andrea Arcangeli
2010-01-27 17:29 ` Hugh Dickins
2010-01-27 17:45 ` Pekka Enberg
2010-01-27 21:44 ` Arnd Bergmann
2010-01-26 13:51 ` [PATCH 02 of 31] compound_lock Andrea Arcangeli
2010-01-26 14:51 ` Rik van Riel
2010-01-26 15:30 ` Andrea Arcangeli
2010-01-26 15:36 ` Christoph Lameter
2010-01-26 15:51 ` Andrea Arcangeli
2010-01-26 17:50 ` Mel Gorman
2010-01-26 13:51 ` [PATCH 03 of 31] alter compound get_page/put_page Andrea Arcangeli
2010-01-26 15:00 ` Rik van Riel
2010-01-26 15:31 ` Andrea Arcangeli
2010-01-26 16:00 ` Christoph Lameter
2010-01-26 18:02 ` Mel Gorman
2010-01-27 18:58 ` Andrea Arcangeli
2010-01-28 15:23 ` Mel Gorman
2010-01-26 13:51 ` [PATCH 04 of 31] update futex compound knowledge Andrea Arcangeli
2010-01-26 16:12 ` Rik van Riel
2010-01-26 17:10 ` Andrea Arcangeli
2010-01-26 19:48 ` Rik van Riel
2010-01-26 18:37 ` Mel Gorman
2010-01-27 19:45 ` Andrea Arcangeli
2010-01-28 15:33 ` Mel Gorman
2010-01-28 15:57 ` Andrea Arcangeli
2010-01-26 13:52 ` [PATCH 05 of 31] fix bad_page to show the real reason the page is bad Andrea Arcangeli
2010-01-26 16:13 ` Rik van Riel
2010-01-26 18:38 ` Mel Gorman
2010-01-26 13:52 ` [PATCH 06 of 31] clear compound mapping Andrea Arcangeli
2010-01-26 16:13 ` Rik van Riel
2010-01-26 18:39 ` Mel Gorman
2010-01-26 13:52 ` [PATCH 07 of 31] add native_set_pmd_at Andrea Arcangeli
2010-01-26 16:14 ` Rik van Riel
2010-01-26 19:10 ` Mel Gorman
2010-01-26 13:52 ` [PATCH 08 of 31] add pmd paravirt ops Andrea Arcangeli
2010-01-26 16:43 ` Rik van Riel
2010-01-26 19:13 ` Mel Gorman
2010-01-26 13:52 ` [PATCH 09 of 31] no paravirt version of pmd ops Andrea Arcangeli
2010-01-26 16:46 ` Rik van Riel
2010-01-26 19:15 ` Mel Gorman
2010-01-26 13:52 ` [PATCH 10 of 31] export maybe_mkwrite Andrea Arcangeli
2010-01-26 16:56 ` Rik van Riel
2010-01-26 19:23 ` Mel Gorman
2010-01-26 13:52 ` [PATCH 11 of 31] comment reminder in destroy_compound_page Andrea Arcangeli
2010-01-26 16:59 ` Rik van Riel
2010-01-26 19:24 ` Mel Gorman
2010-01-26 13:52 ` [PATCH 12 of 31] config_transparent_hugepage Andrea Arcangeli
2010-01-26 17:03 ` Rik van Riel
2010-01-26 19:34 ` Mel Gorman
2010-01-27 19:54 ` Andrea Arcangeli
2010-01-28 15:34 ` Mel Gorman
2010-01-26 13:52 ` [PATCH 13 of 31] add pmd mangling functions to x86 Andrea Arcangeli
2010-01-26 17:11 ` Rik van Riel
2010-01-26 19:41 ` Mel Gorman
2010-01-27 19:59 ` Andrea Arcangeli
2010-01-26 13:52 ` [PATCH 14 of 31] add pmd mangling generic functions Andrea Arcangeli
2010-01-26 17:14 ` Rik van Riel
2010-01-26 19:44 ` Mel Gorman
2010-01-28 15:57 ` Andrea Arcangeli
2010-01-26 13:52 ` [PATCH 15 of 31] special pmd_trans_* functions Andrea Arcangeli
2010-01-26 17:20 ` Rik van Riel
2010-01-26 13:52 ` [PATCH 16 of 31] bail out gup_fast on splitting pmd Andrea Arcangeli
2010-01-26 17:21 ` Rik van Riel
2010-01-26 19:50 ` Mel Gorman
2010-01-26 13:52 ` [PATCH 17 of 31] pte alloc trans splitting Andrea Arcangeli
2010-01-26 17:24 ` Rik van Riel
2010-01-26 19:53 ` Mel Gorman
2010-01-26 13:52 ` [PATCH 18 of 31] add pmd mmu_notifier helpers Andrea Arcangeli
2010-01-26 17:24 ` Rik van Riel
2010-01-26 13:52 ` [PATCH 19 of 31] clear page compound Andrea Arcangeli
2010-01-26 17:25 ` Rik van Riel
2010-01-26 19:56 ` Mel Gorman
2010-01-27 22:51 ` Andrea Arcangeli
2010-01-26 13:52 ` [PATCH 20 of 31] add pmd_huge_pte to mm_struct Andrea Arcangeli
2010-01-26 17:48 ` Rik van Riel
2010-01-26 13:52 ` [PATCH 21 of 31] split_huge_page_mm/vma Andrea Arcangeli
2010-01-26 17:34 ` Mel Gorman
2010-01-26 19:49 ` Andrea Arcangeli
2010-01-26 20:03 ` Mel Gorman
2010-01-26 17:58 ` Rik van Riel
2010-01-26 13:52 ` [PATCH 22 of 31] split_huge_page paging Andrea Arcangeli
2010-01-26 18:02 ` Rik van Riel
2010-01-27 18:43 ` Andrea Arcangeli
2010-01-26 20:08 ` Mel Gorman
2010-01-26 13:52 ` [PATCH 23 of 31] clear_copy_huge_page Andrea Arcangeli
2010-01-26 18:14 ` Rik van Riel
2010-01-26 20:10 ` Mel Gorman [this message]
2010-01-26 13:52 ` [PATCH 24 of 31] kvm mmu transparent hugepage support Andrea Arcangeli
2010-01-26 18:16 ` Rik van Riel
2010-01-26 13:52 ` [PATCH 25 of 31] transparent hugepage core Andrea Arcangeli
2010-01-26 22:34 ` Rik van Riel
2010-01-26 13:52 ` [PATCH 26 of 31] madvise(MADV_HUGEPAGE) Andrea Arcangeli
2010-01-26 22:50 ` Rik van Riel
2010-01-26 13:52 ` [PATCH 27 of 31] pmd_trans_huge migrate bugcheck Andrea Arcangeli
2010-01-26 22:51 ` Rik van Riel
2010-01-26 13:52 ` [PATCH 28 of 31] memcg compound Andrea Arcangeli
2010-01-26 22:53 ` Rik van Riel
2010-01-26 13:52 ` [PATCH 29 of 31] memcg huge memory Andrea Arcangeli
2010-01-26 22:53 ` Rik van Riel
2010-01-26 13:52 ` [PATCH 30 of 31] transparent hugepage vmstat Andrea Arcangeli
2010-01-26 22:55 ` Rik van Riel
2010-01-28 1:04 ` Andrea Arcangeli
2010-01-28 1:22 ` Rik van Riel
2010-01-26 13:52 ` [PATCH 31 of 31] khugepaged Andrea Arcangeli
2010-01-26 23:04 ` Rik van Riel
2010-01-26 17:55 ` [PATCH 00 of 31] Transparent Hugepage support #7 Michael S. Tsirkin
2010-01-27 0:00 ` Andrea Arcangeli
2010-01-27 0:32 ` Andrea Arcangeli
2010-01-27 0:47 ` Andrea Arcangeli
2010-01-27 20:20 ` Michael S. Tsirkin
2010-01-27 22:58 ` Andrea Arcangeli
-- strict thread matches above, loose matches on Subject: below --
2010-01-28 14:33 [PATCH 00 of 31] Transparent Hugepage support #8 Andrea Arcangeli
2010-01-28 14:33 ` [PATCH 23 of 31] clear_copy_huge_page Andrea Arcangeli
2010-01-25 17:18 [PATCH 00 of 31] Transparent Hugepage support #6 Andrea Arcangeli
2010-01-25 17:19 ` [PATCH 23 of 31] clear_copy_huge_page Andrea Arcangeli
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=20100126201026.GY16468@csn.ul.ie \
--to=mel@csn.ul.ie \
--cc=aarcange@redhat.com \
--cc=agl@us.ibm.com \
--cc=akpm@linux-foundation.org \
--cc=andi@firstfloor.org \
--cc=avi@redhat.com \
--cc=benh@kernel.crashing.org \
--cc=bpicco@redhat.com \
--cc=chellwig@redhat.com \
--cc=chrisw@sous-sol.org \
--cc=cl@linux-foundation.org \
--cc=dave@linux.vnet.ibm.com \
--cc=hugh.dickins@tiscali.co.uk \
--cc=ieidus@redhat.com \
--cc=kamezawa.hiroyu@jp.fujitsu.com \
--cc=kosaki.motohiro@jp.fujitsu.com \
--cc=linux-mm@kvack.org \
--cc=mingo@elte.hu \
--cc=mtosatti@redhat.com \
--cc=npiggin@suse.de \
--cc=riel@redhat.com \
--cc=travis@sgi.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;
as well as URLs for NNTP newsgroup(s).