2023-06-30 12:07:28

by Song Shuai

[permalink] [raw]
Subject: [PATCH V2] riscv: Add BUG_ON() for no cpu nodes in devicetree

When only the ACPI tables are passed to kernel, the tiny devictree created
by EFI Stub doesn't provide cpu nodes.

While if append the "acpi=off" to kernel cmdline to disable ACPI for kernel
the BUG_ON() in of_parse_and_init_cpus() indicates there's no boot cpu
found in the devicetree, not there're no cpu nodes in the devicetree.

Add BUG_ON() in the first place of of_parse_and_init_cpus() to make it clear.

Signed-off-by: Song Shuai <[email protected]>
---
Changes since V1:
https://lore.kernel.org/linux-riscv/[email protected]/
- revise the commit-msg and move the BUG_ON into of_parse_and_init_cpus() as Conor suggests

---
arch/riscv/kernel/smpboot.c | 2 ++
1 file changed, 2 insertions(+)

diff --git a/arch/riscv/kernel/smpboot.c b/arch/riscv/kernel/smpboot.c
index 6ca2b5309aab..04d33afbdf55 100644
--- a/arch/riscv/kernel/smpboot.c
+++ b/arch/riscv/kernel/smpboot.c
@@ -147,6 +147,8 @@ static void __init of_parse_and_init_cpus(void)
int cpuid = 1;
int rc;

+ BUG_ON(!of_get_next_cpu_node(NULL));
+
cpu_set_ops(0);

for_each_of_cpu_node(dn) {
--
2.20.1



2023-06-30 18:47:48

by Conor Dooley

[permalink] [raw]
Subject: Re: [PATCH V2] riscv: Add BUG_ON() for no cpu nodes in devicetree

On Fri, Jun 30, 2023 at 06:59:38PM +0800, Song Shuai wrote:
> When only the ACPI tables are passed to kernel, the tiny devictree created
> by EFI Stub doesn't provide cpu nodes.
>
> While if append the "acpi=off" to kernel cmdline to disable ACPI for kernel
> the BUG_ON() in of_parse_and_init_cpus() indicates there's no boot cpu
> found in the devicetree, not there're no cpu nodes in the devicetree.
>
> Add BUG_ON() in the first place of of_parse_and_init_cpus() to make it clear.
>
> Signed-off-by: Song Shuai <[email protected]>

I'm still not really convinced that this is needed - not finding the
boot CPU is a strong a hint as any that your DT is completely broken.
Especially if you intentionally go out of your way to disable ACPI on a
system that requires it to boot.

I'll leave it up to Palmer or whoever to determine whether this is a
valuable change. Code change itself much improved though, thanks - I'd
give an R-b/A-b other than that I question whether there's any value in
adding another BUG_ON(). You could've kept the part of the comment that
explained what the error meant though, but that's not a big deal.

Thanks,
Conor.

> ---
> Changes since V1:
> https://lore.kernel.org/linux-riscv/[email protected]/
> - revise the commit-msg and move the BUG_ON into of_parse_and_init_cpus() as Conor suggests
>
> ---
> arch/riscv/kernel/smpboot.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/arch/riscv/kernel/smpboot.c b/arch/riscv/kernel/smpboot.c
> index 6ca2b5309aab..04d33afbdf55 100644
> --- a/arch/riscv/kernel/smpboot.c
> +++ b/arch/riscv/kernel/smpboot.c
> @@ -147,6 +147,8 @@ static void __init of_parse_and_init_cpus(void)
> int cpuid = 1;
> int rc;
>
> + BUG_ON(!of_get_next_cpu_node(NULL));
> +
> cpu_set_ops(0);
>
> for_each_of_cpu_node(dn) {
> --
> 2.20.1
>
>
> _______________________________________________
> linux-riscv mailing list
> [email protected]
> http://lists.infradead.org/mailman/listinfo/linux-riscv


Attachments:
(No filename) (2.04 kB)
signature.asc (235.00 B)
Download all attachments

2023-07-11 23:40:33

by Palmer Dabbelt

[permalink] [raw]
Subject: Re: [PATCH V2] riscv: Add BUG_ON() for no cpu nodes in devicetree

On Fri, 30 Jun 2023 11:39:24 PDT (-0700), Conor Dooley wrote:
> On Fri, Jun 30, 2023 at 06:59:38PM +0800, Song Shuai wrote:
>> When only the ACPI tables are passed to kernel, the tiny devictree created
>> by EFI Stub doesn't provide cpu nodes.
>>
>> While if append the "acpi=off" to kernel cmdline to disable ACPI for kernel
>> the BUG_ON() in of_parse_and_init_cpus() indicates there's no boot cpu
>> found in the devicetree, not there're no cpu nodes in the devicetree.
>>
>> Add BUG_ON() in the first place of of_parse_and_init_cpus() to make it clear.
>>
>> Signed-off-by: Song Shuai <[email protected]>
>
> I'm still not really convinced that this is needed - not finding the
> boot CPU is a strong a hint as any that your DT is completely broken.
> Especially if you intentionally go out of your way to disable ACPI on a
> system that requires it to boot.
>
> I'll leave it up to Palmer or whoever to determine whether this is a
> valuable change. Code change itself much improved though, thanks - I'd
> give an R-b/A-b other than that I question whether there's any value in
> adding another BUG_ON(). You could've kept the part of the comment that
> explained what the error meant though, but that's not a big deal.

IIUC this is just reduntant: if the BUG_ON triggers then there's no
CPUs, so we'll end up with no iterations of the loop and thus no found
CPU and thus a BUG_ON. The only difference is the SBI probing, but
that's just poking SBI to turn off spinwait.

So I think we already crash sufficiently on systems with an empty DT.
Sorry if I'm missing something, though?

> Thanks,
> Conor.
>
>> ---
>> Changes since V1:
>> https://lore.kernel.org/linux-riscv/[email protected]/
>> - revise the commit-msg and move the BUG_ON into of_parse_and_init_cpus() as Conor suggests
>>
>> ---
>> arch/riscv/kernel/smpboot.c | 2 ++
>> 1 file changed, 2 insertions(+)
>>
>> diff --git a/arch/riscv/kernel/smpboot.c b/arch/riscv/kernel/smpboot.c
>> index 6ca2b5309aab..04d33afbdf55 100644
>> --- a/arch/riscv/kernel/smpboot.c
>> +++ b/arch/riscv/kernel/smpboot.c
>> @@ -147,6 +147,8 @@ static void __init of_parse_and_init_cpus(void)
>> int cpuid = 1;
>> int rc;
>>
>> + BUG_ON(!of_get_next_cpu_node(NULL));
>> +
>> cpu_set_ops(0);
>>
>> for_each_of_cpu_node(dn) {
>> --
>> 2.20.1
>>
>>
>> _______________________________________________
>> linux-riscv mailing list
>> [email protected]
>> http://lists.infradead.org/mailman/listinfo/linux-riscv