[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH V5 2/3] x86/mm: allocate logdirty_ranges for altp2ms
>>> On 14.11.18 at 13:50, <rcojocaru@xxxxxxxxxxxxxxx> wrote: > On 11/14/18 1:58 PM, George Dunlap wrote: >> On 11/13/18 6:43 PM, Razvan Cojocaru wrote: >>> On 11/13/18 7:57 PM, George Dunlap wrote: >>>> On 11/11/18 2:07 PM, Razvan Cojocaru wrote: >>>>> @@ -2341,6 +2380,7 @@ int p2m_destroy_altp2m_by_id(struct domain *d, >>>>> unsigned int idx) >>>>> { >>>>> p2m_flush_table(d->arch.altp2m_p2m[idx]); >>>>> /* Uninit and reinit ept to force TLB shootdown */ >>>>> + p2m_free_logdirty(d->arch.altp2m_p2m[idx]); >>>>> ept_p2m_uninit(d->arch.altp2m_p2m[idx]); >>>>> ept_p2m_init(d->arch.altp2m_p2m[idx]); >>>>> d->arch.altp2m_eptp[idx] = mfn_x(INVALID_MFN); >>>> >>>> (In case I forget: Also, this is called without holding the appropriate >>>> p2m lock. ) >>> >>> Could you please provide more details? I have assumed that at the point >>> of calling a function called p2m_destroy_altp2m_by_id() it should be >>> safe to tear the altp2m down without further precaution. >> >> Are you absolutely positive that at this point there's no way anywhere >> else in Xen might be doing something with this p2m struct? >> >> If so, then 1) there should be a comment there explaining why that's the >> case, and 2) ideally we should refactor p2m_flush_table such that we can >> call what's now p2m_flush_table_locked() without the lock. > > AFAICT the only place p2m_destroy_altp2m_by_id() is ever called is in > arch/x86/hvm/hvm.c's do_altp2m_op() (on HVMOP_altp2m_destroy_p2m), which > is done under domain lock. Is that insufficient? Holding the domain lock does not imply nothing can happen to the domain elsewhere. Only if both parties hold the _same_ lock there is a guarantee of serialization between both. >>>>> Is there any particular reason we allocate the p2m structures on domain >>>>> creation, but not logdirty range structures? It seems like allocating >>>>> altp2m structures on-demand, rather than at domain creation time, might >>>>> make a lot of the reasoning here simpler. >>>> >>>> I assume that this question is not addressed to me, since I'm not able >>>> to answer it - I can only assume that having less heap used has been >>>> preferred. >> >> I'm asking you because you've recently been going through this code, and >> probably have at least as much familiarity with it as I do. I can't >> immediately see any reason to allocate them at domain creation time. >> Maybe you can and maybe you can't, but I won't know until I ask. :-) > > I've looked at the code closer today, and there's no reason as far as I > can tell why we shouldn't allocate altp2ms on-demand. However, changing > the code is somewhat involved at this point, since there's a lot of: > > 2357 if ( d->arch.altp2m_eptp[idx] != mfn_x(INVALID_MFN) ) > 2358 { > 2359 p2m = d->arch.altp2m_p2m[idx]; > 2360 > 2361 if ( !_atomic_read(p2m->active_vcpus) ) > 2362 { > 2363 p2m_flush_table(d->arch.altp2m_p2m[idx]); > 2364 /* Uninit and reinit ept to force TLB shootdown */ > 2365 ept_p2m_uninit(d->arch.altp2m_p2m[idx]); > 2366 ept_p2m_init(d->arch.altp2m_p2m[idx]); > 2367 d->arch.altp2m_eptp[idx] = mfn_x(INVALID_MFN); > 2368 rc = 0; > 2369 } > 2370 } > > going on. That is, code checking that d->arch.altp2m_eptp[idx] != > mfn_x(INVALID_MFN), and then blindly assuming that p2m will not be NULL > and is usable. Wouldn't the implication of George's proposal be that d->arch.altp2m_eptp[] slots get demand-populated, too? Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |