[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] RE: [Xen-ia64-devel][PATCH] Enable SMP on VTI domain.
See comments >From: Isaku Yamahata [mailto:yamahata@xxxxxxxxxxxxx] >Sent: 2006?6?29? 16:03 >To: Xu, Anthony >Cc: xen-ia64-devel@xxxxxxxxxxxxxxxxxxx >Subject: Re: [Xen-ia64-devel][PATCH] Enable SMP on VTI domain. > >Hi Anthony. > >On Thu, Jun 29, 2006 at 02:21:48PM +0800, Xu, Anthony wrote: >> >From: Isaku Yamahata [mailto:yamahata@xxxxxxxxxxxxx] >> >Sent: 2006?6?21? 17:25 >> >To: Xu, Anthony >> >Cc: xen-ia64-devel@xxxxxxxxxxxxxxxxxxx >> >Subject: Re: [Xen-ia64-devel][PATCH] Enable SMP on VTI domain. >> > >> > >> >On Thu, Jun 01, 2006 at 12:55:08PM +0800, Xu, Anthony wrote: >> > >> >> >> Or you mean the protection of global purge. >> >> >> When a vcpu get IPI to purge TLB, >> >> >> What it does is to invalid the TLB entry in VHPT, >> >> >> but not remove the TLB entry. >> >> >> There is no race condition. >> >> > >> >> >Is there any gurantee that the vcpu which recives IPI isn't touching >> >> >VHPT? >> >> >> >> The vcpu which receives IPI can touch VHPT in the same time. >> >> Because purge operation only sets the TLB entry invalid, like entry->ti=1. >> >> That has the same philosophy with Tristan's direct purge >> > >> >Could you review the two attached patches? >> >Purge function traverses the collision chain when IPI is sent. >> >But there is a window when the assumption of the collision chain >> >is broken. >> >vmx_hpw_miss() has a race. ia64_do_page_fault() had a similar race before. >> > >> >-- >> >> Sorry for late response. >> >> The second patch is good cleanup and improvement. > >The second patch is also a bug fix patch. > > >> I don't understand the race condition the first patch fixes. >> >> Could you please elaborate this? > >The patch fixes two races. >- a race in vmx_process() of vmx_process.c > The same race was there in ia64_do_page_fault() before. > The check, (fault == IA64_USE_TLB && !current->arch.dtlb.pte.p), in > ia64_do_page_fault() avoids this race. VTI-domain doesn't have this issue, which is introduced by 1-entry TLB > >- a race in vtlb.c > vmx_vcpu_ptc_l() needs a certain condition on the collision chain > to traverse collision chains and purge entries correctly. > But there are windows when the condision is broken. > The critical areas are surrounded by local_irq_save() and local_irq_restore() > with the patch. > If a vcpu send a IPI to another vcpu for ptc.ga when another vcpu is > in the critical area, things goes bad. > There seems be some race conditions. But I had used correct operation sequence on VTLB to avoid these race conditions. local_irq_save() and local_irq_restore() are not needed, some mb may be needed to guarantee the memory access order. > > Actually the patch assumes that the targeted vcpu is still > on the physical cpu which received IPI. > It might be reasonable to assume so before credit scheduler was > introduced... I don't assume the targeted vcpu is running on the physical cpu. > > If the targeted vcpu moved to another physical cpu, > the collision chain is traversed on the IPI'ed physical cpu and > the collision chain is modified on the physical cpu on which the > targeted vcpu runs at the same time. > The collision chain modification/traverse code doesn't seem to > be lock-free. Something bad would happen. > > >In fact I suspect that there still remains a problem. >I haven't checked the generated assembler code and I'm not sure though. >- vmx_vcpu_ptc_ga() > while (proc != v->processor); > > v->processor's type is int. > However v->processor might be changed asynchronously by vcpu scheduler > on another physical cpu. > Compiler barrier and memory barrier might be needed somewhere. > I didn't think of vcpu being scheduled to other LP by far. >-- >yamahata _______________________________________________ Xen-ia64-devel mailing list Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-ia64-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |