[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH 07/22] x86/pv: domheap pages should be mapped while relocating initrd
On 16.12.2022 12:48, Julien Grall wrote: > From: Wei Liu <wei.liu2@xxxxxxxxxx> > > Xen shouldn't use domheap page as if they were xenheap pages. Map and > unmap pages accordingly. > > Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx> > Signed-off-by: Wei Wang <wawei@xxxxxxxxx> > Signed-off-by: Julien Grall <jgrall@xxxxxxxxxx> > > ---- > > Changes since Hongyan's version: > * Add missing newline after the variable declaration > --- > xen/arch/x86/pv/dom0_build.c | 18 ++++++++++++++++-- > 1 file changed, 16 insertions(+), 2 deletions(-) > > diff --git a/xen/arch/x86/pv/dom0_build.c b/xen/arch/x86/pv/dom0_build.c > index a62f0fa2ef29..c837b2d96f89 100644 > --- a/xen/arch/x86/pv/dom0_build.c > +++ b/xen/arch/x86/pv/dom0_build.c > @@ -611,18 +611,32 @@ int __init dom0_construct_pv(struct domain *d, > if ( d->arch.physaddr_bitsize && > ((mfn + count - 1) >> (d->arch.physaddr_bitsize - PAGE_SHIFT)) ) > { > + unsigned long nr_pages; > + unsigned long len = initrd_len; > + > order = get_order_from_pages(count); > page = alloc_domheap_pages(d, order, MEMF_no_scrub); > if ( !page ) > panic("Not enough RAM for domain 0 initrd\n"); > + > + nr_pages = 1UL << order; I don't think this needs establishing here and ... > for ( count = -count; order--; ) > if ( count & (1UL << order) ) > { > free_domheap_pages(page, order); > page += 1UL << order; > + nr_pages -= 1UL << order; ... updating here. Doing so just once ... > } > - memcpy(page_to_virt(page), mfn_to_virt(initrd->mod_start), > - initrd_len); > + ... here ought to suffice, assuming this 2nd variable is needed at all (alongside "len"). > + for ( i = 0; i < nr_pages; i++, len -= PAGE_SIZE ) > + { > + void *p = __map_domain_page(page + i); > + > + memcpy(p, mfn_to_virt(initrd_mfn + i), > + min(len, (unsigned long)PAGE_SIZE)); > + unmap_domain_page(p); > + } You're half open-coding copy_domain_page() without saying anywhere why the remaining mfn_to_virt() is okay to keep. If you used copy_domain_page(), no such remark would need adding in the description. Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |