|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] RE: [PATCH 1/3] xen/arm: Add memory overlap check for bootinfo.reserved_mem
On Sat, 10 Dec 2022, Henry Wang wrote:
> Hi both,
>
> I was lurking around to see how the discussion would go. Thanks for the
> discussions/inputs in this thread :)
>
> > -----Original Message-----
> > From: Stefano Stabellini <sstabellini@xxxxxxxxxx>
> > Subject: Re: [PATCH 1/3] xen/arm: Add memory overlap check for
> > bootinfo.reserved_mem
> > > > It cannot be a single static inline function because the bootinfo
> > > > arguments are of three different types, it just happens that all three
> > > > have a "start" and "size" struct member so it works great with a macro,
> > > > but doesn't for a function.
> > >
> > > It is not clear to me what are the three types you are referring to.
> > > Looking
> > > at the definition of bootinfo is:
> > >
> > > struct bootinfo {
> > > struct meminfo mem;
> > > /* The reserved regions are only used when booting using Device-Tree
> > > */
> > > struct meminfo reserved_mem;
> > > struct bootmodules modules;
> > > struct bootcmdlines cmdlines;
> > > #ifdef CONFIG_ACPI
> > > struct meminfo acpi;
> > > #endif
> > > bool static_heap;
> > > };
> > >
> > > cmdlines is something uninteresting here. So we have two types:
> > > - bootmodules for modules
> > > - meminfo used by reserved_mem, mem and acpi
>
> Exactly, we need to check the given input physical address range is
> not overlapping with any of the banks in bootmodules and meminfo used by
> reserved_mem & acpi.
>
> > >
> > > Looking in details the code, now I understand why you suggested the
> > macro.
> > > This is far better than the checking what the array type (not very
> > > scalable).
> >
> > Thank you :-)
>
> +1, I also thought this would be quite painful to extend in the future (once
> we
> add a new member in bootinfo, for example what Penny did in [1], we need to
> extend the overlap check as well), but I didn't think of using macro so thank
> you
> Stefano :)
>
> >
> >
> > > Personally, I think trying to share the code between the two types is a
> > > bit
> > > odd. The logic is the same today, but I envision to merge reserved_mem,
> > mem
> > > and acpi in a single array (it would look like the E820) as this would
> > > make
> > > easier to find the caching attributes per regions when mapping the RAM. So
> > > sharing the code would not be possible.
> > >
> > > That said, if you really want to share the code between the two types.
> > > Then
> > I
> > > would prefer one of the following option:
> > > 1) Provide a callback that is used to fetch the information from the
> > > array
> > > 2) Provide a common structure that could be used by the function.
> > >
> > > This would match other generic function like sort & co.
> >
> > I think option 2) would be the best but I couldn't think of a simple way
> > to do it (without using a union and I thought a union would not make
> > things nicer in this case).
> >
> > Rather than option 1), I think I would rather have 2 different functions
> > to check struct bootmodules and struct meminfo, or the macro.
>
> I personally don't have specific taste here. I think the option
> is good one as long as we can (1) share most part of the code (2) make the
> code easy to extend in the future. So as long as you two reach
> a consensus here I will change to the agreed method in v2.
I think Julien and I already agree on having 2 separate functions to
check for struct bootmodules and struct meminfo. Julien, I take you
prefer the two separate functions to a MACRO, right?
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |