[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 15/30] xen/x86: populate PVHv2 Dom0 physical memory map
>>> On 11.10.16 at 16:01, <roger.pau@xxxxxxxxxx> wrote: > On Tue, Oct 04, 2016 at 05:16:09AM -0600, Jan Beulich wrote: >> >>> On 04.10.16 at 11:12, <roger.pau@xxxxxxxxxx> wrote: >> > On Fri, Sep 30, 2016 at 09:52:56AM -0600, Jan Beulich wrote: >> >> >>> On 27.09.16 at 17:57, <roger.pau@xxxxxxxxxx> wrote: >> >> > @@ -336,7 +343,8 @@ static unsigned long __init compute_dom0_nr_pages( >> >> > avail -= dom0_paging_pages(d, nr_pages); >> >> > } >> >> > >> >> > - if ( (parms->p2m_base == UNSET_ADDR) && (dom0_nrpages <= 0) && >> >> > + if ( is_pv_domain(d) && >> >> > + (parms->p2m_base == UNSET_ADDR) && (dom0_nrpages <= 0) && >> >> >> >> Perhaps better to simply force parms->p2m_base to UNSET_ADDR >> >> earlier on? >> > >> > p2m_base is already unconditionally set to UNSET_ADDR for PVHv2 domains, >> > hence the added is_pv_domain check in order to make sure that PVHv2 guests >> > don't get into that branch, which AFAICT is only relevant to PV guests. >> >> This reads contradictory: If it's set to UNSET_ADDR, why the extra >> check? > > On PVHv2 p2m_base == UNSET_ADDR already, so the extra check is to make sure > PVHv2 guests don't execute the code inside of the if condition, which is > for classic PV guests (note that the check is not against != UNSET_ADDR). Or > maybe I'm missing something? No, I have to apologize - I read things the wrong way round. Thanks for bearing with me. >> >> > @@ -1657,15 +1679,238 @@ out: >> >> > return rc; >> >> > } >> >> > >> >> > +/* Populate an HVM memory range using the biggest possible order. */ >> >> > +static void __init hvm_populate_memory_range(struct domain *d, >> >> > uint64_t start, >> >> > + uint64_t size) >> >> > +{ >> >> > + static unsigned int __initdata memflags = >> >> > MEMF_no_dma|MEMF_exact_node; >> >> > + unsigned int order; >> >> > + struct page_info *page; >> >> > + int rc; >> >> > + >> >> > + ASSERT(IS_ALIGNED(size, PAGE_SIZE) && IS_ALIGNED(start, >> >> > PAGE_SIZE)); >> >> > + >> >> > + order = MAX_ORDER; >> >> > + while ( size != 0 ) >> >> > + { >> >> > + order = min(get_order_from_bytes_floor(size), order); >> >> > + page = alloc_domheap_pages(d, order, memflags); >> >> > + if ( page == NULL ) >> >> > + { >> >> > + if ( order == 0 && memflags ) >> >> > + { >> >> > + /* Try again without any memflags. */ >> >> > + memflags = 0; >> >> > + order = MAX_ORDER; >> >> > + continue; >> >> > + } >> >> > + if ( order == 0 ) >> >> > + panic("Unable to allocate memory with order 0!\n"); >> >> > + order--; >> >> > + continue; >> >> > + } >> >> >> >> Is it not possible to utilize alloc_chunk() here? >> > >> > Not really, alloc_chunk will do a ceil calculation of the number of needed >> > pages, which means we end up allocating bigger chunks than needed and then >> > free them. I prefer this approach, since we always request the exact >> > memory >> > that's required, so there's no need to free leftover pages. >> >> Hmm, in that case at least some of the shared logic would be nice to >> get abstracted out. > > TBH, I don't see much benefit in that, alloc_chunk works fine for PV guests > because Xen ends up walking the list of returned pages and mapping them one > to one. This is IMHO not what should be done for PVH guests, and instead the > caller needs to know the actual order of the allocated chunk, so it can pass > it to guest_physmap_add_page. ATM it's a very simple function that's clear, > if I start mixing up bits of alloc_chunk it's going to get more complex, and > I would like to avoid that, so that PVH Dom0 build doesn't end up like > current PV Dom0 build. Hmm - I did say "abstract out", not "re-use". The way how memflags get set and decreasing orders get tried in your code looks suspiciously similar to what alloc_chunk() does. >> > In the RFC series we also spoke about placing the MADT in a different >> > position that the native one, which would mean that we would end up >> > stealing >> > some space from a RAM region in order to place it, so that we wouldn't >> > have >> > to do this accounting. >> >> Putting the new MADT at the same address as the old one won't work >> anyway, again because possibly vCPU-s > pCPU-s. > > Yes, although from my tests doing CPU over-allocation on HVM guests works > very badly. Interesting. I didn't try recently, but I recall having tried a longer while ago without seeing severe issues. Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |