diff --git a/arch/arm64/configs/vendor/lahaina_QGKI.config b/arch/arm64/configs/vendor/lahaina_QGKI.config index dea1cf7c23d1..12c42cefeb5a 100644 --- a/arch/arm64/configs/vendor/lahaina_QGKI.config +++ b/arch/arm64/configs/vendor/lahaina_QGKI.config @@ -38,6 +38,8 @@ CONFIG_QCOM_MEM_OFFLINE=y CONFIG_OVERRIDE_MEMORY_LIMIT=y CONFIG_VM_EVENT_COUNT_CLEAN_PAGE_RECLAIM=y CONFIG_BALANCE_ANON_FILE_RECLAIM=y +CONFIG_CMA_DIRECT_UTILIZATION=y +CONFIG_CMA_PCP_LISTS=y # CONFIG_ZONE_DEVICE is not set # CONFIG_BUG_ON_HW_MEM_ONLINE_FAIL is not set CONFIG_MSM_BT_POWER=m diff --git a/include/linux/gfp.h b/include/linux/gfp.h index 0a5e1e7983ed..8abea3e45d0b 100644 --- a/include/linux/gfp.h +++ b/include/linux/gfp.h @@ -455,7 +455,14 @@ static inline bool gfpflags_normal_context(const gfp_t gfp_flags) static inline enum zone_type gfp_zone(gfp_t flags) { enum zone_type z; - int bit = (__force int) (flags & GFP_ZONEMASK); + int bit; + + if (!IS_ENABLED(CONFIG_HIGHMEM)) { + if ((flags & __GFP_MOVABLE) && !(flags & __GFP_CMA)) + flags &= ~__GFP_HIGHMEM; + } + + bit = (__force int) (flags & GFP_ZONEMASK); z = (GFP_ZONE_TABLE >> (bit * GFP_ZONES_SHIFT)) & ((1 << GFP_ZONES_SHIFT) - 1);