2018-07-12 02:05:12

by Mike Kravetz

[permalink] [raw]
Subject: [PATCH] mm/hugetlb: remove gigantic page support for HIGHMEM

This reverts commit ee8f248d266e ("hugetlb: add phys addr to struct
huge_bootmem_page")

At one time powerpc used this field and supporting code. However that
was removed with commit 79cc38ded1e1 ("powerpc/mm/hugetlb: Add support
for reserving gigantic huge pages via kernel command line").

There are no users of this field and supporting code, so remove it.

Signed-off-by: Mike Kravetz <[email protected]>
---
include/linux/hugetlb.h | 3 ---
mm/hugetlb.c | 9 +--------
2 files changed, 1 insertion(+), 11 deletions(-)

diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h
index 36fa6a2a82e3..c39d9170a8a0 100644
--- a/include/linux/hugetlb.h
+++ b/include/linux/hugetlb.h
@@ -348,9 +348,6 @@ struct hstate {
struct huge_bootmem_page {
struct list_head list;
struct hstate *hstate;
-#ifdef CONFIG_HIGHMEM
- phys_addr_t phys;
-#endif
};

struct page *alloc_huge_page(struct vm_area_struct *vma,
diff --git a/mm/hugetlb.c b/mm/hugetlb.c
index 430be42b6ca1..e39593df050b 100644
--- a/mm/hugetlb.c
+++ b/mm/hugetlb.c
@@ -2139,16 +2139,9 @@ static void __init gather_bootmem_prealloc(void)
struct huge_bootmem_page *m;

list_for_each_entry(m, &huge_boot_pages, list) {
+ struct page *page = virt_to_page(m);
struct hstate *h = m->hstate;
- struct page *page;

-#ifdef CONFIG_HIGHMEM
- page = pfn_to_page(m->phys >> PAGE_SHIFT);
- memblock_free_late(__pa(m),
- sizeof(struct huge_bootmem_page));
-#else
- page = virt_to_page(m);
-#endif
WARN_ON(page_count(page) != 1);
prep_compound_huge_page(page, h->order);
WARN_ON(PageReserved(page));
--
2.17.1



2018-07-12 02:54:44

by Davidlohr Bueso

[permalink] [raw]
Subject: Re: [PATCH] mm/hugetlb: remove gigantic page support for HIGHMEM

On Wed, 11 Jul 2018, Mike Kravetz wrote:

>This reverts commit ee8f248d266e ("hugetlb: add phys addr to struct
>huge_bootmem_page")
>
>At one time powerpc used this field and supporting code. However that
>was removed with commit 79cc38ded1e1 ("powerpc/mm/hugetlb: Add support
>for reserving gigantic huge pages via kernel command line").
>
>There are no users of this field and supporting code, so remove it.

Considering the title, don't you wanna also get rid of try_to_free_low()
and something like the following, which I'm sure can be done fancier, and
perhaps also thp?

diff --git a/fs/Kconfig b/fs/Kconfig
index ac474a61be37..849da70e35d6 100644
--- a/fs/Kconfig
+++ b/fs/Kconfig
@@ -192,8 +192,8 @@ config TMPFS_XATTR

config HUGETLBFS
bool "HugeTLB file system support"
- depends on X86 || IA64 || SPARC64 || (S390 && 64BIT) || \
- SYS_SUPPORTS_HUGETLBFS || BROKEN
+ depends on !HIGHMEM && (X86 || IA64 || SPARC64 || (S390 && 64BIT) || \
+ SYS_SUPPORTS_HUGETLBFS || BROKEN)
help
hugetlbfs is a filesystem backing for HugeTLB pages, based on
ramfs. For architectures that support it, say Y here and read

Thanks,
Davidlohr

2018-07-12 02:59:52

by Mike Kravetz

[permalink] [raw]
Subject: Re: [PATCH] mm/hugetlb: remove gigantic page support for HIGHMEM

On 07/11/2018 01:57 PM, Davidlohr Bueso wrote:
> On Wed, 11 Jul 2018, Mike Kravetz wrote:
>
>> This reverts commit ee8f248d266e ("hugetlb: add phys addr to struct
>> huge_bootmem_page")
>>
>> At one time powerpc used this field and supporting code. However that
>> was removed with commit 79cc38ded1e1 ("powerpc/mm/hugetlb: Add support
>> for reserving gigantic huge pages via kernel command line").
>>
>> There are no users of this field and supporting code, so remove it.
>
> Considering the title, don't you wanna also get rid of try_to_free_low()
> and something like the following, which I'm sure can be done fancier, and
> perhaps also thp?

Not really. The intention is to only remove gigantic huge page support for
HIGHMEN systems. Non-gigantic huge pages on HIGHMEN systems should still
work/be supported. So, we do not want to make the config change or get
rid of try_to_free_low().

Actually, I simply wanted to revert the specific patch which enabled gigantic
huge pages on HIGHMEM systems. I did see that check in try_to_free_low(),

if (hstate_is_gigantic(h))
return;

and considered for a minute turning that into a VM_BUG or WARN, but decided
to leave it as is.

Do you think the title should be changed to simply 'revert commit
ee8f248d266e'?

--
Mike Kravetz

> diff --git a/fs/Kconfig b/fs/Kconfig
> index ac474a61be37..849da70e35d6 100644
> --- a/fs/Kconfig
> +++ b/fs/Kconfig
> @@ -192,8 +192,8 @@ config TMPFS_XATTR
>
> config HUGETLBFS
> bool "HugeTLB file system support"
> - depends on X86 || IA64 || SPARC64 || (S390 && 64BIT) || \
> - SYS_SUPPORTS_HUGETLBFS || BROKEN
> + depends on !HIGHMEM && (X86 || IA64 || SPARC64 || (S390 && 64BIT) || \
> + SYS_SUPPORTS_HUGETLBFS || BROKEN)
> help
> hugetlbfs is a filesystem backing for HugeTLB pages, based on
> ramfs. For architectures that support it, say Y here and read
>
> Thanks,
> Davidlohr

2018-07-12 07:48:10

by Michal Hocko

[permalink] [raw]
Subject: Re: [PATCH] mm/hugetlb: remove gigantic page support for HIGHMEM

On Wed 11-07-18 12:59:13, Mike Kravetz wrote:
> This reverts commit ee8f248d266e ("hugetlb: add phys addr to struct
> huge_bootmem_page")
>
> At one time powerpc used this field and supporting code. However that
> was removed with commit 79cc38ded1e1 ("powerpc/mm/hugetlb: Add support
> for reserving gigantic huge pages via kernel command line").
>
> There are no users of this field and supporting code, so remove it.
>
> Signed-off-by: Mike Kravetz <[email protected]>

Acked-by: Michal Hocko <[email protected]>

> ---
> include/linux/hugetlb.h | 3 ---
> mm/hugetlb.c | 9 +--------
> 2 files changed, 1 insertion(+), 11 deletions(-)
>
> diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h
> index 36fa6a2a82e3..c39d9170a8a0 100644
> --- a/include/linux/hugetlb.h
> +++ b/include/linux/hugetlb.h
> @@ -348,9 +348,6 @@ struct hstate {
> struct huge_bootmem_page {
> struct list_head list;
> struct hstate *hstate;
> -#ifdef CONFIG_HIGHMEM
> - phys_addr_t phys;
> -#endif
> };
>
> struct page *alloc_huge_page(struct vm_area_struct *vma,
> diff --git a/mm/hugetlb.c b/mm/hugetlb.c
> index 430be42b6ca1..e39593df050b 100644
> --- a/mm/hugetlb.c
> +++ b/mm/hugetlb.c
> @@ -2139,16 +2139,9 @@ static void __init gather_bootmem_prealloc(void)
> struct huge_bootmem_page *m;
>
> list_for_each_entry(m, &huge_boot_pages, list) {
> + struct page *page = virt_to_page(m);
> struct hstate *h = m->hstate;
> - struct page *page;
>
> -#ifdef CONFIG_HIGHMEM
> - page = pfn_to_page(m->phys >> PAGE_SHIFT);
> - memblock_free_late(__pa(m),
> - sizeof(struct huge_bootmem_page));
> -#else
> - page = virt_to_page(m);
> -#endif
> WARN_ON(page_count(page) != 1);
> prep_compound_huge_page(page, h->order);
> WARN_ON(PageReserved(page));
> --
> 2.17.1

--
Michal Hocko
SUSE Labs