Re: [PATCH 9/8] hugetlb: add pmd_huge_support() to migrate only pmd-based hugepage

2013-08-05 Thread Naoya Horiguchi
On Tue, Aug 06, 2013 at 07:26:10AM +0530, Aneesh Kumar K.V wrote:
> Naoya Horiguchi  writes:
> 
> > This patch is motivated by the discussion with Aneesh about "extend
> > hugepage migration" patchset.
> >   http://thread.gmane.org/gmane.linux.kernel.mm/103933/focus=104391
> > I'll append this to the patchset in the next post, but before that
> > I want this patch to be reviewed (I don't want to repeat posting the
> > whole set for just minor changes.)
> >
> > Any comments?
> >
> > Thanks,
> > Naoya Horiguchi
> > ---
> > From: Naoya Horiguchi 
> > Date: Mon, 5 Aug 2013 13:33:02 -0400
> > Subject: [PATCH] hugetlb: add pmd_huge_support() to migrate only pmd-based
> >  hugepage
> >
> > Currently hugepage migration works well only for pmd-based hugepages,
> > because core routines of hugepage migration use pmd specific internal
> > functions like huge_pte_offset(). So we should not enable the migration
> > of other levels of hugepages until we are ready for it.
> 
> I guess huge_pte_offset may not be the right reason because archs do
> implement huge_pte_offsets even if they are not pmd-based hugepages
> 
> pte_t *huge_pte_offset(struct mm_struct *mm, unsigned long addr)
> {
>   /* Only called for hugetlbfs pages, hence can ignore THP */
>   return find_linux_pte_or_hugepte(mm->pgd, addr, NULL);
> }

You're right, sorry.
Honestly saying, I tested only on x86 and my testing on pud-based hugepage
is not enough (I experienced undissolved bugs,) so I want to restrict the
target for now.

> >
> > Some users of hugepage migration (mbind, move_pages, and migrate_pages)
> > do page table walk and check pud/pmd_huge() there, so they are safe.
> > But the other users (softoffline and memory hotremove) don't do this,
> > so they can try to migrate unexpected types of hugepages.
> >
> > To prevent this, we introduce an architecture dependent check of whether
> > hugepage are implemented on a pmd basis or not. It returns 0 if pmd_huge()
> > returns always 0, and 1 otherwise.
> >
> 
> so why not #define pmd_huge_support pmd_huge or use pmd_huge directly ?

The caller (unmap_and_move_huge_page) doesn't have pmd, so we need do
rmap to get the pmd associated with the source hugepage. Maybe the patch
becomes smaller with this, but maybe it's slower.

Thanks,
Naoya Horiguchi

> > Signed-off-by: Naoya Horiguchi 
> > ---
> >  arch/arm/mm/hugetlbpage.c |  5 +
> >  arch/arm64/mm/hugetlbpage.c   |  5 +
> >  arch/ia64/mm/hugetlbpage.c|  5 +
> >  arch/metag/mm/hugetlbpage.c   |  5 +
> >  arch/mips/mm/hugetlbpage.c|  5 +
> >  arch/powerpc/mm/hugetlbpage.c | 10 ++
> >  arch/s390/mm/hugetlbpage.c|  5 +
> >  arch/sh/mm/hugetlbpage.c  |  5 +
> >  arch/sparc/mm/hugetlbpage.c   |  5 +
> >  arch/tile/mm/hugetlbpage.c|  5 +
> >  arch/x86/mm/hugetlbpage.c |  8 
> >  include/linux/hugetlb.h   |  2 ++
> >  mm/migrate.c  | 11 +++
> >  13 files changed, 76 insertions(+)
> >
> > diff --git a/arch/arm/mm/hugetlbpage.c b/arch/arm/mm/hugetlbpage.c
> > index 3d1e4a2..3f3b6a7 100644
> > --- a/arch/arm/mm/hugetlbpage.c
> > +++ b/arch/arm/mm/hugetlbpage.c
> > @@ -99,3 +99,8 @@ int pmd_huge(pmd_t pmd)
> >  {
> > return pmd_val(pmd) && !(pmd_val(pmd) & PMD_TABLE_BIT);
> >  }
> > +
> > +int pmd_huge_support(void)
> > +{
> > +   return 1;
> > +}
> 
> -aneesh
> 
> --
> To unsubscribe, send a message with 'unsubscribe linux-mm' in
> the body to majord...@kvack.org.  For more info on Linux MM,
> see: http://www.linux-mm.org/ .
> Don't email: mailto:"d...@kvack.org;> em...@kvack.org 
>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 9/8] hugetlb: add pmd_huge_support() to migrate only pmd-based hugepage

2013-08-05 Thread Aneesh Kumar K.V
Naoya Horiguchi  writes:

> This patch is motivated by the discussion with Aneesh about "extend
> hugepage migration" patchset.
>   http://thread.gmane.org/gmane.linux.kernel.mm/103933/focus=104391
> I'll append this to the patchset in the next post, but before that
> I want this patch to be reviewed (I don't want to repeat posting the
> whole set for just minor changes.)
>
> Any comments?
>
> Thanks,
> Naoya Horiguchi
> ---
> From: Naoya Horiguchi 
> Date: Mon, 5 Aug 2013 13:33:02 -0400
> Subject: [PATCH] hugetlb: add pmd_huge_support() to migrate only pmd-based
>  hugepage
>
> Currently hugepage migration works well only for pmd-based hugepages,
> because core routines of hugepage migration use pmd specific internal
> functions like huge_pte_offset(). So we should not enable the migration
> of other levels of hugepages until we are ready for it.

I guess huge_pte_offset may not be the right reason because archs do
implement huge_pte_offsets even if they are not pmd-based hugepages

pte_t *huge_pte_offset(struct mm_struct *mm, unsigned long addr)
{
/* Only called for hugetlbfs pages, hence can ignore THP */
return find_linux_pte_or_hugepte(mm->pgd, addr, NULL);
}

>
> Some users of hugepage migration (mbind, move_pages, and migrate_pages)
> do page table walk and check pud/pmd_huge() there, so they are safe.
> But the other users (softoffline and memory hotremove) don't do this,
> so they can try to migrate unexpected types of hugepages.
>
> To prevent this, we introduce an architecture dependent check of whether
> hugepage are implemented on a pmd basis or not. It returns 0 if pmd_huge()
> returns always 0, and 1 otherwise.
>

so why not #define pmd_huge_support pmd_huge or use pmd_huge directly ?

> Signed-off-by: Naoya Horiguchi 
> ---
>  arch/arm/mm/hugetlbpage.c |  5 +
>  arch/arm64/mm/hugetlbpage.c   |  5 +
>  arch/ia64/mm/hugetlbpage.c|  5 +
>  arch/metag/mm/hugetlbpage.c   |  5 +
>  arch/mips/mm/hugetlbpage.c|  5 +
>  arch/powerpc/mm/hugetlbpage.c | 10 ++
>  arch/s390/mm/hugetlbpage.c|  5 +
>  arch/sh/mm/hugetlbpage.c  |  5 +
>  arch/sparc/mm/hugetlbpage.c   |  5 +
>  arch/tile/mm/hugetlbpage.c|  5 +
>  arch/x86/mm/hugetlbpage.c |  8 
>  include/linux/hugetlb.h   |  2 ++
>  mm/migrate.c  | 11 +++
>  13 files changed, 76 insertions(+)
>
> diff --git a/arch/arm/mm/hugetlbpage.c b/arch/arm/mm/hugetlbpage.c
> index 3d1e4a2..3f3b6a7 100644
> --- a/arch/arm/mm/hugetlbpage.c
> +++ b/arch/arm/mm/hugetlbpage.c
> @@ -99,3 +99,8 @@ int pmd_huge(pmd_t pmd)
>  {
>   return pmd_val(pmd) && !(pmd_val(pmd) & PMD_TABLE_BIT);
>  }
> +
> +int pmd_huge_support(void)
> +{
> + return 1;
> +}

-aneesh

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH 9/8] hugetlb: add pmd_huge_support() to migrate only pmd-based hugepage

2013-08-05 Thread Naoya Horiguchi
This patch is motivated by the discussion with Aneesh about "extend
hugepage migration" patchset.
  http://thread.gmane.org/gmane.linux.kernel.mm/103933/focus=104391
I'll append this to the patchset in the next post, but before that
I want this patch to be reviewed (I don't want to repeat posting the
whole set for just minor changes.)

Any comments?

Thanks,
Naoya Horiguchi
---
From: Naoya Horiguchi 
Date: Mon, 5 Aug 2013 13:33:02 -0400
Subject: [PATCH] hugetlb: add pmd_huge_support() to migrate only pmd-based
 hugepage

Currently hugepage migration works well only for pmd-based hugepages,
because core routines of hugepage migration use pmd specific internal
functions like huge_pte_offset(). So we should not enable the migration
of other levels of hugepages until we are ready for it.

Some users of hugepage migration (mbind, move_pages, and migrate_pages)
do page table walk and check pud/pmd_huge() there, so they are safe.
But the other users (softoffline and memory hotremove) don't do this,
so they can try to migrate unexpected types of hugepages.

To prevent this, we introduce an architecture dependent check of whether
hugepage are implemented on a pmd basis or not. It returns 0 if pmd_huge()
returns always 0, and 1 otherwise.

Signed-off-by: Naoya Horiguchi 
---
 arch/arm/mm/hugetlbpage.c |  5 +
 arch/arm64/mm/hugetlbpage.c   |  5 +
 arch/ia64/mm/hugetlbpage.c|  5 +
 arch/metag/mm/hugetlbpage.c   |  5 +
 arch/mips/mm/hugetlbpage.c|  5 +
 arch/powerpc/mm/hugetlbpage.c | 10 ++
 arch/s390/mm/hugetlbpage.c|  5 +
 arch/sh/mm/hugetlbpage.c  |  5 +
 arch/sparc/mm/hugetlbpage.c   |  5 +
 arch/tile/mm/hugetlbpage.c|  5 +
 arch/x86/mm/hugetlbpage.c |  8 
 include/linux/hugetlb.h   |  2 ++
 mm/migrate.c  | 11 +++
 13 files changed, 76 insertions(+)

diff --git a/arch/arm/mm/hugetlbpage.c b/arch/arm/mm/hugetlbpage.c
index 3d1e4a2..3f3b6a7 100644
--- a/arch/arm/mm/hugetlbpage.c
+++ b/arch/arm/mm/hugetlbpage.c
@@ -99,3 +99,8 @@ int pmd_huge(pmd_t pmd)
 {
return pmd_val(pmd) && !(pmd_val(pmd) & PMD_TABLE_BIT);
 }
+
+int pmd_huge_support(void)
+{
+   return 1;
+}
diff --git a/arch/arm64/mm/hugetlbpage.c b/arch/arm64/mm/hugetlbpage.c
index 2fc8258..5e9aec3 100644
--- a/arch/arm64/mm/hugetlbpage.c
+++ b/arch/arm64/mm/hugetlbpage.c
@@ -54,6 +54,11 @@ int pud_huge(pud_t pud)
return !(pud_val(pud) & PUD_TABLE_BIT);
 }
 
+int pmd_huge_support(void)
+{
+   return 1;
+}
+
 static __init int setup_hugepagesz(char *opt)
 {
unsigned long ps = memparse(opt, );
diff --git a/arch/ia64/mm/hugetlbpage.c b/arch/ia64/mm/hugetlbpage.c
index 76069c1..68232db 100644
--- a/arch/ia64/mm/hugetlbpage.c
+++ b/arch/ia64/mm/hugetlbpage.c
@@ -114,6 +114,11 @@ int pud_huge(pud_t pud)
return 0;
 }
 
+int pmd_huge_support(void)
+{
+   return 0;
+}
+
 struct page *
 follow_huge_pmd(struct mm_struct *mm, unsigned long address, pmd_t *pmd, int 
write)
 {
diff --git a/arch/metag/mm/hugetlbpage.c b/arch/metag/mm/hugetlbpage.c
index 3c52fa6..0424315 100644
--- a/arch/metag/mm/hugetlbpage.c
+++ b/arch/metag/mm/hugetlbpage.c
@@ -110,6 +110,11 @@ int pud_huge(pud_t pud)
return 0;
 }
 
+int pmd_huge_support(void)
+{
+   return 1;
+}
+
 struct page *follow_huge_pmd(struct mm_struct *mm, unsigned long address,
 pmd_t *pmd, int write)
 {
diff --git a/arch/mips/mm/hugetlbpage.c b/arch/mips/mm/hugetlbpage.c
index a7fee0d..01fda44 100644
--- a/arch/mips/mm/hugetlbpage.c
+++ b/arch/mips/mm/hugetlbpage.c
@@ -85,6 +85,11 @@ int pud_huge(pud_t pud)
return (pud_val(pud) & _PAGE_HUGE) != 0;
 }
 
+int pmd_huge_support(void)
+{
+   return 1;
+}
+
 struct page *
 follow_huge_pmd(struct mm_struct *mm, unsigned long address,
pmd_t *pmd, int write)
diff --git a/arch/powerpc/mm/hugetlbpage.c b/arch/powerpc/mm/hugetlbpage.c
index 834ca8e..d67db4b 100644
--- a/arch/powerpc/mm/hugetlbpage.c
+++ b/arch/powerpc/mm/hugetlbpage.c
@@ -86,6 +86,11 @@ int pgd_huge(pgd_t pgd)
 */
return ((pgd_val(pgd) & 0x3) != 0x0);
 }
+
+int pmd_huge_support(void)
+{
+   return 1;
+}
 #else
 int pmd_huge(pmd_t pmd)
 {
@@ -101,6 +106,11 @@ int pgd_huge(pgd_t pgd)
 {
return 0;
 }
+
+int pmd_huge_support(void)
+{
+   return 0;
+}
 #endif
 
 pte_t *huge_pte_offset(struct mm_struct *mm, unsigned long addr)
diff --git a/arch/s390/mm/hugetlbpage.c b/arch/s390/mm/hugetlbpage.c
index 121089d..951ee25 100644
--- a/arch/s390/mm/hugetlbpage.c
+++ b/arch/s390/mm/hugetlbpage.c
@@ -117,6 +117,11 @@ int pud_huge(pud_t pud)
return 0;
 }
 
+int pmd_huge_support(void)
+{
+   return 1;
+}
+
 struct page *follow_huge_pmd(struct mm_struct *mm, unsigned long address,
 pmd_t *pmdp, int write)
 {
diff --git a/arch/sh/mm/hugetlbpage.c b/arch/sh/mm/hugetlbpage.c
index d776234..0d676a4 100644
--- a/arch/sh/mm/hugetlbpage.c
+++ 

[PATCH 9/8] hugetlb: add pmd_huge_support() to migrate only pmd-based hugepage

2013-08-05 Thread Naoya Horiguchi
This patch is motivated by the discussion with Aneesh about extend
hugepage migration patchset.
  http://thread.gmane.org/gmane.linux.kernel.mm/103933/focus=104391
I'll append this to the patchset in the next post, but before that
I want this patch to be reviewed (I don't want to repeat posting the
whole set for just minor changes.)

Any comments?

Thanks,
Naoya Horiguchi
---
From: Naoya Horiguchi n-horigu...@ah.jp.nec.com
Date: Mon, 5 Aug 2013 13:33:02 -0400
Subject: [PATCH] hugetlb: add pmd_huge_support() to migrate only pmd-based
 hugepage

Currently hugepage migration works well only for pmd-based hugepages,
because core routines of hugepage migration use pmd specific internal
functions like huge_pte_offset(). So we should not enable the migration
of other levels of hugepages until we are ready for it.

Some users of hugepage migration (mbind, move_pages, and migrate_pages)
do page table walk and check pud/pmd_huge() there, so they are safe.
But the other users (softoffline and memory hotremove) don't do this,
so they can try to migrate unexpected types of hugepages.

To prevent this, we introduce an architecture dependent check of whether
hugepage are implemented on a pmd basis or not. It returns 0 if pmd_huge()
returns always 0, and 1 otherwise.

Signed-off-by: Naoya Horiguchi n-horigu...@ah.jp.nec.com
---
 arch/arm/mm/hugetlbpage.c |  5 +
 arch/arm64/mm/hugetlbpage.c   |  5 +
 arch/ia64/mm/hugetlbpage.c|  5 +
 arch/metag/mm/hugetlbpage.c   |  5 +
 arch/mips/mm/hugetlbpage.c|  5 +
 arch/powerpc/mm/hugetlbpage.c | 10 ++
 arch/s390/mm/hugetlbpage.c|  5 +
 arch/sh/mm/hugetlbpage.c  |  5 +
 arch/sparc/mm/hugetlbpage.c   |  5 +
 arch/tile/mm/hugetlbpage.c|  5 +
 arch/x86/mm/hugetlbpage.c |  8 
 include/linux/hugetlb.h   |  2 ++
 mm/migrate.c  | 11 +++
 13 files changed, 76 insertions(+)

diff --git a/arch/arm/mm/hugetlbpage.c b/arch/arm/mm/hugetlbpage.c
index 3d1e4a2..3f3b6a7 100644
--- a/arch/arm/mm/hugetlbpage.c
+++ b/arch/arm/mm/hugetlbpage.c
@@ -99,3 +99,8 @@ int pmd_huge(pmd_t pmd)
 {
return pmd_val(pmd)  !(pmd_val(pmd)  PMD_TABLE_BIT);
 }
+
+int pmd_huge_support(void)
+{
+   return 1;
+}
diff --git a/arch/arm64/mm/hugetlbpage.c b/arch/arm64/mm/hugetlbpage.c
index 2fc8258..5e9aec3 100644
--- a/arch/arm64/mm/hugetlbpage.c
+++ b/arch/arm64/mm/hugetlbpage.c
@@ -54,6 +54,11 @@ int pud_huge(pud_t pud)
return !(pud_val(pud)  PUD_TABLE_BIT);
 }
 
+int pmd_huge_support(void)
+{
+   return 1;
+}
+
 static __init int setup_hugepagesz(char *opt)
 {
unsigned long ps = memparse(opt, opt);
diff --git a/arch/ia64/mm/hugetlbpage.c b/arch/ia64/mm/hugetlbpage.c
index 76069c1..68232db 100644
--- a/arch/ia64/mm/hugetlbpage.c
+++ b/arch/ia64/mm/hugetlbpage.c
@@ -114,6 +114,11 @@ int pud_huge(pud_t pud)
return 0;
 }
 
+int pmd_huge_support(void)
+{
+   return 0;
+}
+
 struct page *
 follow_huge_pmd(struct mm_struct *mm, unsigned long address, pmd_t *pmd, int 
write)
 {
diff --git a/arch/metag/mm/hugetlbpage.c b/arch/metag/mm/hugetlbpage.c
index 3c52fa6..0424315 100644
--- a/arch/metag/mm/hugetlbpage.c
+++ b/arch/metag/mm/hugetlbpage.c
@@ -110,6 +110,11 @@ int pud_huge(pud_t pud)
return 0;
 }
 
+int pmd_huge_support(void)
+{
+   return 1;
+}
+
 struct page *follow_huge_pmd(struct mm_struct *mm, unsigned long address,
 pmd_t *pmd, int write)
 {
diff --git a/arch/mips/mm/hugetlbpage.c b/arch/mips/mm/hugetlbpage.c
index a7fee0d..01fda44 100644
--- a/arch/mips/mm/hugetlbpage.c
+++ b/arch/mips/mm/hugetlbpage.c
@@ -85,6 +85,11 @@ int pud_huge(pud_t pud)
return (pud_val(pud)  _PAGE_HUGE) != 0;
 }
 
+int pmd_huge_support(void)
+{
+   return 1;
+}
+
 struct page *
 follow_huge_pmd(struct mm_struct *mm, unsigned long address,
pmd_t *pmd, int write)
diff --git a/arch/powerpc/mm/hugetlbpage.c b/arch/powerpc/mm/hugetlbpage.c
index 834ca8e..d67db4b 100644
--- a/arch/powerpc/mm/hugetlbpage.c
+++ b/arch/powerpc/mm/hugetlbpage.c
@@ -86,6 +86,11 @@ int pgd_huge(pgd_t pgd)
 */
return ((pgd_val(pgd)  0x3) != 0x0);
 }
+
+int pmd_huge_support(void)
+{
+   return 1;
+}
 #else
 int pmd_huge(pmd_t pmd)
 {
@@ -101,6 +106,11 @@ int pgd_huge(pgd_t pgd)
 {
return 0;
 }
+
+int pmd_huge_support(void)
+{
+   return 0;
+}
 #endif
 
 pte_t *huge_pte_offset(struct mm_struct *mm, unsigned long addr)
diff --git a/arch/s390/mm/hugetlbpage.c b/arch/s390/mm/hugetlbpage.c
index 121089d..951ee25 100644
--- a/arch/s390/mm/hugetlbpage.c
+++ b/arch/s390/mm/hugetlbpage.c
@@ -117,6 +117,11 @@ int pud_huge(pud_t pud)
return 0;
 }
 
+int pmd_huge_support(void)
+{
+   return 1;
+}
+
 struct page *follow_huge_pmd(struct mm_struct *mm, unsigned long address,
 pmd_t *pmdp, int write)
 {
diff --git a/arch/sh/mm/hugetlbpage.c b/arch/sh/mm/hugetlbpage.c
index d776234..0d676a4 100644
--- 

Re: [PATCH 9/8] hugetlb: add pmd_huge_support() to migrate only pmd-based hugepage

2013-08-05 Thread Aneesh Kumar K.V
Naoya Horiguchi n-horigu...@ah.jp.nec.com writes:

 This patch is motivated by the discussion with Aneesh about extend
 hugepage migration patchset.
   http://thread.gmane.org/gmane.linux.kernel.mm/103933/focus=104391
 I'll append this to the patchset in the next post, but before that
 I want this patch to be reviewed (I don't want to repeat posting the
 whole set for just minor changes.)

 Any comments?

 Thanks,
 Naoya Horiguchi
 ---
 From: Naoya Horiguchi n-horigu...@ah.jp.nec.com
 Date: Mon, 5 Aug 2013 13:33:02 -0400
 Subject: [PATCH] hugetlb: add pmd_huge_support() to migrate only pmd-based
  hugepage

 Currently hugepage migration works well only for pmd-based hugepages,
 because core routines of hugepage migration use pmd specific internal
 functions like huge_pte_offset(). So we should not enable the migration
 of other levels of hugepages until we are ready for it.

I guess huge_pte_offset may not be the right reason because archs do
implement huge_pte_offsets even if they are not pmd-based hugepages

pte_t *huge_pte_offset(struct mm_struct *mm, unsigned long addr)
{
/* Only called for hugetlbfs pages, hence can ignore THP */
return find_linux_pte_or_hugepte(mm-pgd, addr, NULL);
}


 Some users of hugepage migration (mbind, move_pages, and migrate_pages)
 do page table walk and check pud/pmd_huge() there, so they are safe.
 But the other users (softoffline and memory hotremove) don't do this,
 so they can try to migrate unexpected types of hugepages.

 To prevent this, we introduce an architecture dependent check of whether
 hugepage are implemented on a pmd basis or not. It returns 0 if pmd_huge()
 returns always 0, and 1 otherwise.


so why not #define pmd_huge_support pmd_huge or use pmd_huge directly ?

 Signed-off-by: Naoya Horiguchi n-horigu...@ah.jp.nec.com
 ---
  arch/arm/mm/hugetlbpage.c |  5 +
  arch/arm64/mm/hugetlbpage.c   |  5 +
  arch/ia64/mm/hugetlbpage.c|  5 +
  arch/metag/mm/hugetlbpage.c   |  5 +
  arch/mips/mm/hugetlbpage.c|  5 +
  arch/powerpc/mm/hugetlbpage.c | 10 ++
  arch/s390/mm/hugetlbpage.c|  5 +
  arch/sh/mm/hugetlbpage.c  |  5 +
  arch/sparc/mm/hugetlbpage.c   |  5 +
  arch/tile/mm/hugetlbpage.c|  5 +
  arch/x86/mm/hugetlbpage.c |  8 
  include/linux/hugetlb.h   |  2 ++
  mm/migrate.c  | 11 +++
  13 files changed, 76 insertions(+)

 diff --git a/arch/arm/mm/hugetlbpage.c b/arch/arm/mm/hugetlbpage.c
 index 3d1e4a2..3f3b6a7 100644
 --- a/arch/arm/mm/hugetlbpage.c
 +++ b/arch/arm/mm/hugetlbpage.c
 @@ -99,3 +99,8 @@ int pmd_huge(pmd_t pmd)
  {
   return pmd_val(pmd)  !(pmd_val(pmd)  PMD_TABLE_BIT);
  }
 +
 +int pmd_huge_support(void)
 +{
 + return 1;
 +}

-aneesh

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 9/8] hugetlb: add pmd_huge_support() to migrate only pmd-based hugepage

2013-08-05 Thread Naoya Horiguchi
On Tue, Aug 06, 2013 at 07:26:10AM +0530, Aneesh Kumar K.V wrote:
 Naoya Horiguchi n-horigu...@ah.jp.nec.com writes:
 
  This patch is motivated by the discussion with Aneesh about extend
  hugepage migration patchset.
http://thread.gmane.org/gmane.linux.kernel.mm/103933/focus=104391
  I'll append this to the patchset in the next post, but before that
  I want this patch to be reviewed (I don't want to repeat posting the
  whole set for just minor changes.)
 
  Any comments?
 
  Thanks,
  Naoya Horiguchi
  ---
  From: Naoya Horiguchi n-horigu...@ah.jp.nec.com
  Date: Mon, 5 Aug 2013 13:33:02 -0400
  Subject: [PATCH] hugetlb: add pmd_huge_support() to migrate only pmd-based
   hugepage
 
  Currently hugepage migration works well only for pmd-based hugepages,
  because core routines of hugepage migration use pmd specific internal
  functions like huge_pte_offset(). So we should not enable the migration
  of other levels of hugepages until we are ready for it.
 
 I guess huge_pte_offset may not be the right reason because archs do
 implement huge_pte_offsets even if they are not pmd-based hugepages
 
 pte_t *huge_pte_offset(struct mm_struct *mm, unsigned long addr)
 {
   /* Only called for hugetlbfs pages, hence can ignore THP */
   return find_linux_pte_or_hugepte(mm-pgd, addr, NULL);
 }

You're right, sorry.
Honestly saying, I tested only on x86 and my testing on pud-based hugepage
is not enough (I experienced undissolved bugs,) so I want to restrict the
target for now.

 
  Some users of hugepage migration (mbind, move_pages, and migrate_pages)
  do page table walk and check pud/pmd_huge() there, so they are safe.
  But the other users (softoffline and memory hotremove) don't do this,
  so they can try to migrate unexpected types of hugepages.
 
  To prevent this, we introduce an architecture dependent check of whether
  hugepage are implemented on a pmd basis or not. It returns 0 if pmd_huge()
  returns always 0, and 1 otherwise.
 
 
 so why not #define pmd_huge_support pmd_huge or use pmd_huge directly ?

The caller (unmap_and_move_huge_page) doesn't have pmd, so we need do
rmap to get the pmd associated with the source hugepage. Maybe the patch
becomes smaller with this, but maybe it's slower.

Thanks,
Naoya Horiguchi

  Signed-off-by: Naoya Horiguchi n-horigu...@ah.jp.nec.com
  ---
   arch/arm/mm/hugetlbpage.c |  5 +
   arch/arm64/mm/hugetlbpage.c   |  5 +
   arch/ia64/mm/hugetlbpage.c|  5 +
   arch/metag/mm/hugetlbpage.c   |  5 +
   arch/mips/mm/hugetlbpage.c|  5 +
   arch/powerpc/mm/hugetlbpage.c | 10 ++
   arch/s390/mm/hugetlbpage.c|  5 +
   arch/sh/mm/hugetlbpage.c  |  5 +
   arch/sparc/mm/hugetlbpage.c   |  5 +
   arch/tile/mm/hugetlbpage.c|  5 +
   arch/x86/mm/hugetlbpage.c |  8 
   include/linux/hugetlb.h   |  2 ++
   mm/migrate.c  | 11 +++
   13 files changed, 76 insertions(+)
 
  diff --git a/arch/arm/mm/hugetlbpage.c b/arch/arm/mm/hugetlbpage.c
  index 3d1e4a2..3f3b6a7 100644
  --- a/arch/arm/mm/hugetlbpage.c
  +++ b/arch/arm/mm/hugetlbpage.c
  @@ -99,3 +99,8 @@ int pmd_huge(pmd_t pmd)
   {
  return pmd_val(pmd)  !(pmd_val(pmd)  PMD_TABLE_BIT);
   }
  +
  +int pmd_huge_support(void)
  +{
  +   return 1;
  +}
 
 -aneesh
 
 --
 To unsubscribe, send a message with 'unsubscribe linux-mm' in
 the body to majord...@kvack.org.  For more info on Linux MM,
 see: http://www.linux-mm.org/ .
 Don't email: a href=mailto:d...@kvack.org; em...@kvack.org /a

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/