|
|
|
|
|
|
|
|
|
|
xen-devel
[SPAM] Re: [Xen-devel] A patch to xen/arch/x86/hvm/pmtimer.c for both Xe
>>> On 16.11.10 at 15:51, Song Xiang <classicxsong@xxxxxxxxx> wrote:
> We updated our patch as follows:
>
> Index: arch/x86/hvm/pmtimer.c
> ===================================================================
> --- arch/x86/hvm/pmtimer.c
> +++ arch/x86/hvm/pmtimer.c
> @@ -206,13 +206,23 @@
>
> if ( dir == IOREQ_READ )
> {
> - spin_lock(&s->lock);
> - pmt_update_time(s);
> - *val = s->pm.tmr_val;
> - spin_unlock(&s->lock);
> + uint32_t tmp;
> + /*
> + * if acquired the PMTState lock then update the time
> + * else other vcpu is updating it ,it should be up to date.
> + */
> + tmp = atomic_read(&s-> ownership);
> + if (spin_trylock(&s->lock)) {
> + pmt_update_time(s);
> + *val = s->pm.tmr_val;
> + spin_unlock(&s->lock);
> + atomic_inc(&s-> ownership);
> + }
> + else {
> + while (tmp == atomic_read(&s-> ownership));
> +
> + *val = s->pm.tmr_val;
> + }
> return X86EMUL_OKAY;
> }
>
> Index: include/asm-x86/hvm/vpt.h
> ===================================================================
> --- include/asm-x86/hvm/vpt.h
> +++ include/asm-x86/hvm/vpt.h
> @@ -120,6 +120,7 @@
> uint64_t scale; /* Multiplier to get from tsc to
> timer ticks */
> struct timer timer; /* To make sure we send SCIs */
> spinlock_t lock;
> + atomic_t ownership;
> } PMTState;
>
> struct pl_time { /* platform time */
>
>
> The key idea is, to keep the returned time fresh, any VCPU that fails
> to acquire the PMTState lock will wait until the PMTState lock holder
> updates the global virtual time, and then returns the freshest time.
>
> We add a field in PMTState, named ownership. The PMTState->ownership
> can only be updated by the PMTState lock holder.It is updated after
> the PMTState lock holder has updated the global virtual time and
> released the MTState lock. Other VCPUs that fail to acquire the
> PMTState lock will check whether the MTState->ownership is updated in
> a while loop. When the PMTState->ownership is changed, the global
> virtual time must be the freshest, and can be returned to the guest OS.
>
> The time returned to the guest in this patch is fresher than the
> previous one we have proposed.
That's not better: Depending on timing, the reader may well loop
until the *next* acquirer releases the lock (and increments
"ownership").
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|
|
|
|
|