From: Greg Kroah-Hartman Date: Thu, 12 May 2022 14:01:50 +0000 (+0200) Subject: 5.10-stable patches X-Git-Tag: v4.9.314~22 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0aee379b3ae2f6e510f0c01e1f373d342af91b01;p=thirdparty%2Fkernel%2Fstable-queue.git 5.10-stable patches added patches: arm-remove-config_arch_has_holes_memorymodel.patch --- diff --git a/queue-5.10/arm-remove-config_arch_has_holes_memorymodel.patch b/queue-5.10/arm-remove-config_arch_has_holes_memorymodel.patch new file mode 100644 index 00000000000..295a82a1bda --- /dev/null +++ b/queue-5.10/arm-remove-config_arch_has_holes_memorymodel.patch @@ -0,0 +1,269 @@ +From 5e545df3292fbd3d5963c68980f1527ead2a2b3f Mon Sep 17 00:00:00 2001 +From: Mike Rapoport +Date: Mon, 14 Dec 2020 19:09:55 -0800 +Subject: arm: remove CONFIG_ARCH_HAS_HOLES_MEMORYMODEL + +From: Mike Rapoport + +commit 5e545df3292fbd3d5963c68980f1527ead2a2b3f upstream. + +ARM is the only architecture that defines CONFIG_ARCH_HAS_HOLES_MEMORYMODEL +which in turn enables memmap_valid_within() function that is intended to +verify existence of struct page associated with a pfn when there are holes +in the memory map. + +However, the ARCH_HAS_HOLES_MEMORYMODEL also enables HAVE_ARCH_PFN_VALID +and arch-specific pfn_valid() implementation that also deals with the holes +in the memory map. + +The only two users of memmap_valid_within() call this function after +a call to pfn_valid() so the memmap_valid_within() check becomes redundant. + +Remove CONFIG_ARCH_HAS_HOLES_MEMORYMODEL and memmap_valid_within() and rely +entirely on ARM's implementation of pfn_valid() that is now enabled +unconditionally. + +Link: https://lkml.kernel.org/r/20201101170454.9567-9-rppt@kernel.org +Signed-off-by: Mike Rapoport +Cc: Alexey Dobriyan +Cc: Catalin Marinas +Cc: Geert Uytterhoeven +Cc: Greg Ungerer +Cc: John Paul Adrian Glaubitz +Cc: Jonathan Corbet +Cc: Matt Turner +Cc: Meelis Roos +Cc: Michael Schmitz +Cc: Russell King +Cc: Tony Luck +Cc: Vineet Gupta +Cc: Will Deacon +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +Reported-by: kernel test robot +Fixes: 8dd559d53b3b ("arm: ioremap: don't abuse pfn_valid() to check if pfn is in RAM") +Signed-off-by: Mike Rapoport +Signed-off-by: Greg Kroah-Hartman +--- + Documentation/vm/memory-model.rst | 3 +-- + arch/arm/Kconfig | 8 ++------ + arch/arm/mach-bcm/Kconfig | 1 - + arch/arm/mach-davinci/Kconfig | 1 - + arch/arm/mach-exynos/Kconfig | 1 - + arch/arm/mach-highbank/Kconfig | 1 - + arch/arm/mach-omap2/Kconfig | 1 - + arch/arm/mach-s5pv210/Kconfig | 1 - + arch/arm/mach-tango/Kconfig | 1 - + fs/proc/kcore.c | 2 -- + include/linux/mmzone.h | 31 ------------------------------- + mm/mmzone.c | 14 -------------- + mm/vmstat.c | 4 ---- + 13 files changed, 3 insertions(+), 66 deletions(-) + +--- a/Documentation/vm/memory-model.rst ++++ b/Documentation/vm/memory-model.rst +@@ -51,8 +51,7 @@ call :c:func:`free_area_init` function. + usable until the call to :c:func:`memblock_free_all` that hands all the + memory to the page allocator. + +-If an architecture enables `CONFIG_ARCH_HAS_HOLES_MEMORYMODEL` option, +-it may free parts of the `mem_map` array that do not cover the ++An architecture may free parts of the `mem_map` array that do not cover the + actual physical pages. In such case, the architecture specific + :c:func:`pfn_valid` implementation should take the holes in the + `mem_map` into account. +--- a/arch/arm/Kconfig ++++ b/arch/arm/Kconfig +@@ -25,7 +25,7 @@ config ARM + select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST + select ARCH_HAVE_CUSTOM_GPIO_H + select ARCH_HAS_GCOV_PROFILE_ALL +- select ARCH_KEEP_MEMBLOCK if HAVE_ARCH_PFN_VALID || KEXEC ++ select ARCH_KEEP_MEMBLOCK + select ARCH_MIGHT_HAVE_PC_PARPORT + select ARCH_NO_SG_CHAIN if !ARM_HAS_SG_CHAIN + select ARCH_OPTIONAL_KERNEL_RWX if ARCH_HAS_STRICT_KERNEL_RWX +@@ -521,7 +521,6 @@ config ARCH_S3C24XX + config ARCH_OMAP1 + bool "TI OMAP1" + depends on MMU +- select ARCH_HAS_HOLES_MEMORYMODEL + select ARCH_OMAP + select CLKDEV_LOOKUP + select CLKSRC_MMIO +@@ -1481,9 +1480,6 @@ config OABI_COMPAT + UNPREDICTABLE (in fact it can be predicted that it won't work + at all). If in doubt say N. + +-config ARCH_HAS_HOLES_MEMORYMODEL +- bool +- + config ARCH_SELECT_MEMORY_MODEL + bool + +@@ -1495,7 +1491,7 @@ config ARCH_SPARSEMEM_ENABLE + select SPARSEMEM_STATIC if SPARSEMEM + + config HAVE_ARCH_PFN_VALID +- def_bool ARCH_HAS_HOLES_MEMORYMODEL || !SPARSEMEM ++ def_bool y + + config HIGHMEM + bool "High Memory Support" +--- a/arch/arm/mach-bcm/Kconfig ++++ b/arch/arm/mach-bcm/Kconfig +@@ -211,7 +211,6 @@ config ARCH_BRCMSTB + select BCM7038_L1_IRQ + select BRCMSTB_L2_IRQ + select BCM7120_L2_IRQ +- select ARCH_HAS_HOLES_MEMORYMODEL + select ZONE_DMA if ARM_LPAE + select SOC_BRCMSTB + select SOC_BUS +--- a/arch/arm/mach-davinci/Kconfig ++++ b/arch/arm/mach-davinci/Kconfig +@@ -5,7 +5,6 @@ menuconfig ARCH_DAVINCI + depends on ARCH_MULTI_V5 + select DAVINCI_TIMER + select ZONE_DMA +- select ARCH_HAS_HOLES_MEMORYMODEL + select PM_GENERIC_DOMAINS if PM + select PM_GENERIC_DOMAINS_OF if PM && OF + select REGMAP_MMIO +--- a/arch/arm/mach-exynos/Kconfig ++++ b/arch/arm/mach-exynos/Kconfig +@@ -8,7 +8,6 @@ + menuconfig ARCH_EXYNOS + bool "Samsung Exynos" + depends on ARCH_MULTI_V7 +- select ARCH_HAS_HOLES_MEMORYMODEL + select ARCH_SUPPORTS_BIG_ENDIAN + select ARM_AMBA + select ARM_GIC +--- a/arch/arm/mach-highbank/Kconfig ++++ b/arch/arm/mach-highbank/Kconfig +@@ -2,7 +2,6 @@ + config ARCH_HIGHBANK + bool "Calxeda ECX-1000/2000 (Highbank/Midway)" + depends on ARCH_MULTI_V7 +- select ARCH_HAS_HOLES_MEMORYMODEL + select ARCH_SUPPORTS_BIG_ENDIAN + select ARM_AMBA + select ARM_ERRATA_764369 if SMP +--- a/arch/arm/mach-omap2/Kconfig ++++ b/arch/arm/mach-omap2/Kconfig +@@ -93,7 +93,6 @@ config SOC_DRA7XX + config ARCH_OMAP2PLUS + bool + select ARCH_HAS_BANDGAP +- select ARCH_HAS_HOLES_MEMORYMODEL + select ARCH_HAS_RESET_CONTROLLER + select ARCH_OMAP + select CLKSRC_MMIO +--- a/arch/arm/mach-s5pv210/Kconfig ++++ b/arch/arm/mach-s5pv210/Kconfig +@@ -8,7 +8,6 @@ + config ARCH_S5PV210 + bool "Samsung S5PV210/S5PC110" + depends on ARCH_MULTI_V7 +- select ARCH_HAS_HOLES_MEMORYMODEL + select ARM_VIC + select CLKSRC_SAMSUNG_PWM + select COMMON_CLK_SAMSUNG +--- a/arch/arm/mach-tango/Kconfig ++++ b/arch/arm/mach-tango/Kconfig +@@ -3,7 +3,6 @@ config ARCH_TANGO + bool "Sigma Designs Tango4 (SMP87xx)" + depends on ARCH_MULTI_V7 + # Cortex-A9 MPCore r3p0, PL310 r3p2 +- select ARCH_HAS_HOLES_MEMORYMODEL + select ARM_ERRATA_754322 + select ARM_ERRATA_764369 if SMP + select ARM_ERRATA_775420 +--- a/fs/proc/kcore.c ++++ b/fs/proc/kcore.c +@@ -193,8 +193,6 @@ kclist_add_private(unsigned long pfn, un + return 1; + + p = pfn_to_page(pfn); +- if (!memmap_valid_within(pfn, p, page_zone(p))) +- return 1; + + ent = kmalloc(sizeof(*ent), GFP_KERNEL); + if (!ent) +--- a/include/linux/mmzone.h ++++ b/include/linux/mmzone.h +@@ -1443,37 +1443,6 @@ struct mminit_pfnnid_cache { + #define pfn_valid_within(pfn) (1) + #endif + +-#ifdef CONFIG_ARCH_HAS_HOLES_MEMORYMODEL +-/* +- * pfn_valid() is meant to be able to tell if a given PFN has valid memmap +- * associated with it or not. This means that a struct page exists for this +- * pfn. The caller cannot assume the page is fully initialized in general. +- * Hotplugable pages might not have been onlined yet. pfn_to_online_page() +- * will ensure the struct page is fully online and initialized. Special pages +- * (e.g. ZONE_DEVICE) are never onlined and should be treated accordingly. +- * +- * In FLATMEM, it is expected that holes always have valid memmap as long as +- * there is valid PFNs either side of the hole. In SPARSEMEM, it is assumed +- * that a valid section has a memmap for the entire section. +- * +- * However, an ARM, and maybe other embedded architectures in the future +- * free memmap backing holes to save memory on the assumption the memmap is +- * never used. The page_zone linkages are then broken even though pfn_valid() +- * returns true. A walker of the full memmap must then do this additional +- * check to ensure the memmap they are looking at is sane by making sure +- * the zone and PFN linkages are still valid. This is expensive, but walkers +- * of the full memmap are extremely rare. +- */ +-bool memmap_valid_within(unsigned long pfn, +- struct page *page, struct zone *zone); +-#else +-static inline bool memmap_valid_within(unsigned long pfn, +- struct page *page, struct zone *zone) +-{ +- return true; +-} +-#endif /* CONFIG_ARCH_HAS_HOLES_MEMORYMODEL */ +- + #endif /* !__GENERATING_BOUNDS.H */ + #endif /* !__ASSEMBLY__ */ + #endif /* _LINUX_MMZONE_H */ +--- a/mm/mmzone.c ++++ b/mm/mmzone.c +@@ -72,20 +72,6 @@ struct zoneref *__next_zones_zonelist(st + return z; + } + +-#ifdef CONFIG_ARCH_HAS_HOLES_MEMORYMODEL +-bool memmap_valid_within(unsigned long pfn, +- struct page *page, struct zone *zone) +-{ +- if (page_to_pfn(page) != pfn) +- return false; +- +- if (page_zone(page) != zone) +- return false; +- +- return true; +-} +-#endif /* CONFIG_ARCH_HAS_HOLES_MEMORYMODEL */ +- + void lruvec_init(struct lruvec *lruvec) + { + enum lru_list lru; +--- a/mm/vmstat.c ++++ b/mm/vmstat.c +@@ -1503,10 +1503,6 @@ static void pagetypeinfo_showblockcount_ + if (!page) + continue; + +- /* Watch for unexpected holes punched in the memmap */ +- if (!memmap_valid_within(pfn, page, zone)) +- continue; +- + if (page_zone(page) != zone) + continue; + diff --git a/queue-5.10/series b/queue-5.10/series index a22e23975e5..8a96b6deda5 100644 --- a/queue-5.10/series +++ b/queue-5.10/series @@ -3,3 +3,4 @@ regulator-consumer-add-missing-stubs-to-regulator-consumer.h.patch block-drbd-drbd_nl-make-conversion-to-enum-drbd_ret_code-explicit.patch drm-amd-display-dc-gpio-gpio_service-pass-around-correct-dce_-version-environment-types.patch nfp-bpf-silence-bitwise-vs.-logical-or-warning.patch +arm-remove-config_arch_has_holes_memorymodel.patch