m68k/mm: enable use of generic memory_model.h for !DISCONTIGMEM

The pg_data_map and pg_data_table arrays as well as page_to_pfn() and
pfn_to_page() are required only for DISCONTIGMEM. Other memory models can
use the generic definitions in asm-generic/memory_model.h.

Link: https://lkml.kernel.org/r/20201101170454.9567-13-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>
This commit is contained in:
Mike Rapoport 2020-12-14 19:10:11 -08:00 committed by Linus Torvalds
parent 6b2ad8d763
commit 4bfc848e09
5 changed files with 10 additions and 9 deletions

View File

@ -374,7 +374,6 @@ config SINGLE_MEMORY_CHUNK
bool "Use one physical chunk of memory only" if ADVANCED && !SUN3 bool "Use one physical chunk of memory only" if ADVANCED && !SUN3
depends on MMU depends on MMU
default y if SUN3 || MMU_COLDFIRE default y if SUN3 || MMU_COLDFIRE
select NEED_MULTIPLE_NODES
help help
Ignore all but the first contiguous chunk of physical memory for VM Ignore all but the first contiguous chunk of physical memory for VM
purposes. This will save a few bytes kernel size and may speed up purposes. This will save a few bytes kernel size and may speed up

View File

@ -62,8 +62,10 @@ extern unsigned long _ramend;
#include <asm/page_no.h> #include <asm/page_no.h>
#endif #endif
#ifdef CONFIG_DISCONTIGMEM
#define __phys_to_pfn(paddr) ((unsigned long)((paddr) >> PAGE_SHIFT)) #define __phys_to_pfn(paddr) ((unsigned long)((paddr) >> PAGE_SHIFT))
#define __pfn_to_phys(pfn) PFN_PHYS(pfn) #define __pfn_to_phys(pfn) PFN_PHYS(pfn)
#endif
#include <asm-generic/getorder.h> #include <asm-generic/getorder.h>

View File

@ -153,6 +153,7 @@ static inline __attribute_const__ int __virt_to_node_shift(void)
pfn_to_virt(page_to_pfn(page)); \ pfn_to_virt(page_to_pfn(page)); \
}) })
#ifdef CONFIG_DISCONTIGMEM
#define pfn_to_page(pfn) ({ \ #define pfn_to_page(pfn) ({ \
unsigned long __pfn = (pfn); \ unsigned long __pfn = (pfn); \
struct pglist_data *pgdat; \ struct pglist_data *pgdat; \
@ -165,6 +166,10 @@ static inline __attribute_const__ int __virt_to_node_shift(void)
pgdat = &pg_data_map[page_to_nid(__p)]; \ pgdat = &pg_data_map[page_to_nid(__p)]; \
((__p) - pgdat->node_mem_map) + pgdat->node_start_pfn; \ ((__p) - pgdat->node_mem_map) + pgdat->node_start_pfn; \
}) })
#else
#define ARCH_PFN_OFFSET (m68k_memory[0].addr)
#include <asm-generic/memory_model.h>
#endif
#define virt_addr_valid(kaddr) ((void *)(kaddr) >= (void *)PAGE_OFFSET && (void *)(kaddr) < high_memory) #define virt_addr_valid(kaddr) ((void *)(kaddr) >= (void *)PAGE_OFFSET && (void *)(kaddr) < high_memory)
#define pfn_valid(pfn) virt_addr_valid(pfn_to_virt(pfn)) #define pfn_valid(pfn) virt_addr_valid(pfn_to_virt(pfn))

View File

@ -29,12 +29,7 @@ static inline void *phys_to_virt(unsigned long address)
} }
/* Permanent address of a page. */ /* Permanent address of a page. */
#if defined(CONFIG_MMU) && !defined(CONFIG_DISCONTIGMEM)
#define page_to_phys(page) \
__pa(PAGE_OFFSET + (((page) - pg_data_map[0].node_mem_map) << PAGE_SHIFT))
#else
#define page_to_phys(page) (page_to_pfn(page) << PAGE_SHIFT) #define page_to_phys(page) (page_to_pfn(page) << PAGE_SHIFT)
#endif
/* /*
* IO bus memory addresses are 1:1 with the physical address, * IO bus memory addresses are 1:1 with the physical address,

View File

@ -42,12 +42,12 @@ EXPORT_SYMBOL(empty_zero_page);
#ifdef CONFIG_MMU #ifdef CONFIG_MMU
pg_data_t pg_data_map[MAX_NUMNODES];
EXPORT_SYMBOL(pg_data_map);
int m68k_virt_to_node_shift; int m68k_virt_to_node_shift;
#ifdef CONFIG_DISCONTIGMEM #ifdef CONFIG_DISCONTIGMEM
pg_data_t pg_data_map[MAX_NUMNODES];
EXPORT_SYMBOL(pg_data_map);
pg_data_t *pg_data_table[65]; pg_data_t *pg_data_table[65];
EXPORT_SYMBOL(pg_data_table); EXPORT_SYMBOL(pg_data_table);
#endif #endif