From: David Hildenbrand <david@redhat.com>
To: Mike Rapoport <rppt@kernel.org>,
Andrew Morton <akpm@linux-foundation.org>
Cc: Alexey Dobriyan <adobriyan@gmail.com>,
Catalin Marinas <catalin.marinas@arm.com>,
Geert Uytterhoeven <geert@linux-m68k.org>,
Greg Ungerer <gerg@linux-m68k.org>,
John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>,
Jonathan Corbet <corbet@lwn.net>,
Matt Turner <mattst88@gmail.com>, Meelis Roos <mroos@linux.ee>,
Michael Schmitz <schmitzmic@gmail.com>,
Mike Rapoport <rppt@linux.ibm.com>,
Russell King <linux@armlinux.org.uk>,
Tony Luck <tony.luck@intel.com>,
Vineet Gupta <vgupta@synopsys.com>, Will Deacon <will@kernel.org>,
linux-alpha@vger.kernel.org,
linux-arm-kernel@lists.infradead.org, linux-doc@vger.kernel.org,
linux-fsdevel@vger.kernel.org, linux-ia64@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-m68k@lists.linux-m68k.org,
linux-mm@kvack.org, linux-snps-arc@lists.infradead.org
Subject: Re: [PATCH v2 08/13] arm: remove CONFIG_ARCH_HAS_HOLES_MEMORYMODEL
Date: Mon, 2 Nov 2020 10:43:50 +0100 [thread overview]
Message-ID: <81410b81-b773-b4a2-5f03-e9f1a6a8e8e9@redhat.com> (raw)
In-Reply-To: <20201101170454.9567-9-rppt@kernel.org>
On 01.11.20 18:04, Mike Rapoport wrote:
> From: Mike Rapoport <rppt@linux.ibm.com>
>
> 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.
>
> Signed-off-by: Mike Rapoport <rppt@linux.ibm.com>
> ---
> 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(-)
>
> diff --git a/Documentation/vm/memory-model.rst b/Documentation/vm/memory-model.rst
> index 9daadf9faba1..ce398a7dc6cd 100644
> --- a/Documentation/vm/memory-model.rst
> +++ b/Documentation/vm/memory-model.rst
> @@ -51,8 +51,7 @@ call :c:func:`free_area_init` function. Yet, the mappings array is not
> 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.
> diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
> index fe2f17eb2b50..83adc46c1e67 100644
> --- 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
> @@ -519,7 +519,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
> @@ -1479,9 +1478,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
>
> @@ -1493,7 +1489,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"
> diff --git a/arch/arm/mach-bcm/Kconfig b/arch/arm/mach-bcm/Kconfig
> index ae790908fc74..9b594ae98153 100644
> --- 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
> diff --git a/arch/arm/mach-davinci/Kconfig b/arch/arm/mach-davinci/Kconfig
> index f56ff8c24043..de11030748d0 100644
> --- 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
> diff --git a/arch/arm/mach-exynos/Kconfig b/arch/arm/mach-exynos/Kconfig
> index d2d249706ebb..56d272967fc0 100644
> --- 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
> diff --git a/arch/arm/mach-highbank/Kconfig b/arch/arm/mach-highbank/Kconfig
> index 1bc68913d62c..9de38ce8124f 100644
> --- 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
> diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig
> index 3ee7bdff86b2..89fe1572c142 100644
> --- a/arch/arm/mach-omap2/Kconfig
> +++ b/arch/arm/mach-omap2/Kconfig
> @@ -94,7 +94,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
> diff --git a/arch/arm/mach-s5pv210/Kconfig b/arch/arm/mach-s5pv210/Kconfig
> index 95d4e8284866..d644b45bc29d 100644
> --- 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
> diff --git a/arch/arm/mach-tango/Kconfig b/arch/arm/mach-tango/Kconfig
> index 25b2fd434861..a9eeda36aeb1 100644
> --- 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
> diff --git a/fs/proc/kcore.c b/fs/proc/kcore.c
> index e502414b3556..4d2e64e9016c 100644
> --- a/fs/proc/kcore.c
> +++ b/fs/proc/kcore.c
> @@ -193,8 +193,6 @@ kclist_add_private(unsigned long pfn, unsigned long nr_pages, void *arg)
> 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)
> diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h
> index 876600a6e891..7385871768d4 100644
> --- a/include/linux/mmzone.h
> +++ b/include/linux/mmzone.h
> @@ -1440,37 +1440,6 @@ void sparse_init(void);
> #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 */
> diff --git a/mm/mmzone.c b/mm/mmzone.c
> index 4686fdc23bb9..f337831affc2 100644
> --- a/mm/mmzone.c
> +++ b/mm/mmzone.c
> @@ -72,20 +72,6 @@ struct zoneref *__next_zones_zonelist(struct zoneref *z,
> 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;
> diff --git a/mm/vmstat.c b/mm/vmstat.c
> index 698bc0bc18d1..e292e63afebf 100644
> --- a/mm/vmstat.c
> +++ b/mm/vmstat.c
> @@ -1503,10 +1503,6 @@ static void pagetypeinfo_showblockcount_print(struct seq_file *m,
> if (!page)
> continue;
>
> - /* Watch for unexpected holes punched in the memmap */
> - if (!memmap_valid_within(pfn, page, zone))
> - continue;
> -
Right, pfn_to_online_page() -> pfn_valid() / pfn_valid_within() should
handle that.
Acked-by: David Hildenbrand <david@redhat.com>
--
Thanks,
David / dhildenb
next prev parent reply other threads:[~2020-11-02 9:44 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-11-01 17:04 [PATCH v2 00/13] arch, mm: deprecate DISCONTIGMEM Mike Rapoport
2020-11-01 17:04 ` [PATCH v2 01/13] alpha: switch from DISCONTIGMEM to SPARSEMEM Mike Rapoport
2020-11-01 17:04 ` [PATCH v2 02/13] ia64: remove custom __early_pfn_to_nid() Mike Rapoport
2020-11-01 17:04 ` [PATCH v2 03/13] ia64: remove 'ifdef CONFIG_ZONE_DMA32' statements Mike Rapoport
2020-11-01 17:04 ` [PATCH v2 04/13] ia64: discontig: paging_init(): remove local max_pfn calculation Mike Rapoport
2020-11-01 17:04 ` [PATCH v2 05/13] ia64: split virtual map initialization out of paging_init() Mike Rapoport
2020-11-01 17:04 ` [PATCH v2 06/13] ia64: forbid using VIRTUAL_MEM_MAP with FLATMEM Mike Rapoport
2020-11-01 17:04 ` [PATCH v2 07/13] ia64: make SPARSEMEM default and disable DISCONTIGMEM Mike Rapoport
2020-11-01 17:04 ` [PATCH v2 08/13] arm: remove CONFIG_ARCH_HAS_HOLES_MEMORYMODEL Mike Rapoport
2020-11-02 9:43 ` David Hildenbrand [this message]
2020-11-01 17:04 ` [PATCH v2 09/13] arm, arm64: move free_unused_memmap() to generic mm Mike Rapoport
2020-11-14 12:15 ` Catalin Marinas
2020-11-01 17:04 ` [PATCH v2 10/13] arc: use FLATMEM with freeing of unused memory map instead of DISCONTIGMEM Mike Rapoport
2020-11-17 6:40 ` Vineet Gupta
2020-11-17 6:57 ` Mike Rapoport
2020-11-24 0:26 ` Vineet Gupta
2020-11-01 17:04 ` [PATCH v2 11/13] m68k/mm: make node data and node setup depend on CONFIG_DISCONTIGMEM Mike Rapoport
2020-11-01 17:04 ` [PATCH v2 12/13] m68k/mm: enable use of generic memory_model.h for !DISCONTIGMEM Mike Rapoport
2020-11-01 17:04 ` [PATCH v2 13/13] m68k: deprecate DISCONTIGMEM Mike Rapoport
2020-11-17 5:24 ` [PATCH v2 00/13] arch, mm: " John Paul Adrian Glaubitz
2020-11-17 6:23 ` Mike Rapoport
2020-11-17 8:07 ` John Paul Adrian Glaubitz
2020-11-17 8:14 ` Mike Rapoport
2020-12-01 9:10 ` John Paul Adrian Glaubitz
2020-12-01 10:29 ` Mike Rapoport
2020-12-01 11:35 ` John Paul Adrian Glaubitz
2020-12-01 12:10 ` Mike Rapoport
2020-12-01 12:16 ` John Paul Adrian Glaubitz
2020-12-01 13:56 ` Mike Rapoport
2020-12-01 15:03 ` Jens Axboe
2020-12-01 15:33 ` Geert Uytterhoeven
2020-12-02 8:43 ` Christoph Hellwig
2020-12-02 8:45 ` John Paul Adrian Glaubitz
2020-12-02 8:46 ` Christoph Hellwig
2020-12-02 8:46 ` Mike Rapoport
2020-12-02 8:47 ` Christoph Hellwig
2020-12-01 15:07 ` John Paul Adrian Glaubitz
2020-12-01 19:55 ` John Paul Adrian Glaubitz
2020-12-02 7:14 ` Mike Rapoport
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=81410b81-b773-b4a2-5f03-e9f1a6a8e8e9@redhat.com \
--to=david@redhat.com \
--cc=adobriyan@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=catalin.marinas@arm.com \
--cc=corbet@lwn.net \
--cc=geert@linux-m68k.org \
--cc=gerg@linux-m68k.org \
--cc=glaubitz@physik.fu-berlin.de \
--cc=linux-alpha@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-ia64@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-m68k@lists.linux-m68k.org \
--cc=linux-mm@kvack.org \
--cc=linux-snps-arc@lists.infradead.org \
--cc=linux@armlinux.org.uk \
--cc=mattst88@gmail.com \
--cc=mroos@linux.ee \
--cc=rppt@kernel.org \
--cc=rppt@linux.ibm.com \
--cc=schmitzmic@gmail.com \
--cc=tony.luck@intel.com \
--cc=vgupta@synopsys.com \
--cc=will@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).