All of lore.kernel.org
 help / color / mirror / Atom feed
From: Serge Semin <fancer.lancer@gmail.com>
To: ralf@linux-mips.org, miodrag.dinic@mips.com, jhogan@kernel.org,
	goran.ferenc@mips.com, david.daney@cavium.com,
	paul.gortmaker@windriver.com, paul.burton@mips.com,
	alex.belits@cavium.com, Steven.Hill@cavium.com
Cc: alexander.sverdlin@nokia.com, matt.redfearn@mips.com,
	kumba@gentoo.org, marcin.nowakowski@mips.com,
	James.hogan@mips.com, Peter.Wotton@mips.com,
	Sergey.Semin@t-platforms.ru, linux-mips@linux-mips.org,
	linux-kernel@vger.kernel.org,
	Serge Semin <fancer.lancer@gmail.com>
Subject: [PATCH v2 06/15] MIPS: memblock: Add reserved memory regions to memblock
Date: Fri,  2 Feb 2018 06:54:49 +0300	[thread overview]
Message-ID: <20180202035458.30456-7-fancer.lancer@gmail.com> (raw)
In-Reply-To: <20180202035458.30456-1-fancer.lancer@gmail.com>

The memory reservation has to be performed for all the crucial
objects like kernel itself, it data and fdt blob. FDT reserved-memory
nodes should also be scanned to declare or discard reserved memory
regions, but it has to be done after the memblock is fully initialized
with low/high RAM (see the function description/code).

Signed-off-by: Serge Semin <fancer.lancer@gmail.com>
---
 arch/mips/kernel/setup.c | 96 +++++++++++++++++++++++++++---------------------
 1 file changed, 54 insertions(+), 42 deletions(-)

diff --git a/arch/mips/kernel/setup.c b/arch/mips/kernel/setup.c
index cf3674977170..72853e94c2c7 100644
--- a/arch/mips/kernel/setup.c
+++ b/arch/mips/kernel/setup.c
@@ -362,6 +362,10 @@ static unsigned long __init init_initrd(void)
 static void __init bootmem_init(void)
 {
 	init_initrd();
+}
+
+static void __init reservation_init(void)
+{
 	finalize_initrd();
 }
 
@@ -478,60 +482,70 @@ static void __init bootmem_init(void)
 		memblock_add_node(PFN_PHYS(start), PFN_PHYS(end - start), 0);
 	}
 	memblock_set_current_limit(PFN_PHYS(max_low_pfn));
+}
+
+static void __init reservation_init(void)
+{
+	phys_addr_t size;
+	int i;
 
 	/*
-	 * Register fully available low RAM pages with the bootmem allocator.
+	 * Reserve memory occupied by the kernel and it data
 	 */
-	for (i = 0; i < boot_mem_map.nr_map; i++) {
-		unsigned long start, end, size;
+	size = __pa_symbol(&_end) - __pa_symbol(&_text);
+	memblock_reserve(__pa_symbol(&_text), size);
 
-		start = PFN_UP(boot_mem_map.map[i].addr);
-		end   = PFN_DOWN(boot_mem_map.map[i].addr
-				    + boot_mem_map.map[i].size);
+	/*
+	 * Handle FDT and it reserved-memory nodes now
+	 */
+	early_init_fdt_reserve_self();
+	early_init_fdt_scan_reserved_mem();
 
-		/*
-		 * Reserve usable memory.
-		 */
-		switch (boot_mem_map.map[i].type) {
-		case BOOT_MEM_RAM:
-			break;
-		case BOOT_MEM_INIT_RAM:
-			memory_present(0, start, end);
-			continue;
-		default:
-			/* Not usable memory */
-			if (start > min_low_pfn && end < max_low_pfn)
-				reserve_bootmem(boot_mem_map.map[i].addr,
-						boot_mem_map.map[i].size,
-						BOOTMEM_DEFAULT);
-			continue;
-		}
+	/*
+	 * Reserve requested memory ranges with the memblock allocator.
+	 */
+	for (i = 0; i < boot_mem_map.nr_map; i++) {
+		phys_addr_t start, end;
 
-		/*
-		 * We are rounding up the start address of usable memory
-		 * and at the end of the usable range downwards.
-		 */
-		if (start >= max_low_pfn)
+		if (boot_mem_map.map[i].type == BOOT_MEM_RAM)
 			continue;
-		if (end > max_low_pfn)
-			end = max_low_pfn;
+
+		start = boot_mem_map.map[i].addr;
+		end   = boot_mem_map.map[i].addr + boot_mem_map.map[i].size;
+		size  = boot_mem_map.map[i].size;
 
 		/*
-		 * ... finally, is the area going away?
+		 * Make sure the region isn't already reserved
 		 */
-		if (end <= start)
+		if (memblock_is_region_reserved(start, size)) {
+			pr_warn("Reserved region %08zx @ %pa already in-use\n",
+				(size_t)size, &start);
 			continue;
-		size = end - start;
+		}
 
-		/* Register lowmem ranges */
-		free_bootmem(PFN_PHYS(start), size << PAGE_SHIFT);
-		memory_present(0, start, end);
+		switch (boot_mem_map.map[i].type) {
+		case BOOT_MEM_ROM_DATA:
+		case BOOT_MEM_RESERVED:
+		case BOOT_MEM_INIT_RAM:
+			memblock_reserve(start, size);
+			break;
+		case BOOT_MEM_RESERVED_NOMAP:
+		default:
+			memblock_remove(start, size);
+			break;
+		}
 	}
 
 	/*
 	 * Reserve initrd memory if needed.
 	 */
 	finalize_initrd();
+
+	/*
+	 * Reserve for hibernation
+	 */
+	size = __pa_symbol(&__nosave_end) - __pa_symbol(&__nosave_begin);
+	memblock_reserve(__pa_symbol(&__nosave_begin), size);
 }
 
 #endif	/* CONFIG_SGI_IP27 */
@@ -546,6 +560,7 @@ static void __init bootmem_init(void)
  * kernel but generic memory management system is still entirely uninitialized.
  *
  *  o bootmem_init()
+ *  o reservation_init()
  *  o sparse_init()
  *  o paging_init()
  *  o dma_contiguous_reserve()
@@ -803,10 +818,10 @@ static void __init arch_mem_init(char **cmdline_p)
 		print_memory_map();
 	}
 
-	early_init_fdt_reserve_self();
-	early_init_fdt_scan_reserved_mem();
-
 	bootmem_init();
+
+	reservation_init();
+
 #ifdef CONFIG_PROC_VMCORE
 	if (setup_elfcorehdr && setup_elfcorehdr_size) {
 		printk(KERN_INFO "kdump reserved memory at %lx-%lx\n",
@@ -832,9 +847,6 @@ static void __init arch_mem_init(char **cmdline_p)
 	for_each_memblock(reserved, reg)
 		if (reg->size != 0)
 			reserve_bootmem(reg->base, reg->size, BOOTMEM_DEFAULT);
-
-	reserve_bootmem_region(__pa_symbol(&__nosave_begin),
-			__pa_symbol(&__nosave_end)); /* Reserve for hibernation */
 }
 
 static void __init resource_init(void)
-- 
2.12.0

  parent reply	other threads:[~2018-02-02  3:57 UTC|newest]

Thread overview: 101+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-01-17 22:22 [PATCH 00/14] MIPS: memblock: Switch arch code to NO_BOOTMEM Serge Semin
2018-01-17 22:22 ` [PATCH 01/14] MIPS: memblock: Add RESERVED_NOMAP memory flag Serge Semin
2018-01-17 22:23 ` [PATCH 02/14] MIPS: memblock: Surely map BSS kernel memory section Serge Semin
2018-01-22 16:35   ` Matt Redfearn
2018-01-22 16:35     ` Matt Redfearn
2018-01-22 21:47     ` Serge Semin
2018-01-23 11:03       ` Matt Redfearn
2018-01-23 11:03         ` Matt Redfearn
2018-01-23 19:27         ` Serge Semin
2018-01-24  9:49           ` Matt Redfearn
2018-01-24  9:49             ` Matt Redfearn
2018-01-24 10:03             ` Serge Semin
2018-01-17 22:23 ` [PATCH 03/14] MIPS: memblock: Reserve initrd memory in memblock Serge Semin
2018-01-17 22:23 ` [PATCH 04/14] MIPS: memblock: Discard bootmem initialization Serge Semin
2018-01-17 22:23 ` [PATCH 05/14] MIPS: memblock: Add reserved memory regions to memblock Serge Semin
2018-01-17 22:23 ` [PATCH 06/14] MIPS: memblock: Reserve kdump/crash regions in memblock Serge Semin
2018-01-17 22:23 ` [PATCH 07/14] MIPS: memblock: Mark present sparsemem sections Serge Semin
2018-01-24  6:13   ` Marcin Nowakowski
2018-01-24  6:13     ` Marcin Nowakowski
2018-01-24  7:27     ` Serge Semin
2018-01-17 22:23 ` [PATCH 08/14] MIPS: memblock: Simplify DMA contiguous reservation Serge Semin
2018-01-17 22:23 ` [PATCH 09/14] MIPS: memblock: Allow memblock regions resize Serge Semin
2018-01-17 22:23 ` [PATCH 10/14] MIPS: memblock: Perform early low memory test Serge Semin
2018-01-17 22:23 ` [PATCH 11/14] MIPS: memblock: Print out kernel virtual mem layout Serge Semin
2018-01-18 20:03   ` Florian Fainelli
2018-01-18 20:18     ` Serge Semin
2018-01-19  7:59       ` Matt Redfearn
2018-01-19  7:59         ` Matt Redfearn
2018-01-19 14:27         ` Serge Semin
2018-01-23 15:35           ` Matt Redfearn
2018-01-23 15:35             ` Matt Redfearn
2018-01-23 19:10             ` Serge Semin
2018-01-24  9:46               ` Matt Redfearn
2018-01-24  9:46                 ` Matt Redfearn
2018-01-24 10:08                 ` Serge Semin
2018-01-17 22:23 ` [PATCH 12/14] MIPS: memblock: Discard bootmem from Loongson3 code Serge Semin
2018-01-23 22:28   ` Jiaxun Yang
2018-01-23 19:36     ` Serge Semin
2018-01-17 22:23 ` [PATCH 13/14] MIPS: memblock: Discard bootmem from SGI IP27 code Serge Semin
2018-01-17 22:23 ` [PATCH 14/14] MIPS: memblock: Deactivate bootmem allocator Serge Semin
2018-01-23 23:59   ` James Hogan
2018-01-24  8:28     ` Serge Semin
2018-01-22 16:33 ` [PATCH] MIPS: KASLR: Drop relocatable fixup from reservation_init Matt Redfearn
2018-01-22 16:33   ` Matt Redfearn
2018-01-22 21:54   ` Serge Semin
2018-01-22 16:36 ` [PATCH 00/14] MIPS: memblock: Switch arch code to NO_BOOTMEM Matt Redfearn
2018-01-22 16:36   ` Matt Redfearn
2018-01-22 21:33   ` Serge Semin
2018-01-23 11:29   ` Mathieu Malaterre
2018-01-23 14:01     ` Matt Redfearn
2018-01-23 14:01       ` Matt Redfearn
2018-01-25 17:58 ` Alexander Sverdlin
2018-01-25 17:58   ` Alexander Sverdlin
2018-01-25 20:17   ` Serge Semin
2018-01-31  0:21 ` Serge Semin
2018-02-02  3:54 ` [PATCH v2 00/15] " Serge Semin
2018-02-02  3:54   ` [PATCH v2 01/15] MIPS: memblock: Add RESERVED_NOMAP memory flag Serge Semin
2018-02-13 11:21     ` Matt Redfearn
2018-02-13 11:21       ` Matt Redfearn
2018-02-02  3:54   ` [PATCH v2 02/15] MIPS: memblock: Surely map BSS kernel memory section Serge Semin
2018-02-13 11:22     ` Matt Redfearn
2018-02-13 11:22       ` Matt Redfearn
2018-02-02  3:54   ` [PATCH v2 03/15] MIPS: memblock: Reserve initrd memory in memblock Serge Semin
2018-02-13 11:22     ` Matt Redfearn
2018-02-13 11:22       ` Matt Redfearn
2018-02-02  3:54   ` [PATCH v2 04/15] MIPS: memblock: Discard bootmem initialization Serge Semin
2018-02-13 11:28     ` Matt Redfearn
2018-02-13 11:28       ` Matt Redfearn
2018-02-02  3:54   ` [PATCH v2 05/15] MIPS: KASLR: Drop relocatable fixup from reservation_init Serge Semin
2018-02-13 11:30     ` Matt Redfearn
2018-02-13 11:30       ` Matt Redfearn
2018-02-02  3:54   ` Serge Semin [this message]
2018-02-13 13:44     ` [PATCH v2 06/15] MIPS: memblock: Add reserved memory regions to memblock Matt Redfearn
2018-02-13 13:44       ` Matt Redfearn
2018-02-02  3:54   ` [PATCH v2 07/15] MIPS: memblock: Reserve kdump/crash regions in memblock Serge Semin
2018-02-13 13:45     ` Matt Redfearn
2018-02-13 13:45       ` Matt Redfearn
2018-02-02  3:54   ` [PATCH v2 08/15] MIPS: memblock: Mark present sparsemem sections Serge Semin
2018-02-13 13:50     ` Matt Redfearn
2018-02-13 13:50       ` Matt Redfearn
2018-02-02  3:54   ` [PATCH v2 09/15] MIPS: memblock: Simplify DMA contiguous reservation Serge Semin
2018-02-13 13:51     ` Matt Redfearn
2018-02-13 13:51       ` Matt Redfearn
2018-02-02  3:54   ` [PATCH v2 10/15] MIPS: memblock: Allow memblock regions resize Serge Semin
2018-02-13 13:55     ` Matt Redfearn
2018-02-13 13:55       ` Matt Redfearn
2018-02-02  3:54   ` [PATCH v2 11/15] MIPS: memblock: Perform early low memory test Serge Semin
2018-02-13 14:01     ` Matt Redfearn
2018-02-13 14:01       ` Matt Redfearn
2018-02-02  3:54   ` [PATCH v2 12/15] MIPS: memblock: Print out kernel virtual mem layout Serge Semin
2018-02-13 14:05     ` Matt Redfearn
2018-02-13 14:05       ` Matt Redfearn
2018-02-02  3:54   ` [PATCH v2 13/15] MIPS: memblock: Discard bootmem from Loongson3 code Serge Semin
2018-02-13 14:09     ` Matt Redfearn
2018-02-13 14:09       ` Matt Redfearn
2018-02-02  3:54   ` [PATCH v2 14/15] MIPS: memblock: Discard bootmem from SGI IP27 code Serge Semin
2018-02-13 14:17     ` Matt Redfearn
2018-02-13 14:17       ` Matt Redfearn
2018-02-02  3:54   ` [PATCH v2 15/15] MIPS: memblock: Deactivate bootmem allocator Serge Semin
2018-02-13 14:18     ` Matt Redfearn
2018-02-13 14:18       ` Matt Redfearn

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=20180202035458.30456-7-fancer.lancer@gmail.com \
    --to=fancer.lancer@gmail.com \
    --cc=James.hogan@mips.com \
    --cc=Peter.Wotton@mips.com \
    --cc=Sergey.Semin@t-platforms.ru \
    --cc=Steven.Hill@cavium.com \
    --cc=alex.belits@cavium.com \
    --cc=alexander.sverdlin@nokia.com \
    --cc=david.daney@cavium.com \
    --cc=goran.ferenc@mips.com \
    --cc=jhogan@kernel.org \
    --cc=kumba@gentoo.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mips@linux-mips.org \
    --cc=marcin.nowakowski@mips.com \
    --cc=matt.redfearn@mips.com \
    --cc=miodrag.dinic@mips.com \
    --cc=paul.burton@mips.com \
    --cc=paul.gortmaker@windriver.com \
    --cc=ralf@linux-mips.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.