Received: by 10.223.185.116 with SMTP id b49csp3658857wrg; Tue, 13 Feb 2018 05:52:57 -0800 (PST) X-Google-Smtp-Source: AH8x224nTrOM2Y4BUpRdpXzYxXeTm7aMn4y3Bq2hIguZ4MYTwGE8DfAxA+OATnwsvpc83cAYixBx X-Received: by 10.99.128.195 with SMTP id j186mr1063699pgd.37.1518529977515; Tue, 13 Feb 2018 05:52:57 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1518529977; cv=none; d=google.com; s=arc-20160816; b=MHDJW3OEXHe3DpH4BoQFctyDuQ5gzomMagvHeaQMPGZzqjAVlGmhMRapk+UhM7DEA7 ReJhIjQU8P2ApV7ttHNb2C8mWEVaKdiRLpmg8jHyZ/Ik1mJhK4TekRQbenhZ9J6EaZGW Ogdli+1Qo+GZQ5uiwoyzGVm1Glb6dfCmgqpJTvtlwiVfPpsr900uC9VigfUSHfSlNUyX CC8p8dHNIWQ3uxQ8neNWMvf6+vDXNAs6O14TmCjoz1J+SbfX9Trl7UUYfhG8I2Zqp+YO SzZz2FYfDwlNHY+ubr97DTkkUo7+nYK5gMUTA/YD11atCWOVl9BJxxHGV1YkE6cnrM4N I7VQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject:arc-authentication-results; bh=CHtTNlXigHYYXVb7UWThBawclQrXWZAlSZiEVFEnGBI=; b=JtanKtcmzte9W8zCDECSf/fuUDzSEk1tqQLPcxDIFhu73LeCpKSDUNZykCt8bdohUz epxcYAuSp+8vsT4VJSuoMKOT5qnu1ylt0MKh/PEVsOdxHMRpZUknfYesvkQOTrzBV5G6 kIixRV+vU/+KpyU36gZDdVZU/hK/GS56wfE8sYBusO7+MzLkgVMuv3hE7qmTqZooNupU WhNghvsmbQu2LneuWxlrn/Xp9okuTgtSl7Xe0mc7NfEM6bebQeXGjvM6vppTOLYFGEwE nTU9F2t2VipaXadRKpg5nBdg/7usYheg/t8+Wq7uZpncAz5cNktGJsb83trzNzQBvNjv pWmg== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id g33-v6si1509171plb.251.2018.02.13.05.52.42; Tue, 13 Feb 2018 05:52:57 -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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S965006AbeBMNvz (ORCPT + 99 others); Tue, 13 Feb 2018 08:51:55 -0500 Received: from 9pmail.ess.barracuda.com ([64.235.150.224]:46682 "EHLO 9pmail.ess.barracuda.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S964832AbeBMNvx (ORCPT ); Tue, 13 Feb 2018 08:51:53 -0500 Received: from MIPSMAIL01.mipstec.com (mailrelay.mips.com [12.201.5.28]) by mx30.ess.sfj.cudaops.com (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NO); Tue, 13 Feb 2018 13:50:17 +0000 Received: from [10.150.130.83] (10.150.130.83) by MIPSMAIL01.mipstec.com (10.20.43.31) with Microsoft SMTP Server (TLS) id 14.3.361.1; Tue, 13 Feb 2018 05:44:45 -0800 Subject: Re: [PATCH v2 06/15] MIPS: memblock: Add reserved memory regions to memblock To: Serge Semin , , , , , , , , , CC: , , , , , , , References: <20180117222312.14763-1-fancer.lancer@gmail.com> <20180202035458.30456-1-fancer.lancer@gmail.com> <20180202035458.30456-7-fancer.lancer@gmail.com> From: Matt Redfearn Message-ID: Date: Tue, 13 Feb 2018 13:44:40 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0 MIME-Version: 1.0 In-Reply-To: <20180202035458.30456-7-fancer.lancer@gmail.com> Content-Type: text/plain; charset="utf-8"; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-Originating-IP: [10.150.130.83] X-BESS-ID: 1518529814-637140-1052-163823-8 X-BESS-VER: 2018.1-r1801291959 X-BESS-Apparent-Source-IP: 12.201.5.28 X-BESS-Outbound-Spam-Score: 0.00 X-BESS-Outbound-Spam-Report: Code version 3.2, rules version 3.2.2.189978 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------- 0.00 BSF_BESS_OUTBOUND META: BESS Outbound X-BESS-Outbound-Spam-Status: SCORE=0.00 using account:ESS59374 scores of KILL_LEVEL=7.0 tests=BSF_BESS_OUTBOUND X-BESS-BRTS-Status: 1 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Serge, On 02/02/18 03:54, Serge Semin wrote: > 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). Again, if possible, introduce this change before discarding bootmem initialisation, so that the series can be bisected. > > 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; > - } I think this change maybe belongs in "MIPS: memblock: Discard bootmem initialization"? Thanks, Matt > + /* > + * 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) >