Re: [PATCH 1/2] mm: Move definition of 'zone_names' array into mmzone.h
From: Anshuman Khandual <hidden>
Date: 2016-09-02 04:29:22
Also in:
lkml
On 09/01/2016 02:40 AM, Andrew Morton wrote:
On Wed, 31 Aug 2016 08:55:49 +0530 Anshuman Khandual [off-list ref] wrote:quoted
zone_names[] is used to identify any zone given it's index which can be used in many other places. So moving the definition into include/linux/mmzone.h for broader access. ...--- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h@@ -341,6 +341,23 @@ enum zone_type { }; +static char * const zone_names[__MAX_NR_ZONES] = { +#ifdef CONFIG_ZONE_DMA + "DMA", +#endif +#ifdef CONFIG_ZONE_DMA32 + "DMA32", +#endif + "Normal", +#ifdef CONFIG_HIGHMEM + "HighMem", +#endif + "Movable", +#ifdef CONFIG_ZONE_DEVICE + "Device", +#endif +}; + #ifndef __GENERATING_BOUNDS_H struct zone {diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 3fbe73a..8e2261c 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c@@ -207,23 +207,6 @@ int sysctl_lowmem_reserve_ratio[MAX_NR_ZONES-1] = { EXPORT_SYMBOL(totalram_pages); -static char * const zone_names[MAX_NR_ZONES] = { -#ifdef CONFIG_ZONE_DMA - "DMA", -#endif -#ifdef CONFIG_ZONE_DMA32 - "DMA32", -#endif - "Normal", -#ifdef CONFIG_HIGHMEM - "HighMem", -#endif - "Movable", -#ifdef CONFIG_ZONE_DEVICE - "Device", -#endif -}; - char * const migratetype_names[MIGRATE_TYPES] = { "Unmovable", "Movable",This is worrisome. On some (ancient) compilers, this will produce a copy of that array into each compilation unit which includes mmzone.h. On smarter compilers, it will produce a copy of the array in each compilation unit which *uses* zone_names[]. On even smarter compilers (and linkers!), only one copy of zone_names[] will exist in vmlinux. I don't know if gcc is an "even smarter compiler" and I didn't check, and I didn't check which gcc versions are even smarter. I'd rather not have to ;) It is risky. So, let's just make it non-static and add a declaration into mmzone.h, please.
I understand your concern, will change it. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>