[PATCH v2 1/2] xen/riscv: initialize bootinfo from dtb

Oleksii Kurochko posted 2 patches 1 month, 1 week ago
[PATCH v2 1/2] xen/riscv: initialize bootinfo from dtb
Posted by Oleksii Kurochko 1 month, 1 week ago
Parse DTB during startup, allowing memory banks and reserved
memory regions to be set up, along with early device tree node
( chosen, "xen,domain", "reserved-memory", etc  ) handling.

Signed-off-by: Oleksii Kurochko <oleksii.kurochko@gmail.com>
---
Changes in V2:
 - Drop local variable fdt_size as it is going to be used only once.
---
 xen/arch/riscv/setup.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/xen/arch/riscv/setup.c b/xen/arch/riscv/setup.c
index f531ca38ee..a345dbafeb 100644
--- a/xen/arch/riscv/setup.c
+++ b/xen/arch/riscv/setup.c
@@ -50,6 +50,8 @@ void __init noreturn start_xen(unsigned long bootcpu_id,
                           _end - _start, false) )
         panic("Failed to add BOOTMOD_XEN\n");
 
+    BUG_ON(!boot_fdt_info(device_tree_flattened, dtb_addr));
+
     printk("All set up\n");
 
     machine_halt();
-- 
2.46.2
Re: [PATCH v2 1/2] xen/riscv: initialize bootinfo from dtb
Posted by Jan Beulich 1 month, 1 week ago
On 10.10.2024 17:30, Oleksii Kurochko wrote:
> --- a/xen/arch/riscv/setup.c
> +++ b/xen/arch/riscv/setup.c
> @@ -50,6 +50,8 @@ void __init noreturn start_xen(unsigned long bootcpu_id,
>                            _end - _start, false) )
>          panic("Failed to add BOOTMOD_XEN\n");
>  
> +    BUG_ON(!boot_fdt_info(device_tree_flattened, dtb_addr));

We generally aim at avoiding side effects in BUG_ON() (or ASSERT()). With

    if (!boot_fdt_info(device_tree_flattened, dtb_addr))
        BUG();

Acked-by: Jan Beulich <jbeulich@suse.com>

I can make the adjustment while committing, if desired.

Jan
Re: [PATCH v2 1/2] xen/riscv: initialize bootinfo from dtb
Posted by oleksii.kurochko@gmail.com 1 month, 1 week ago
On Tue, 2024-10-15 at 08:33 +0200, Jan Beulich wrote:
> On 10.10.2024 17:30, Oleksii Kurochko wrote:
> > --- a/xen/arch/riscv/setup.c
> > +++ b/xen/arch/riscv/setup.c
> > @@ -50,6 +50,8 @@ void __init noreturn start_xen(unsigned long
> > bootcpu_id,
> >                            _end - _start, false) )
> >          panic("Failed to add BOOTMOD_XEN\n");
> >  
> > +    BUG_ON(!boot_fdt_info(device_tree_flattened, dtb_addr));
> 
> We generally aim at avoiding side effects in BUG_ON() (or ASSERT()).
> With
> 
>     if (!boot_fdt_info(device_tree_flattened, dtb_addr))
>         BUG();
> 
> Acked-by: Jan Beulich <jbeulich@suse.com>
> 
> I can make the adjustment while committing, if desired.
It would be great if these changes could be made during the commit.

Thanks.

~ Oleksii
Re: [PATCH v2 1/2] xen/riscv: initialize bootinfo from dtb
Posted by Jan Beulich 1 month, 1 week ago
On 15.10.2024 11:11, oleksii.kurochko@gmail.com wrote:
> On Tue, 2024-10-15 at 08:33 +0200, Jan Beulich wrote:
>> On 10.10.2024 17:30, Oleksii Kurochko wrote:
>>> --- a/xen/arch/riscv/setup.c
>>> +++ b/xen/arch/riscv/setup.c
>>> @@ -50,6 +50,8 @@ void __init noreturn start_xen(unsigned long
>>> bootcpu_id,
>>>                            _end - _start, false) )
>>>          panic("Failed to add BOOTMOD_XEN\n");
>>>  
>>> +    BUG_ON(!boot_fdt_info(device_tree_flattened, dtb_addr));
>>
>> We generally aim at avoiding side effects in BUG_ON() (or ASSERT()).
>> With
>>
>>     if (!boot_fdt_info(device_tree_flattened, dtb_addr))
>>         BUG();
>>
>> Acked-by: Jan Beulich <jbeulich@suse.com>
>>
>> I can make the adjustment while committing, if desired.
> It would be great if these changes could be made during the commit.

I've committed it with the adjustment, yet once again I wondered: Why not
panic()?

Jan

Re: [PATCH v2 1/2] xen/riscv: initialize bootinfo from dtb
Posted by oleksii.kurochko@gmail.com 1 month ago
On Tue, 2024-10-15 at 14:32 +0200, Jan Beulich wrote:
> On 15.10.2024 11:11, oleksii.kurochko@gmail.com wrote:
> > On Tue, 2024-10-15 at 08:33 +0200, Jan Beulich wrote:
> > > On 10.10.2024 17:30, Oleksii Kurochko wrote:
> > > > --- a/xen/arch/riscv/setup.c
> > > > +++ b/xen/arch/riscv/setup.c
> > > > @@ -50,6 +50,8 @@ void __init noreturn start_xen(unsigned long
> > > > bootcpu_id,
> > > >                            _end - _start, false) )
> > > >          panic("Failed to add BOOTMOD_XEN\n");
> > > >  
> > > > +    BUG_ON(!boot_fdt_info(device_tree_flattened, dtb_addr));
> > > 
> > > We generally aim at avoiding side effects in BUG_ON() (or
> > > ASSERT()).
> > > With
> > > 
> > >     if (!boot_fdt_info(device_tree_flattened, dtb_addr))
> > >         BUG();
> > > 
> > > Acked-by: Jan Beulich <jbeulich@suse.com>
> > > 
> > > I can make the adjustment while committing, if desired.
> > It would be great if these changes could be made during the commit.
> 
> I've committed it with the adjustment, 
Thanks!

> yet once again I wondered: Why not
> panic()?
It could be panic() here; there's no specific reason. I agree that
using BUG() here isn't logically correct, as technically, a size of
zero for the FDT isn't a bug but rather indicates that someone provided
an incorrect FDT to Xen.

I will use panic() in the future for such cases.

It’s not always clear what should be used and where. Perhaps it would
be helpful to add some explanation somewhere.

~ Oleksii
Re: [PATCH v2 1/2] xen/riscv: initialize bootinfo from dtb
Posted by Andrew Cooper 1 month ago
On 16/10/2024 8:50 am, oleksii.kurochko@gmail.com wrote:
> On Tue, 2024-10-15 at 14:32 +0200, Jan Beulich wrote:
>> On 15.10.2024 11:11, oleksii.kurochko@gmail.com wrote:
>>> On Tue, 2024-10-15 at 08:33 +0200, Jan Beulich wrote:
>>>> On 10.10.2024 17:30, Oleksii Kurochko wrote:
>>>>> --- a/xen/arch/riscv/setup.c
>>>>> +++ b/xen/arch/riscv/setup.c
>>>>> @@ -50,6 +50,8 @@ void __init noreturn start_xen(unsigned long
>>>>> bootcpu_id,
>>>>>                            _end - _start, false) )
>>>>>          panic("Failed to add BOOTMOD_XEN\n");
>>>>>  
>>>>> +    BUG_ON(!boot_fdt_info(device_tree_flattened, dtb_addr));
>>>> We generally aim at avoiding side effects in BUG_ON() (or
>>>> ASSERT()).
>>>> With
>>>>
>>>>     if (!boot_fdt_info(device_tree_flattened, dtb_addr))
>>>>         BUG();
>>>>
>>>> Acked-by: Jan Beulich <jbeulich@suse.com>
>>>>
>>>> I can make the adjustment while committing, if desired.
>>> It would be great if these changes could be made during the commit.
>> I've committed it with the adjustment, 
> Thanks!
>
>> yet once again I wondered: Why not
>> panic()?
> It could be panic() here; there's no specific reason. I agree that
> using BUG() here isn't logically correct, as technically, a size of
> zero for the FDT isn't a bug but rather indicates that someone provided
> an incorrect FDT to Xen.
>
> I will use panic() in the future for such cases.
>
> It’s not always clear what should be used and where. Perhaps it would
> be helpful to add some explanation somewhere.

panic() gets you a single line diagnostic.  BUG() gets you a backtrace,
but no diagnostic information at all.

BUG() should be a last resort, because it requires someone to go digging
in the source code to even figure out what went wrong.  panic() (with a
good diagnostic message, e.g. "unexpected $foo in device tree") is far
more meaningful.

There are ways of getting a backtrace in combination with a panic(), if
the situation warrants it.

~Andrew

Re: [PATCH v2 1/2] xen/riscv: initialize bootinfo from dtb
Posted by Jan Beulich 1 month ago
On 16.10.2024 09:50, oleksii.kurochko@gmail.com wrote:
> On Tue, 2024-10-15 at 14:32 +0200, Jan Beulich wrote:
>> On 15.10.2024 11:11, oleksii.kurochko@gmail.com wrote:
>>> On Tue, 2024-10-15 at 08:33 +0200, Jan Beulich wrote:
>>>> On 10.10.2024 17:30, Oleksii Kurochko wrote:
>>>>> --- a/xen/arch/riscv/setup.c
>>>>> +++ b/xen/arch/riscv/setup.c
>>>>> @@ -50,6 +50,8 @@ void __init noreturn start_xen(unsigned long
>>>>> bootcpu_id,
>>>>>                            _end - _start, false) )
>>>>>          panic("Failed to add BOOTMOD_XEN\n");
>>>>>  
>>>>> +    BUG_ON(!boot_fdt_info(device_tree_flattened, dtb_addr));
>>>>
>>>> We generally aim at avoiding side effects in BUG_ON() (or
>>>> ASSERT()).
>>>> With
>>>>
>>>>     if (!boot_fdt_info(device_tree_flattened, dtb_addr))
>>>>         BUG();
>>>>
>>>> Acked-by: Jan Beulich <jbeulich@suse.com>
>>>>
>>>> I can make the adjustment while committing, if desired.
>>> It would be great if these changes could be made during the commit.
>>
>> I've committed it with the adjustment, 
> Thanks!
> 
>> yet once again I wondered: Why not
>> panic()?
> It could be panic() here; there's no specific reason. I agree that
> using BUG() here isn't logically correct, as technically, a size of
> zero for the FDT isn't a bug but rather indicates that someone provided
> an incorrect FDT to Xen.
> 
> I will use panic() in the future for such cases.
> 
> It’s not always clear what should be used and where. Perhaps it would
> be helpful to add some explanation somewhere.

My rule of thumb: During init and when the call stack / register state
aren't relevant to understand the details of the issue, use panic().

Jan