[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] x86/hvm/pmtimer: improving scalability of virtual time update on Xen 4.0.0
At 21:39 +0000 on 17 Nov (1290029945), Song Xiang wrote: > diff --git a/xen/arch/x86/hvm/pmtimer.c b/xen/arch/x86/hvm/pmtimer.c > index 48fe26a..587944f 100644 > --- a/xen/arch/x86/hvm/pmtimer.c > +++ b/xen/arch/x86/hvm/pmtimer.c > @@ -90,7 +90,7 @@ static void pmt_update_time(PMTState *s) > > /* Update the timer */ > curr_gtime = hvm_get_guest_time(s->vcpu); > - s->pm.tmr_val += ((curr_gtime - s->last_gtime) * s->scale) >> 32; > + *(volatile uint32_t *)&s->pm.tmr_val = s->pm.tmr_val + (((curr_gtime - > s->last_gtime) * s->scale) >> 32); > s->pm.tmr_val &= TMR_VAL_MASK; > s->last_gtime = curr_gtime; That doesn't make it an atomic update! The variable is still written to twice. :) You need to calculate the new tmr_val in a scratch variable, and then write it back once at the end of the function. (And no 'volatile' wll be necessary). Cheers, Tim. > @@ -206,10 +206,19 @@ static int handle_pmt_io( > > if ( dir == IOREQ_READ ) > { > - spin_lock(&s->lock); > - pmt_update_time(s); > - *val = s->pm.tmr_val; > - spin_unlock(&s->lock); > + /* > + * if acquired the PMTState lock then update the time > + * else other vcpu is updating it ,it should be up to date. > + */ > + if (spin_trylock(&s->lock)) { > + pmt_update_time(s); > + *val = s->pm.tmr_val; > + spin_unlock(&s->lock); > + } > + else { > + spin_barrier(&s->lock); > + *val = s->pm.tmr_val; > + } > return X86EMUL_OKAY; > } > > _______________________________________________ > Xen-devel mailing list > Xen-devel@xxxxxxxxxxxxxxxxxxx > http://lists.xensource.com/xen-devel -- Tim Deegan <Tim.Deegan@xxxxxxxxxx> Principal Software Engineer, Xen Platform Team Citrix Systems UK Ltd. (Company #02937203, SL9 0BG) _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |