Received: by 10.223.176.5 with SMTP id f5csp264594wra; Thu, 1 Feb 2018 19:59:30 -0800 (PST) X-Google-Smtp-Source: AH8x224Jj5Da5rrTlLAGPZDSHQAM8rjSV3J3ky96KM1RIRFnQrg/a8Yvd3IG54dMSXuSqDOmDgP+ X-Received: by 10.98.178.133 with SMTP id z5mr38773249pfl.88.1517543970630; Thu, 01 Feb 2018 19:59:30 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1517543970; cv=none; d=google.com; s=arc-20160816; b=JiqASZuSZBL8RHkDUKh5zjNJcSaGw8vDVn6A/RchdhjcAAV7XTjsq0JUTSuHrBq94b 61eyLWYFXmql/zzOkJ/z3K6bdleByZPADAaUQwHsHiu948SYAE+wvQ3GgEqHmlanI9VA XUCAvHerPBbOtVMme8vXnFZz83dsjc1e2BtaQOGcR0bG0bHve+e2Ek6dsE59yQYD7CYR RwjzCBJXBwwayWHuyHe2L2alp903YClxk8WKYj8ehVufmzxnq8maclApFyQ/jPfHzBrY 21gzUDZGN2HjBVM/v6YwY5nt1Kwyd+aqDJhD7/S1JbfUIIRmTIctVUAysZVq0NZ2zStF mduw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=j77QEHJJrZI4VXGyxHQ0HIcduBz6+jkSgE/3kASRdHs=; b=wt817TMpSQ+Us/lA5u6IZC1iQb38iAr0V7ARtBm2yOs/qyvkAnzAebfP/sEM+puJ4U Y5oHMnfk5XEF6tXVfvWVvnUIAM67kz/78uutiP/mCCe1RmzFet9P2Ux4sW2dB9q+R7vi hcsc0odC2r11umAQL2YpDRt0dXAEO2Px94u3dZdY3ovxEKcEZfPgLIiQJFrzk65NiEw9 sppggAxwV+/saqmQ5YiIxPNmg7AzV78KAddCXwbZAWu5twIWu8YwTRqwYMCfuwD/fUhs H6fQGqXGJD/25s4MAZjcftL6HWFhy4mR2XIf9nQyZoECEKJTA0yw5hF9ZjYRIhaYMkHa Vx+g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=h4QtyL6T; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i186si989866pfg.116.2018.02.01.19.59.16; Thu, 01 Feb 2018 19:59:30 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=h4QtyL6T; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752104AbeBBD6S (ORCPT + 99 others); Thu, 1 Feb 2018 22:58:18 -0500 Received: from mail-lf0-f66.google.com ([209.85.215.66]:36705 "EHLO mail-lf0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751784AbeBBDzN (ORCPT ); Thu, 1 Feb 2018 22:55:13 -0500 Received: by mail-lf0-f66.google.com with SMTP id t79so29462630lfe.3 for ; Thu, 01 Feb 2018 19:55:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=j77QEHJJrZI4VXGyxHQ0HIcduBz6+jkSgE/3kASRdHs=; b=h4QtyL6TuFBlM8kvlE37jcnJeEsGng5CK1G8t/mXG+eeWLSENi3Es9HGnEkixMP3AH wXp79tY8CfjQaScbd6JtMrATbB3yPL2ebgHGJnwxg5x1dm623E3qKOaNE7x4TboHyl0K yBFiBN+Scax12bSfSB0HUYlGfOcw3VPfDsBKLmhwPBJ/0aJacZ0YuZpQ0qGZFRuvOtED EiTVwx9IJ2SzqYweys2S0FbCWVq8AOW9kw29vLUb7WJFVqlSfYSsh5QUg+GnmPDa6VYC Poqkb095x+vfZ43MeiTVuX5qlgsx3T4v282P7K4iqw0rbpRkRCKjIfqOP3XZE0yHKD+W kiqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=j77QEHJJrZI4VXGyxHQ0HIcduBz6+jkSgE/3kASRdHs=; b=ZrRMbheRo4Gh/K1OGNBo+x+yHWHYebu+txnOkIAUBM4LAZ3mmKCTvE1tQVasJrgo3D Wvfg1fG5PMzJjTkn3H5ulexeB0hKAX1fANehpAjz8sZASZw2iGBGfMrQkSGcxRZQxQAa UD39arcBM54W0gbsjFXMbtBvsnT2inUZ8adtYnS5uQpeibsuV+Do+XpLwhd9y8Ua0M7A GeOAmrgICK9qEohhK6PuEOLKRPCvCcgUO1ECtmOeSTjPODup0IXF2t+fY/BAqKqiLCK6 IbNAeZ685C0Hrmb/Gyvyu3cYRJDpKVv0lm74As04GELWfdJEtpDqU8pjxhaAOPk+XOpx Au4w== X-Gm-Message-State: AKwxyte0qlQ7QIIjqERiD3QUy4yPc3FJTTwdiosvrtRCmHCoI7zgA0QY YNMXvVLu9Nl7lxynzFjygYM= X-Received: by 10.46.27.142 with SMTP id c14mr10496152ljf.46.1517543711228; Thu, 01 Feb 2018 19:55:11 -0800 (PST) Received: from linux.local ([95.79.164.146]) by smtp.gmail.com with ESMTPSA id f14sm190934lje.84.2018.02.01.19.55.09 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 01 Feb 2018 19:55:10 -0800 (PST) From: Serge Semin 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 Subject: [PATCH v2 06/15] MIPS: memblock: Add reserved memory regions to memblock Date: Fri, 2 Feb 2018 06:54:49 +0300 Message-Id: <20180202035458.30456-7-fancer.lancer@gmail.com> X-Mailer: git-send-email 2.12.0 In-Reply-To: <20180202035458.30456-1-fancer.lancer@gmail.com> References: <20180117222312.14763-1-fancer.lancer@gmail.com> <20180202035458.30456-1-fancer.lancer@gmail.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 --- 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