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
>>
>>
>
> .
>
next prev parent 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).