Message ID | 1540299721-26484-4-git-send-email-anshuman.khandual@arm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | arm64/mm: Enable HugeTLB migration | expand |
On Tue 23-10-18 18:31:59, Anshuman Khandual wrote: > Architectures like arm64 have HugeTLB page sizes which are different than > generic sizes at PMD, PUD, PGD level and implemented via contiguous bits. > At present these special size HugeTLB pages cannot be identified through > macros like (PMD|PUD|PGDIR)_SHIFT and hence chosen not be migrated. > > Enabling migration support for these special HugeTLB page sizes along with > the generic ones (PMD|PUD|PGD) would require identifying all of them on a > given platform. A platform specific hook can precisely enumerate all huge > page sizes supported for migration. Instead of comparing against standard > huge page orders let hugetlb_migration_support() function call a platform > hook arch_hugetlb_migration_support(). Default definition for the platform > hook maintains existing semantics which checks standard huge page order. > But an architecture can choose to override the default and provide support > for a comprehensive set of huge page sizes. > > Reviewed-by: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com> > Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com> Acked-by: Michal Hocko <mhocko@use.com> > --- > include/linux/hugetlb.h | 15 +++++++++++++-- > 1 file changed, 13 insertions(+), 2 deletions(-) > > diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h > index 70bcd89..4cc3871 100644 > --- a/include/linux/hugetlb.h > +++ b/include/linux/hugetlb.h > @@ -493,18 +493,29 @@ static inline pgoff_t basepage_index(struct page *page) > extern int dissolve_free_huge_page(struct page *page); > extern int dissolve_free_huge_pages(unsigned long start_pfn, > unsigned long end_pfn); > -static inline bool hugepage_migration_supported(struct hstate *h) > -{ > + > #ifdef CONFIG_ARCH_ENABLE_HUGEPAGE_MIGRATION > +#ifndef arch_hugetlb_migration_supported > +static inline bool arch_hugetlb_migration_supported(struct hstate *h) > +{ > if ((huge_page_shift(h) == PMD_SHIFT) || > (huge_page_shift(h) == PUD_SHIFT) || > (huge_page_shift(h) == PGDIR_SHIFT)) > return true; > else > return false; > +} > +#endif > #else > +static inline bool arch_hugetlb_migration_supported(struct hstate *h) > +{ > return false; > +} > #endif > + > +static inline bool hugepage_migration_supported(struct hstate *h) > +{ > + return arch_hugetlb_migration_supported(h); > } > > /* > -- > 2.7.4
On Wed 24-10-18 15:56:39, Michal Hocko wrote: > On Tue 23-10-18 18:31:59, Anshuman Khandual wrote: > > Architectures like arm64 have HugeTLB page sizes which are different than > > generic sizes at PMD, PUD, PGD level and implemented via contiguous bits. > > At present these special size HugeTLB pages cannot be identified through > > macros like (PMD|PUD|PGDIR)_SHIFT and hence chosen not be migrated. > > > > Enabling migration support for these special HugeTLB page sizes along with > > the generic ones (PMD|PUD|PGD) would require identifying all of them on a > > given platform. A platform specific hook can precisely enumerate all huge > > page sizes supported for migration. Instead of comparing against standard > > huge page orders let hugetlb_migration_support() function call a platform > > hook arch_hugetlb_migration_support(). Default definition for the platform > > hook maintains existing semantics which checks standard huge page order. > > But an architecture can choose to override the default and provide support > > for a comprehensive set of huge page sizes. > > > > Reviewed-by: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com> > > Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com> > > Acked-by: Michal Hocko <mhocko@use.com> fat fingers here, should be mhocko@suse.com of course.
On 10/24/2018 07:28 PM, Michal Hocko wrote: > On Wed 24-10-18 15:56:39, Michal Hocko wrote: >> On Tue 23-10-18 18:31:59, Anshuman Khandual wrote: >>> Architectures like arm64 have HugeTLB page sizes which are different than >>> generic sizes at PMD, PUD, PGD level and implemented via contiguous bits. >>> At present these special size HugeTLB pages cannot be identified through >>> macros like (PMD|PUD|PGDIR)_SHIFT and hence chosen not be migrated. >>> >>> Enabling migration support for these special HugeTLB page sizes along with >>> the generic ones (PMD|PUD|PGD) would require identifying all of them on a >>> given platform. A platform specific hook can precisely enumerate all huge >>> page sizes supported for migration. Instead of comparing against standard >>> huge page orders let hugetlb_migration_support() function call a platform >>> hook arch_hugetlb_migration_support(). Default definition for the platform >>> hook maintains existing semantics which checks standard huge page order. >>> But an architecture can choose to override the default and provide support >>> for a comprehensive set of huge page sizes. >>> >>> Reviewed-by: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com> >>> Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com> >> >> Acked-by: Michal Hocko <mhocko@use.com> > > fat fingers here, should be mhocko@suse.com of course. Sure no problems. As we had discussed earlier and agreed to keep the previous patch "mm/hugetlb: Enable PUD level huge page migration" separate and not fold into this one, I will assume your ACK on it as well unless your disagree.
On Thu 25-10-18 11:53:34, Anshuman Khandual wrote: > > > On 10/24/2018 07:28 PM, Michal Hocko wrote: > > On Wed 24-10-18 15:56:39, Michal Hocko wrote: > >> On Tue 23-10-18 18:31:59, Anshuman Khandual wrote: > >>> Architectures like arm64 have HugeTLB page sizes which are different than > >>> generic sizes at PMD, PUD, PGD level and implemented via contiguous bits. > >>> At present these special size HugeTLB pages cannot be identified through > >>> macros like (PMD|PUD|PGDIR)_SHIFT and hence chosen not be migrated. > >>> > >>> Enabling migration support for these special HugeTLB page sizes along with > >>> the generic ones (PMD|PUD|PGD) would require identifying all of them on a > >>> given platform. A platform specific hook can precisely enumerate all huge > >>> page sizes supported for migration. Instead of comparing against standard > >>> huge page orders let hugetlb_migration_support() function call a platform > >>> hook arch_hugetlb_migration_support(). Default definition for the platform > >>> hook maintains existing semantics which checks standard huge page order. > >>> But an architecture can choose to override the default and provide support > >>> for a comprehensive set of huge page sizes. > >>> > >>> Reviewed-by: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com> > >>> Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com> > >> > >> Acked-by: Michal Hocko <mhocko@use.com> > > > > fat fingers here, should be mhocko@suse.com of course. > > Sure no problems. As we had discussed earlier and agreed to keep the previous > patch "mm/hugetlb: Enable PUD level huge page migration" separate and not fold > into this one, I will assume your ACK on it as well unless your disagree. OK with me.
On Tue, Oct 23, 2018 at 06:31:59PM +0530, Anshuman Khandual wrote: > Architectures like arm64 have HugeTLB page sizes which are different than > generic sizes at PMD, PUD, PGD level and implemented via contiguous bits. > At present these special size HugeTLB pages cannot be identified through > macros like (PMD|PUD|PGDIR)_SHIFT and hence chosen not be migrated. > > Enabling migration support for these special HugeTLB page sizes along with > the generic ones (PMD|PUD|PGD) would require identifying all of them on a > given platform. A platform specific hook can precisely enumerate all huge > page sizes supported for migration. Instead of comparing against standard > huge page orders let hugetlb_migration_support() function call a platform > hook arch_hugetlb_migration_support(). Default definition for the platform > hook maintains existing semantics which checks standard huge page order. > But an architecture can choose to override the default and provide support > for a comprehensive set of huge page sizes. > > Reviewed-by: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com> > Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com> Reviewed-by: Steve Capper <steve.capper@arm.com> > --- > include/linux/hugetlb.h | 15 +++++++++++++-- > 1 file changed, 13 insertions(+), 2 deletions(-) > > diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h > index 70bcd89..4cc3871 100644 > --- a/include/linux/hugetlb.h > +++ b/include/linux/hugetlb.h > @@ -493,18 +493,29 @@ static inline pgoff_t basepage_index(struct page *page) > extern int dissolve_free_huge_page(struct page *page); > extern int dissolve_free_huge_pages(unsigned long start_pfn, > unsigned long end_pfn); > -static inline bool hugepage_migration_supported(struct hstate *h) > -{ > + > #ifdef CONFIG_ARCH_ENABLE_HUGEPAGE_MIGRATION > +#ifndef arch_hugetlb_migration_supported > +static inline bool arch_hugetlb_migration_supported(struct hstate *h) > +{ > if ((huge_page_shift(h) == PMD_SHIFT) || > (huge_page_shift(h) == PUD_SHIFT) || > (huge_page_shift(h) == PGDIR_SHIFT)) > return true; > else > return false; > +} > +#endif > #else > +static inline bool arch_hugetlb_migration_supported(struct hstate *h) > +{ > return false; > +} > #endif > + > +static inline bool hugepage_migration_supported(struct hstate *h) > +{ > + return arch_hugetlb_migration_supported(h); > } > > /* > -- > 2.7.4 >
diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h index 70bcd89..4cc3871 100644 --- a/include/linux/hugetlb.h +++ b/include/linux/hugetlb.h @@ -493,18 +493,29 @@ static inline pgoff_t basepage_index(struct page *page) extern int dissolve_free_huge_page(struct page *page); extern int dissolve_free_huge_pages(unsigned long start_pfn, unsigned long end_pfn); -static inline bool hugepage_migration_supported(struct hstate *h) -{ + #ifdef CONFIG_ARCH_ENABLE_HUGEPAGE_MIGRATION +#ifndef arch_hugetlb_migration_supported +static inline bool arch_hugetlb_migration_supported(struct hstate *h) +{ if ((huge_page_shift(h) == PMD_SHIFT) || (huge_page_shift(h) == PUD_SHIFT) || (huge_page_shift(h) == PGDIR_SHIFT)) return true; else return false; +} +#endif #else +static inline bool arch_hugetlb_migration_supported(struct hstate *h) +{ return false; +} #endif + +static inline bool hugepage_migration_supported(struct hstate *h) +{ + return arch_hugetlb_migration_supported(h); } /*