]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
5.10-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 12 May 2022 14:01:50 +0000 (16:01 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 12 May 2022 14:01:50 +0000 (16:01 +0200)
added patches:
arm-remove-config_arch_has_holes_memorymodel.patch

queue-5.10/arm-remove-config_arch_has_holes_memorymodel.patch [new file with mode: 0644]
queue-5.10/series

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 (file)
index 0000000..295a82a
--- /dev/null
@@ -0,0 +1,269 @@
+From 5e545df3292fbd3d5963c68980f1527ead2a2b3f Mon Sep 17 00:00:00 2001
+From: Mike Rapoport <rppt@linux.ibm.com>
+Date: Mon, 14 Dec 2020 19:09:55 -0800
+Subject: arm: remove CONFIG_ARCH_HAS_HOLES_MEMORYMODEL
+
+From: Mike Rapoport <rppt@linux.ibm.com>
+
+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 <rppt@linux.ibm.com>
+Cc: Alexey Dobriyan <adobriyan@gmail.com>
+Cc: Catalin Marinas <catalin.marinas@arm.com>
+Cc: Geert Uytterhoeven <geert@linux-m68k.org>
+Cc: Greg Ungerer <gerg@linux-m68k.org>
+Cc: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
+Cc: Jonathan Corbet <corbet@lwn.net>
+Cc: Matt Turner <mattst88@gmail.com>
+Cc: Meelis Roos <mroos@linux.ee>
+Cc: Michael Schmitz <schmitzmic@gmail.com>
+Cc: Russell King <linux@armlinux.org.uk>
+Cc: Tony Luck <tony.luck@intel.com>
+Cc: Vineet Gupta <vgupta@synopsys.com>
+Cc: Will Deacon <will@kernel.org>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Reported-by: kernel test robot <lkp@intel.com>
+Fixes: 8dd559d53b3b ("arm: ioremap: don't abuse pfn_valid() to check if pfn is in RAM")
+Signed-off-by: Mike Rapoport <rppt@linux.ibm.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ 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;
index a22e23975e5bf3bfa9568653e03f64a5190087c3..8a96b6deda57b059a3494b597f16f4e73cd43bb6 100644 (file)
@@ -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