[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v3 6/6] xen/arm: add reserved-memory regions to the dom0 memory node



On Wed, 10 Jul 2019, Julien Grall wrote:
> Hi Stefano,
> 
> On 6/22/19 12:56 AM, Stefano Stabellini wrote:
> > Reserved memory regions are automatically remapped to dom0. Their device
> > tree nodes are also added to dom0 device tree. However, the dom0 memory
> > node is not currently extended to cover the reserved memory regions
> > ranges as required by the spec.  This commit fixes it.
> > 
> > Signed-off-by: Stefano Stabellini <stefanos@xxxxxxxxxx>
> > ---
> >   xen/arch/arm/domain_build.c | 17 ++++++++++++++++-
> >   1 file changed, 16 insertions(+), 1 deletion(-)
> > 
> > diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c
> > index 76dd4bf6f9..5047eb4c28 100644
> > --- a/xen/arch/arm/domain_build.c
> > +++ b/xen/arch/arm/domain_build.c
> > @@ -643,7 +643,8 @@ static int __init make_memory_node(const struct domain
> > *d,
> >   {
> >       int res, i;
> >       int reg_size = addrcells + sizecells;
> > -    int nr_cells = reg_size*kinfo->mem.nr_banks;
> > +    int nr_cells = reg_size * (kinfo->mem.nr_banks + (is_hardware_domain(d)
> > ?
> > +                               bootinfo.reserved_mem.nr_banks : 0));
> 
> A device-tree is allowed to have multiple memory node. So I would actually
> prefer if we create a new node for the reserved-memory regions.
> 
> You could replace the last parameter with struct meminfo *. Note that you
> would need to specify a unit in the node-name.

Yes, makes sense, good suggestion.


> >       __be32 reg[NR_MEM_BANKS * 4 /* Worst case addrcells + sizecells */];
> >
> Note that you will overrun reg here if the two arrays (reserved_mem and mem)
> are full.

Won't be a problem anymore after making the suggested changes.


> >       __be32 *cells;
> >   @@ -673,6 +674,20 @@ static int __init make_memory_node(const struct
> > domain *d,
> >           dt_child_set_range(&cells, addrcells, sizecells, start, size);
> >       }
> >   +    if ( is_hardware_domain(d) )
> > +    {
> > +        for ( i = 0; i < bootinfo.reserved_mem.nr_banks; i++ )
> > +        {
> > +            u64 start = bootinfo.reserved_mem.bank[i].start;
> > +            u64 size = bootinfo.reserved_mem.bank[i].size;
> > +
> > +            dt_dprintk("  Bank %d: %#"PRIx64"->%#"PRIx64"\n",
> > +                    i, start, start + size);
> > +
> > +            dt_child_set_range(&cells, addrcells, sizecells, start, size);
> > +        }
> > +    }
> > +
> >       res = fdt_property(fdt, "reg", reg, nr_cells * sizeof(*reg));
> >       if ( res )
> >           return res;
> > 
> 
> Cheers,
> 
> -- 
> Julien Grall
> 

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.