free_area_init() only requires the definition of maximal PFN for each of the supported zone rater than calculation of actual zone sizes and the sizes of the holes between the zones. After removal of CONFIG_HAVE_MEMBLOCK_NODE_MAP the free_area_init() is available to all architectures. Using this function instead of free_area_init_node() simplifies the zone detection. Signed-off-by: Mike Rapoport <rppt@linux.ibm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Tested-by: Hoan Tran <hoan@os.amperecomputing.com> [arm64] Cc: Baoquan He <bhe@redhat.com> Cc: Brian Cain <bcain@codeaurora.org> Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: "David S. Miller" <davem@davemloft.net> Cc: Geert Uytterhoeven <geert@linux-m68k.org> Cc: Greentime Hu <green.hu@gmail.com> Cc: Greg Ungerer <gerg@linux-m68k.org> Cc: Guan Xuetao <gxt@pku.edu.cn> Cc: Guo Ren <guoren@kernel.org> Cc: Heiko Carstens <heiko.carstens@de.ibm.com> Cc: Helge Deller <deller@gmx.de> Cc: "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com> Cc: Jonathan Corbet <corbet@lwn.net> Cc: Ley Foon Tan <ley.foon.tan@intel.com> Cc: Mark Salter <msalter@redhat.com> Cc: Matt Turner <mattst88@gmail.com> Cc: Max Filippov <jcmvbkbc@gmail.com> Cc: Michael Ellerman <mpe@ellerman.id.au> Cc: Michal Hocko <mhocko@kernel.org> Cc: Michal Simek <monstr@monstr.eu> Cc: Nick Hu <nickhu@andestech.com> Cc: Paul Walmsley <paul.walmsley@sifive.com> Cc: Richard Weinberger <richard@nod.at> Cc: Rich Felker <dalias@libc.org> Cc: Russell King <linux@armlinux.org.uk> Cc: Stafford Horne <shorne@gmail.com> Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de> Cc: Tony Luck <tony.luck@intel.com> Cc: Vineet Gupta <vgupta@synopsys.com> Cc: Yoshinori Sato <ysato@users.sourceforge.jp> Link: http://lkml.kernel.org/r/20200412194859.12663-14-rppt@kernel.org Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
103 lines
2.9 KiB
C
103 lines
2.9 KiB
C
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
/*
|
|
* linux/arch/unicore32/include/asm/memory.h
|
|
*
|
|
* Code specific to PKUnity SoC and UniCore ISA
|
|
*
|
|
* Copyright (C) 2001-2010 GUAN Xue-tao
|
|
*
|
|
* Note: this file should not be included by non-asm/.h files
|
|
*/
|
|
#ifndef __UNICORE_MEMORY_H__
|
|
#define __UNICORE_MEMORY_H__
|
|
|
|
#include <linux/compiler.h>
|
|
#include <linux/const.h>
|
|
#include <linux/sizes.h>
|
|
#include <mach/memory.h>
|
|
|
|
/*
|
|
* PAGE_OFFSET - the virtual address of the start of the kernel image
|
|
* TASK_SIZE - the maximum size of a user space task.
|
|
* TASK_UNMAPPED_BASE - the lower boundary of the mmap VM area
|
|
*/
|
|
#define PAGE_OFFSET UL(0xC0000000)
|
|
#define TASK_SIZE (PAGE_OFFSET - UL(0x41000000))
|
|
#define TASK_UNMAPPED_BASE (PAGE_OFFSET / 3)
|
|
|
|
/*
|
|
* The module space lives between the addresses given by TASK_SIZE
|
|
* and PAGE_OFFSET - it must be within 32MB of the kernel text.
|
|
*/
|
|
#define MODULES_VADDR (PAGE_OFFSET - 16*1024*1024)
|
|
#if TASK_SIZE > MODULES_VADDR
|
|
#error Top of user space clashes with start of module space
|
|
#endif
|
|
|
|
#define MODULES_END (PAGE_OFFSET)
|
|
|
|
/*
|
|
* Allow 16MB-aligned ioremap pages
|
|
*/
|
|
#define IOREMAP_MAX_ORDER 24
|
|
|
|
/*
|
|
* Physical vs virtual RAM address space conversion. These are
|
|
* private definitions which should NOT be used outside memory.h
|
|
* files. Use virt_to_phys/phys_to_virt/__pa/__va instead.
|
|
*/
|
|
#ifndef __virt_to_phys
|
|
#define __virt_to_phys(x) ((x) - PAGE_OFFSET + PHYS_OFFSET)
|
|
#define __phys_to_virt(x) ((x) - PHYS_OFFSET + PAGE_OFFSET)
|
|
#endif
|
|
|
|
/*
|
|
* Convert a page to/from a physical address
|
|
*/
|
|
#define page_to_phys(page) (__pfn_to_phys(page_to_pfn(page)))
|
|
#define phys_to_page(phys) (pfn_to_page(__phys_to_pfn(phys)))
|
|
|
|
#ifndef __ASSEMBLY__
|
|
|
|
#ifndef arch_adjust_zones
|
|
#define arch_adjust_zones(max_zone_pfn) do { } while (0)
|
|
#endif
|
|
|
|
/*
|
|
* PFNs are used to describe any physical page; this means
|
|
* PFN 0 == physical address 0.
|
|
*
|
|
* This is the PFN of the first RAM page in the kernel
|
|
* direct-mapped view. We assume this is the first page
|
|
* of RAM in the mem_map as well.
|
|
*/
|
|
#define PHYS_PFN_OFFSET (PHYS_OFFSET >> PAGE_SHIFT)
|
|
|
|
/*
|
|
* Drivers should NOT use these either.
|
|
*/
|
|
#define __pa(x) __virt_to_phys((unsigned long)(x))
|
|
#define __va(x) ((void *)__phys_to_virt((unsigned long)(x)))
|
|
#define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT)
|
|
|
|
/*
|
|
* Conversion between a struct page and a physical address.
|
|
*
|
|
* page_to_pfn(page) convert a struct page * to a PFN number
|
|
* pfn_to_page(pfn) convert a _valid_ PFN number to struct page *
|
|
*
|
|
* virt_to_page(k) convert a _valid_ virtual address to struct page *
|
|
* virt_addr_valid(k) indicates whether a virtual address is valid
|
|
*/
|
|
#define ARCH_PFN_OFFSET PHYS_PFN_OFFSET
|
|
|
|
#define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT)
|
|
#define virt_addr_valid(kaddr) ((unsigned long)(kaddr) >= PAGE_OFFSET && \
|
|
(unsigned long)(kaddr) < (unsigned long)high_memory)
|
|
|
|
#endif
|
|
|
|
#include <asm-generic/memory_model.h>
|
|
|
|
#endif
|