linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Andi Kleen <andi@firstfloor.org>
To: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
Cc: Andi Kleen <andi@firstfloor.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Mel Gorman <mel@csn.ul.ie>, Wu Fengguang <fengguang.wu@intel.com>,
	Jun'ichi Nomura <j-nomura@ce.jp.nec.com>,
	linux-mm <linux-mm@kvack.org>,
	LKML <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 6/7] hugetlb: hugepage migration core
Date: Mon, 5 Jul 2010 11:59:28 +0200	[thread overview]
Message-ID: <20100705095927.GC8510@basil.fritz.box> (raw)
In-Reply-To: <1278049646-29769-7-git-send-email-n-horiguchi@ah.jp.nec.com>

On Fri, Jul 02, 2010 at 02:47:25PM +0900, Naoya Horiguchi wrote:
> diff --git v2.6.35-rc3-hwpoison/mm/migrate.c v2.6.35-rc3-hwpoison/mm/migrate.c
> index e4a381c..e7af148 100644
> --- v2.6.35-rc3-hwpoison/mm/migrate.c
> +++ v2.6.35-rc3-hwpoison/mm/migrate.c
> @@ -32,6 +32,7 @@
>  #include <linux/security.h>
>  #include <linux/memcontrol.h>
>  #include <linux/syscalls.h>
> +#include <linux/hugetlb.h>
>  #include <linux/gfp.h>
>  
>  #include "internal.h"
> @@ -74,6 +75,8 @@ void putback_lru_pages(struct list_head *l)
>  	struct page *page2;
>  
>  	list_for_each_entry_safe(page, page2, l, lru) {
> +		if (PageHuge(page))
> +			break;

Why is this a break and not a continue? Couldn't you have small and large
pages in the same list?

There's more code that handles LRU in this file. Do they all handle huge pages
correctly?

I also noticed we do not always lock all sub pages in the huge page. Now if
IO happens it will lock on subpages, not the head page. But this code
handles all subpages as a unit. Could this cause locking problems?
Perhaps it would be safer to lock all sub pages always? Or would 
need  to audit other page users to make sure they always lock on the head
and do the same here.

Hmm page reference counts may have the same issue?

> @@ -95,6 +98,12 @@ static int remove_migration_pte(struct page *new, struct vm_area_struct *vma,
>  	pte_t *ptep, pte;
>   	spinlock_t *ptl;
>  
> +	if (unlikely(PageHuge(new))) {
> +		ptep = huge_pte_offset(mm, addr);
> +		ptl = &mm->page_table_lock;
> +		goto check;
> +	}
> +
>   	pgd = pgd_offset(mm, addr);
>  	if (!pgd_present(*pgd))
>  		goto out;
> @@ -115,6 +124,7 @@ static int remove_migration_pte(struct page *new, struct vm_area_struct *vma,
>   	}
>  
>   	ptl = pte_lockptr(mm, pmd);
> +check:

I think I would prefer a proper if else over a goto here.

The lookup should probably just call a helper to make this function more readable
(like lookup_address(), unfortunately that's x86 specific right now)


> @@ -284,7 +308,17 @@ static int migrate_page_move_mapping(struct address_space *mapping,
>   */
>  static void migrate_page_copy(struct page *newpage, struct page *page)
>  {
> -	copy_highpage(newpage, page);
> +	int i;
> +	struct hstate *h;
> +	if (!PageHuge(newpage))
> +		copy_highpage(newpage, page);
> +	else {
> +		h = page_hstate(newpage);
> +		for (i = 0; i < pages_per_huge_page(h); i++) {
> +			cond_resched();
> +			copy_highpage(newpage + i, page + i);

Better reuse copy_huge_page() instead of open coding.


-Andi
-- 
ak@linux.intel.com -- Speaking for myself only.

--
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>

  reply	other threads:[~2010-07-05  9:59 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-07-02  5:47 [PATCH 0/7] hugepage migration Naoya Horiguchi
2010-07-02  5:47 ` [PATCH 1/7] hugetlb: add missing unlock in avoidcopy path in hugetlb_cow() Naoya Horiguchi
2010-07-02  8:31   ` Andi Kleen
2010-07-05  8:44     ` Naoya Horiguchi
2010-07-07 22:17   ` Andi Kleen
2010-07-02  5:47 ` [PATCH 2/7] hugetlb, HWPOISON: move PG_HWPoison bit check Naoya Horiguchi
2010-07-02  5:47 ` [PATCH 3/7] hugetlb: add allocate function for hugepage migration Naoya Horiguchi
2010-07-02  9:08   ` Andi Kleen
2010-07-05  8:46     ` Naoya Horiguchi
2010-07-05  9:28       ` Andi Kleen
2010-07-02  5:47 ` [PATCH 4/7] hugetlb: add hugepage check in mem_cgroup_{register,end}_migration() Naoya Horiguchi
2010-07-02  9:11   ` Andi Kleen
2010-07-02  5:47 ` [PATCH 5/7] hugetlb: pin oldpage in page migration Naoya Horiguchi
2010-07-05  9:45   ` Andi Kleen
2010-07-06 15:54   ` Christoph Lameter
2010-07-07  6:40     ` Naoya Horiguchi
2010-07-02  5:47 ` [PATCH 6/7] hugetlb: hugepage migration core Naoya Horiguchi
2010-07-05  9:59   ` Andi Kleen [this message]
2010-07-06  3:33     ` Naoya Horiguchi
2010-07-06  7:13       ` Andi Kleen
2010-07-07  6:05         ` Naoya Horiguchi
2010-07-07  9:27           ` Andi Kleen
2010-07-08  5:44             ` Naoya Horiguchi
2010-07-08  6:49               ` Andi Kleen
2010-07-06 16:02       ` Christoph Lameter
2010-07-07  6:44         ` Naoya Horiguchi
2010-07-06 16:00   ` Christoph Lameter
2010-07-07  6:45     ` Naoya Horiguchi
2010-07-02  5:47 ` [PATCH 7/7] hugetlb, HWPOISON: soft offlining for hugepage Naoya Horiguchi
2010-07-05 10:28   ` Andi Kleen
2010-07-02  8:30 ` [PATCH 0/7] hugepage migration Andi Kleen
2010-07-05  8:44   ` Naoya Horiguchi

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=20100705095927.GC8510@basil.fritz.box \
    --to=andi@firstfloor.org \
    --cc=akpm@linux-foundation.org \
    --cc=fengguang.wu@intel.com \
    --cc=j-nomura@ce.jp.nec.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mel@csn.ul.ie \
    --cc=n-horiguchi@ah.jp.nec.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).