From 7ee8b58cc107ebcdef16beaccf92c0a37892ef80 Mon Sep 17 00:00:00 2001 From: Suren Baghdasaryan Date: Tue, 22 Sep 2020 10:06:43 -0700 Subject: [PATCH] ANDROID: GKI: add fields required to enable CONFIG_TRANSPARENT_HUGEPAGE Devices with plenty of RAM might benefit from THP usage. Added fields would allow to enable CONFIG_TRANSPARENT_HUGEPAGE without affecting ABI. Bug: 168269341 Signed-off-by: Suren Baghdasaryan Signed-off-by: Greg Kroah-Hartman Change-Id: Ieb644a8da5377383d514197ee02d7bfd6f1d346d --- arch/arm64/configs/gki_defconfig | 1 + arch/x86/configs/gki_defconfig | 1 + include/linux/huge_mm.h | 1 + include/linux/memcontrol.h | 2 +- include/linux/mm.h | 2 +- include/linux/mm_types.h | 3 ++- include/linux/mmzone.h | 4 ++-- include/linux/vm_event_item.h | 2 +- init/Kconfig.gki | 8 ++++++++ mm/page_alloc.c | 2 +- mm/vmstat.c | 2 +- 11 files changed, 20 insertions(+), 8 deletions(-) diff --git a/arch/arm64/configs/gki_defconfig b/arch/arm64/configs/gki_defconfig index 9f2bdcdae163..3c3ad78c51db 100644 --- a/arch/arm64/configs/gki_defconfig +++ b/arch/arm64/configs/gki_defconfig @@ -94,6 +94,7 @@ CONFIG_MODVERSIONS=y CONFIG_BLK_INLINE_ENCRYPTION=y CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK=y CONFIG_GKI_HACKS_TO_FIX=y +CONFIG_GKI_OPT_FEATURES=y # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set CONFIG_BINFMT_MISC=y CONFIG_MEMORY_HOTPLUG=y diff --git a/arch/x86/configs/gki_defconfig b/arch/x86/configs/gki_defconfig index 96140818bf38..5f6b1e4dd7f3 100644 --- a/arch/x86/configs/gki_defconfig +++ b/arch/x86/configs/gki_defconfig @@ -70,6 +70,7 @@ CONFIG_MODVERSIONS=y CONFIG_BLK_INLINE_ENCRYPTION=y CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK=y CONFIG_GKI_HACKS_TO_FIX=y +CONFIG_GKI_OPT_FEATURES=y # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set CONFIG_BINFMT_MISC=y CONFIG_CLEANCACHE=y diff --git a/include/linux/huge_mm.h b/include/linux/huge_mm.h index 93d5cf0bc716..1c9d7ed1f75d 100644 --- a/include/linux/huge_mm.h +++ b/include/linux/huge_mm.h @@ -309,6 +309,7 @@ static inline bool transhuge_vma_suitable(struct vm_area_struct *vma, } static inline void prep_transhuge_page(struct page *page) {} +static inline void free_transhuge_page(struct page *page) {} #define transparent_hugepage_flags 0UL diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index fb5b2a41bd45..bb7dd481f26b 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -330,7 +330,7 @@ struct mem_cgroup { struct list_head event_list; spinlock_t event_list_lock; -#ifdef CONFIG_TRANSPARENT_HUGEPAGE +#if defined(CONFIG_TRANSPARENT_HUGEPAGE) || defined(CONFIG_GKI_OPT_FEATURES) struct deferred_split deferred_split_queue; #endif diff --git a/include/linux/mm.h b/include/linux/mm.h index e032e34213aa..39bb339d4c6d 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -799,7 +799,7 @@ enum compound_dtor_id { #ifdef CONFIG_HUGETLB_PAGE HUGETLB_PAGE_DTOR, #endif -#ifdef CONFIG_TRANSPARENT_HUGEPAGE +#if defined(CONFIG_TRANSPARENT_HUGEPAGE) || defined(CONFIG_GKI_OPT_FEATURES) TRANSHUGE_PAGE_DTOR, #endif NR_COMPOUND_DTORS, diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h index 3cb63ac546be..0e4e1407d9a3 100644 --- a/include/linux/mm_types.h +++ b/include/linux/mm_types.h @@ -507,7 +507,8 @@ struct mm_struct { #ifdef CONFIG_MMU_NOTIFIER struct mmu_notifier_mm *mmu_notifier_mm; #endif -#if defined(CONFIG_TRANSPARENT_HUGEPAGE) && !USE_SPLIT_PMD_PTLOCKS +#if (defined(CONFIG_TRANSPARENT_HUGEPAGE) || defined(CONFIG_GKI_OPT_FEATURES)) && \ + !USE_SPLIT_PMD_PTLOCKS pgtable_t pmd_huge_pte; /* protected by page_table_lock */ #endif #ifdef CONFIG_NUMA_BALANCING diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index b523ffe1161f..07e884fe9842 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h @@ -693,7 +693,7 @@ struct zonelist { extern struct page *mem_map; #endif -#ifdef CONFIG_TRANSPARENT_HUGEPAGE +#if defined(CONFIG_TRANSPARENT_HUGEPAGE) || defined(CONFIG_GKI_OPT_FEATURES) struct deferred_split { spinlock_t split_queue_lock; struct list_head split_queue; @@ -781,7 +781,7 @@ typedef struct pglist_data { unsigned long first_deferred_pfn; #endif /* CONFIG_DEFERRED_STRUCT_PAGE_INIT */ -#ifdef CONFIG_TRANSPARENT_HUGEPAGE +#if defined(CONFIG_TRANSPARENT_HUGEPAGE) || defined(CONFIG_GKI_OPT_FEATURES) struct deferred_split deferred_split_queue; #endif diff --git a/include/linux/vm_event_item.h b/include/linux/vm_event_item.h index 47a3441cf4c4..9d20f7567bdf 100644 --- a/include/linux/vm_event_item.h +++ b/include/linux/vm_event_item.h @@ -70,7 +70,7 @@ enum vm_event_item { PGPGIN, PGPGOUT, PSWPIN, PSWPOUT, UNEVICTABLE_PGMUNLOCKED, UNEVICTABLE_PGCLEARED, /* on COW, page truncate */ UNEVICTABLE_PGSTRANDED, /* unable to isolate on unlock */ -#ifdef CONFIG_TRANSPARENT_HUGEPAGE +#if defined(CONFIG_TRANSPARENT_HUGEPAGE) || defined(CONFIG_GKI_OPT_FEATURES) THP_FAULT_ALLOC, THP_FAULT_FALLBACK, THP_COLLAPSE_ALLOC, diff --git a/init/Kconfig.gki b/init/Kconfig.gki index 53bfd9fcc311..48c0cc4aa970 100644 --- a/init/Kconfig.gki +++ b/init/Kconfig.gki @@ -208,3 +208,11 @@ config GKI_HACKS_TO_FIX Unless you are building a GKI kernel to be used with modules built from a different config, say N here. + +config GKI_OPT_FEATURES + bool "Optional GKI features" + help + Config option that should be enabled in GKI kernels to allow optional + GKI features be enabled or disabled without ABI breakage. + + If you are not building a GKI kernel, say N here. diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 8944cf01d6a6..94451809380b 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -308,7 +308,7 @@ compound_page_dtor * const compound_page_dtors[] = { #ifdef CONFIG_HUGETLB_PAGE free_huge_page, #endif -#ifdef CONFIG_TRANSPARENT_HUGEPAGE +#if defined(CONFIG_TRANSPARENT_HUGEPAGE) || defined(CONFIG_GKI_OPT_FEATURES) free_transhuge_page, #endif }; diff --git a/mm/vmstat.c b/mm/vmstat.c index 96d39fbb9a1f..a20d38e35805 100644 --- a/mm/vmstat.c +++ b/mm/vmstat.c @@ -1253,7 +1253,7 @@ const char * const vmstat_text[] = { "unevictable_pgs_cleared", "unevictable_pgs_stranded", -#ifdef CONFIG_TRANSPARENT_HUGEPAGE +#if defined(CONFIG_TRANSPARENT_HUGEPAGE) || defined(CONFIG_GKI_OPT_FEATURES) "thp_fault_alloc", "thp_fault_fallback", "thp_collapse_alloc",