[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] RE: [PATCH v1 05/13] xen/arm: allocate shared memory from heap when host address not provided
> -----Original Message----- > From: Julien Grall <julien@xxxxxxx> > Sent: Sunday, January 8, 2023 8:23 PM > To: Penny Zheng <Penny.Zheng@xxxxxxx>; xen-devel@xxxxxxxxxxxxxxxxxxxx > Cc: Wei Chen <Wei.Chen@xxxxxxx>; Stefano Stabellini > <sstabellini@xxxxxxxxxx>; Bertrand Marquis <Bertrand.Marquis@xxxxxxx>; > Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx> > Subject: Re: [PATCH v1 05/13] xen/arm: allocate shared memory from heap > when host address not provided > > Hi Penny, > Hi Julien, > On 15/11/2022 02:52, Penny Zheng wrote: > > when host address is not provided in "xen,shared-mem", we let Xen > > allocate requested shared memory from heap, and once the shared > memory > > is allocated, it will be marked as static(PGC_static), which means > > that it will be reserved as static memory, and will not go back to heap even > on freeing. > > Please don't move pages from the {xen,dom}heap to the static heap. If you > need to keep the pages for longer, then get an extra reference so they will > not be released. > > > > > Signed-off-by: Penny Zheng <penny.zheng@xxxxxxx> > > --- > > xen/arch/arm/domain_build.c | 83 > ++++++++++++++++++++++++++++++++++++- > > 1 file changed, 82 insertions(+), 1 deletion(-) > > > > +static int __init allocate_shared_memory(struct shm_membank > *shm_membank, > > + paddr_t psize) { > > + struct meminfo *banks; > > + int ret; > > + > > + BUG_ON(shm_membank->mem.banks.meminfo != NULL); > > + > > + banks = xmalloc_bytes(sizeof(struct meminfo)); > > Where is this freed? > These kinds of info will be only used in boot-time, so maybe I shall free them in init_done()? Or just after process_shm() ? > > + if ( banks == NULL ) > > + return -ENOMEM; > > + shm_membank->mem.banks.meminfo = banks; > > + memset(shm_membank->mem.banks.meminfo, 0, sizeof(struct > > + meminfo)); > > + > > + if ( !allocate_domheap_memory(NULL, psize, shm_membank- > >mem.banks.meminfo) ) > > + return -EINVAL; > > + > > + ret = mark_shared_memory_static(shm_membank); > > + if ( ret ) > > + return ret; > > + > > + return 0; > > +} > > + > > static mfn_t __init acquire_shared_memory_bank(struct domain *d, > > paddr_t pbase, paddr_t > > psize) > > { > > @@ -975,7 +1041,7 @@ static int __init process_shm(struct domain *d, > struct kernel_info *kinfo, > > unsigned int i; > > const char *role_str; > > const char *shm_id; > > - bool owner_dom_io = true; > > + bool owner_dom_io = true, paddr_assigned = true; > > struct shm_membank *shm_membank; > > > > if ( !dt_device_is_compatible(shm_node, > > "xen,domain-shared-memory-v1") ) @@ -1035,6 +1101,21 @@ static int > __init process_shm(struct domain *d, struct kernel_info *kinfo, > > return -ENOENT; > > } > > > > + /* > > + * When host address is not provided in "xen,shared-mem", > > + * we let Xen allocate requested memory from heap at first domain. > > + */ > > + if ( !paddr_assigned && !shm_membank->mem.banks.meminfo ) > > + { > > + ret = allocate_shared_memory(shm_membank, psize); > > + if ( ret ) > > + { > > + printk("%pd: failed to allocate shared memory > bank(%"PRIpaddr"MB) from heap: %d\n", > > + d, psize >> 20, ret); > > + return ret; > > + } > > + } > > + > > /* > > * DOMID_IO is a fake domain and is not described in the > > Device-Tree. > > * Therefore when the owner of the shared region is > > DOMID_IO, we will > > Cheers, > > -- > Julien Grall Cheers, -- Penny Zheng
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |