linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Leizhen (ThunderTown)" <thunder.leizhen@huawei.com>
To: Rob Herring <robh@kernel.org>
Cc: Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
	<x86@kernel.org>, "H . Peter Anvin" <hpa@zytor.com>,
	<linux-kernel@vger.kernel.org>, Dave Young <dyoung@redhat.com>,
	Baoquan He <bhe@redhat.com>, Vivek Goyal <vgoyal@redhat.com>,
	Eric Biederman <ebiederm@xmission.com>,
	<kexec@lists.infradead.org>,
	Catalin Marinas <catalin.marinas@arm.com>,
	"Will Deacon" <will@kernel.org>,
	<linux-arm-kernel@lists.infradead.org>,
	"Frank Rowand" <frowand.list@gmail.com>,
	<devicetree@vger.kernel.org>, "Jonathan Corbet" <corbet@lwn.net>,
	<linux-doc@vger.kernel.org>, Randy Dunlap <rdunlap@infradead.org>,
	Feng Zhou <zhoufeng.zf@bytedance.com>,
	Kefeng Wang <wangkefeng.wang@huawei.com>,
	Chen Zhou <dingguo.cz@antgroup.com>
Subject: Re: [PATCH v16 10/11] of: fdt: Add memory for devices by DT property "linux,usable-memory-range"
Date: Wed, 1 Dec 2021 10:55:46 +0800	[thread overview]
Message-ID: <0dc664f7-65ae-767c-3fe6-d1bcf50d41e1@huawei.com> (raw)
In-Reply-To: <YaaitPTArUZEriob@robh.at.kernel.org>



On 2021/12/1 6:16, Rob Herring wrote:
> On Tue, Nov 23, 2021 at 08:46:45PM +0800, Zhen Lei wrote:
>> From: Chen Zhou <chenzhou10@huawei.com>
>>
>> When reserving crashkernel in high memory, some low memory is reserved
>> for crash dump kernel devices and never mapped by the first kernel.
>> This memory range is advertised to crash dump kernel via DT property
>> under /chosen,
>>         linux,usable-memory-range = <BASE1 SIZE1 [BASE2 SIZE2]>
>>
>> We reused the DT property linux,usable-memory-range and made the low
>> memory region as the second range "BASE2 SIZE2", which keeps compatibility
>> with existing user-space and older kdump kernels.
>>
>> Crash dump kernel reads this property at boot time and call memblock_add()
>> to add the low memory region after memblock_cap_memory_range() has been
>> called.
>>
>> Signed-off-by: Chen Zhou <chenzhou10@huawei.com>
>> Signed-off-by: Zhen Lei <thunder.leizhen@huawei.com>
>> ---
>>  drivers/of/fdt.c | 36 ++++++++++++++++++++++++++----------
>>  1 file changed, 26 insertions(+), 10 deletions(-)
>>
>> diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c
>> index 37b477a51175359..1ea2a0b1657e3a9 100644
>> --- a/drivers/of/fdt.c
>> +++ b/drivers/of/fdt.c
>> @@ -967,6 +967,15 @@ static void __init early_init_dt_check_for_elfcorehdr(unsigned long node)
>>  
>>  static unsigned long chosen_node_offset = -FDT_ERR_NOTFOUND;
>>  
>> +/*
>> + * The main usage of linux,usable-memory-range is for crash dump kernel.
>> + * Originally, the number of usable-memory regions is one. Now there may
>> + * be two regions, low region and high region.
>> + * To make compatibility with existing user-space and older kdump, the low
>> + * region is always the last range of linux,usable-memory-range if exist.
>> + */
>> +#define MAX_USABLE_RANGES		2
>> +
>>  /**
>>   * early_init_dt_check_for_usable_mem_range - Decode usable memory range
>>   * location from flat tree
>> @@ -974,10 +983,9 @@ static unsigned long chosen_node_offset = -FDT_ERR_NOTFOUND;
>>   */
>>  static void __init early_init_dt_check_for_usable_mem_range(unsigned long node)
>>  {
>> -	const __be32 *prop;
>> -	int len;
>> -	phys_addr_t cap_mem_addr;
>> -	phys_addr_t cap_mem_size;
>> +	struct memblock_region rgn[MAX_USABLE_RANGES] = {0};
>> +	const __be32 *prop, *endp;
>> +	int len, i = 0;
>>  
>>  	if ((long)node < 0)
>>  		return;
>> @@ -985,16 +993,24 @@ static void __init early_init_dt_check_for_usable_mem_range(unsigned long node)
>>  	pr_debug("Looking for usable-memory-range property... ");
>>  
>>  	prop = of_get_flat_dt_prop(node, "linux,usable-memory-range", &len);
>> -	if (!prop || (len < (dt_root_addr_cells + dt_root_size_cells)))
>> +	if (!prop)
> 
> if (!prop || (len % (dt_root_addr_cells + dt_root_size_cells)))

OK.

> 
>>  		return;
>>  
>> -	cap_mem_addr = dt_mem_next_cell(dt_root_addr_cells, &prop);
>> -	cap_mem_size = dt_mem_next_cell(dt_root_size_cells, &prop);
>> +	endp = prop + (len / sizeof(__be32));
>> +	while ((endp - prop) >= (dt_root_addr_cells + dt_root_size_cells)) {
> 
> for (i = 0; i < MAX_USABLE_RANGES, prop < endp; i++) {
> 
>> +		rgn[i].base = dt_mem_next_cell(dt_root_addr_cells, &prop);
>> +		rgn[i].size = dt_mem_next_cell(dt_root_size_cells, &prop);
>> +
>> +		pr_debug("cap_mem_regions[%d]: base=%pa, size=%pa\n",
>> +			 i, &rgn[i].base, &rgn[i].size);
>>  
>> -	pr_debug("cap_mem_start=%pa cap_mem_size=%pa\n", &cap_mem_addr,
>> -		 &cap_mem_size);
>> +		if (++i >= MAX_USABLE_RANGES)
>> +			break;
> 
> And drop this if.

OK.

> 
>> +	}
>>  
>> -	memblock_cap_memory_range(cap_mem_addr, cap_mem_size);
>> +	memblock_cap_memory_range(rgn[0].base, rgn[0].size);
>> +	for (i = 1; i < MAX_USABLE_RANGES && rgn[i].size; i++)
> 
> s/ &&/,/

Hi Rob:

The comma operator may not be suitable for logical judgment. The logical judgment
before commas (,) is ignored.

Here's my test:

C code:
int main()
{
        int i, j;

        printf("&&:\n");
        for (i = 0, j = 0; i < 2 && j < 3; i++, j++)
                printf("i=%d, j=%d\n", i, j);

        printf("\ncomma:\n");
        for (i = 0, j = 0; i < 2, j < 3; i++, j++)	//(i < 2) before comma is ignored
                printf("i=%d, j=%d\n", i, j);

        return 0;
}

Output:
&&:
i=0, j=0
i=1, j=1

comma:
i=0, j=0
i=1, j=1
i=2, j=2


> 
>> +		memblock_add(rgn[i].base, rgn[i].size);
>>  }
>>  
>>  #ifdef CONFIG_SERIAL_EARLYCON
>> -- 
>> 2.25.1
>>
>>
> 
> .
> 

  reply	other threads:[~2021-12-01  2:55 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-23 12:46 [PATCH v16 00/11] support reserving crashkernel above 4G on arm64 kdump Zhen Lei
2021-11-23 12:46 ` [PATCH v16 01/11] x86: kdump: replace the hard-coded alignment with macro CRASH_ALIGN Zhen Lei
2021-11-23 12:46 ` [PATCH v16 02/11] x86: kdump: make the lower bound of crash kernel reservation consistent Zhen Lei
2021-11-23 12:46 ` [PATCH v16 03/11] x86: kdump: use macro CRASH_ADDR_LOW_MAX in functions reserve_crashkernel() Zhen Lei
2021-11-23 12:46 ` [PATCH v16 04/11] x86: kdump: move xen_pv_domain() check and insert_resource() to setup_arch() Zhen Lei
2021-11-23 12:46 ` [PATCH v16 05/11] x86: kdump: move reserve_crashkernel[_low]() into crash_core.c Zhen Lei
2021-11-23 12:46 ` [PATCH v16 06/11] arm64: kdump: introduce some macros for crash kernel reservation Zhen Lei
2021-11-23 12:46 ` [PATCH v16 07/11] arm64: kdump: reimplement crashkernel=X Zhen Lei
2021-11-23 12:46 ` [PATCH v16 08/11] x86, arm64: Add ARCH_WANT_RESERVE_CRASH_KERNEL config Zhen Lei
2021-12-08 17:09   ` Catalin Marinas
2021-12-09  2:06     ` Leizhen (ThunderTown)
2021-11-23 12:46 ` [PATCH v16 09/11] of: fdt: Aggregate the processing of "linux,usable-memory-range" Zhen Lei
2021-11-30 22:05   ` Rob Herring
2021-11-23 12:46 ` [PATCH v16 10/11] of: fdt: Add memory for devices by DT property "linux,usable-memory-range" Zhen Lei
2021-11-30 22:16   ` Rob Herring
2021-12-01  2:55     ` Leizhen (ThunderTown) [this message]
2021-12-09  1:59       ` Leizhen (ThunderTown)
2021-12-09 17:40         ` Rob Herring
2021-11-23 12:46 ` [PATCH v16 11/11] kdump: update Documentation about crashkernel Zhen Lei
2021-11-29 20:25 ` [PATCH v16 00/11] support reserving crashkernel above 4G on arm64 kdump Dave Kleikamp
2021-11-30  2:12 ` Baoquan He
2021-12-06  3:51 ` john.p.donnelly
2021-12-08 17:13 ` Catalin Marinas
2021-12-10 19:53   ` john.p.donnelly
2021-12-13 10:18     ` Catalin Marinas

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=0dc664f7-65ae-767c-3fe6-d1bcf50d41e1@huawei.com \
    --to=thunder.leizhen@huawei.com \
    --cc=bhe@redhat.com \
    --cc=bp@alien8.de \
    --cc=catalin.marinas@arm.com \
    --cc=corbet@lwn.net \
    --cc=devicetree@vger.kernel.org \
    --cc=dingguo.cz@antgroup.com \
    --cc=dyoung@redhat.com \
    --cc=ebiederm@xmission.com \
    --cc=frowand.list@gmail.com \
    --cc=hpa@zytor.com \
    --cc=kexec@lists.infradead.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=rdunlap@infradead.org \
    --cc=robh@kernel.org \
    --cc=tglx@linutronix.de \
    --cc=vgoyal@redhat.com \
    --cc=wangkefeng.wang@huawei.com \
    --cc=will@kernel.org \
    --cc=x86@kernel.org \
    --cc=zhoufeng.zf@bytedance.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).