[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] RE: [PATCH 09/10] xen/arm: parse `xen,static-mem` info during domain construction
Hi Julien > -----Original Message----- > From: Julien Grall <julien@xxxxxxx> > Sent: Tuesday, May 18, 2021 8:09 PM > To: Penny Zheng <Penny.Zheng@xxxxxxx>; xen-devel@xxxxxxxxxxxxxxxxxxxx; > sstabellini@xxxxxxxxxx > Cc: Bertrand Marquis <Bertrand.Marquis@xxxxxxx>; Wei Chen > <Wei.Chen@xxxxxxx>; nd <nd@xxxxxxx> > Subject: Re: [PATCH 09/10] xen/arm: parse `xen,static-mem` info during > domain construction > > Hi Penny, > > On 18/05/2021 06:21, Penny Zheng wrote: > > This commit parses `xen,static-mem` device tree property, to acquire > > static memory info reserved for this domain, when constructing domain > > during boot-up. > > > > Related info shall be stored in new static_mem value under per domain > > struct arch_domain. > > So far, this seems to only be used during boot. So can't this be kept in the > kinfo structure? > Sure, I'll store it in kinfo > > > > Right now, the implementation of allocate_static_memory is missing, > > and will be introduced later. It just BUG() out at the moment. > > > > Signed-off-by: Penny Zheng <penny.zheng@xxxxxxx> > > --- > > xen/arch/arm/domain_build.c | 58 > ++++++++++++++++++++++++++++++++---- > > xen/include/asm-arm/domain.h | 3 ++ > > 2 files changed, 56 insertions(+), 5 deletions(-) > > > > diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c > > index 282416e74d..30b55588b7 100644 > > --- a/xen/arch/arm/domain_build.c > > +++ b/xen/arch/arm/domain_build.c > > @@ -2424,17 +2424,61 @@ static int __init construct_domU(struct domain > *d, > > { > > struct kernel_info kinfo = {}; > > int rc; > > - u64 mem; > > + u64 mem, static_mem_size = 0; > > + const struct dt_property *prop; > > + u32 static_mem_len; > > + bool static_mem = false; > > + > > + /* > > + * Guest RAM could be of static memory from static allocation, > > + * which will be specified through "xen,static-mem" property. > > + */ > > + prop = dt_find_property(node, "xen,static-mem", &static_mem_len); > > + if ( prop ) > > + { > > + const __be32 *cell; > > + u32 addr_cells = 2, size_cells = 2, reg_cells; > > + u64 start, size; > > + int i, banks; > > + static_mem = true; > > + > > + dt_property_read_u32(node, "#address-cells", &addr_cells); > > + dt_property_read_u32(node, "#size-cells", &size_cells); > > + BUG_ON(size_cells > 2 || addr_cells > 2); > > + reg_cells = addr_cells + size_cells; > > + > > + cell = (const __be32 *)prop->value; > > + banks = static_mem_len / (reg_cells * sizeof (u32)); > > + BUG_ON(banks > NR_MEM_BANKS); > > + > > + for ( i = 0; i < banks; i++ ) > > + { > > + device_tree_get_reg(&cell, addr_cells, size_cells, &start, > > &size); > > + d->arch.static_mem.bank[i].start = start; > > + d->arch.static_mem.bank[i].size = size; > > + static_mem_size += size; > > + > > + printk(XENLOG_INFO > > + "Static Memory Bank[%d] for Domain %pd:" > > + "0x%"PRIx64"-0x%"PRIx64"\n", > > + i, d, > > + d->arch.static_mem.bank[i].start, > > + d->arch.static_mem.bank[i].start + > > + d->arch.static_mem.bank[i].size); > > + } > > + d->arch.static_mem.nr_banks = banks; > > + } > > Could we allocate the memory as we parse? > Ok. I'll try. > > > > rc = dt_property_read_u64(node, "memory", &mem); > > - if ( !rc ) > > + if ( !static_mem && !rc ) > > { > > printk("Error building DomU: cannot read \"memory\" property\n"); > > return -EINVAL; > > } > > - kinfo.unassigned_mem = (paddr_t)mem * SZ_1K; > > + kinfo.unassigned_mem = static_mem ? static_mem_size : > > + (paddr_t)mem * SZ_1K; > > > > - printk("*** LOADING DOMU cpus=%u memory=%"PRIx64"KB ***\n", d- > >max_vcpus, mem); > > + printk("*** LOADING DOMU cpus=%u memory=%"PRIx64"KB ***\n", > > + d->max_vcpus, (kinfo.unassigned_mem) >> 10); > > > > kinfo.vpl011 = dt_property_read_bool(node, "vpl011"); > > > > @@ -2452,7 +2496,11 @@ static int __init construct_domU(struct domain > *d, > > /* type must be set before allocate memory */ > > d->arch.type = kinfo.type; > > #endif > > - allocate_memory(d, &kinfo); > > + if ( static_mem ) > > + /* allocate_static_memory(d, &kinfo); */ > > + BUG(); > > + else > > + allocate_memory(d, &kinfo); > > > > rc = prepare_dtb_domU(d, &kinfo); > > if ( rc < 0 ) > > diff --git a/xen/include/asm-arm/domain.h > > b/xen/include/asm-arm/domain.h index c9277b5c6d..81b8eb453c 100644 > > --- a/xen/include/asm-arm/domain.h > > +++ b/xen/include/asm-arm/domain.h > > @@ -10,6 +10,7 @@ > > #include <asm/gic.h> > > #include <asm/vgic.h> > > #include <asm/vpl011.h> > > +#include <asm/setup.h> > > #include <public/hvm/params.h> > > > > struct hvm_domain > > @@ -89,6 +90,8 @@ struct arch_domain > > #ifdef CONFIG_TEE > > void *tee; > > #endif > > + > > + struct meminfo static_mem; > > } __cacheline_aligned; > > > > struct arch_vcpu > > > > Cheers, > > -- > Julien Grall Cheers Penny
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |