[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2] xen/grant-table: Simplify the update to the per-vCPU maptrack freelist
On 08.06.2021 12:08, Julien Grall wrote: > From: Julien Grall <jgrall@xxxxxxxxxx> > > Since XSA-228 (commit 02cbeeb62075 "gnttab: split maptrack lock > to make it fulfill its purpose again"), v->maptrack_head, > v->maptrack_tail and the content of the freelist are accessed with > the lock v->maptrack_freelist_lock held. > > Therefore it is not necessary to update the fields using cmpxchg() > and also read them atomically. > > Note that there are two cases where v->maptrack_tail is accessed without > the lock. They both happen in get_maptrack_handle() when initializing > the free list of the current vCPU. Therefore there is no possible race. > > The code is now reworked to remove any use of cmpxch() and read_atomic() > when accessing the fields v->maptrack_{head, tail} as wel as the > freelist. > > Take the opportunity to add a comment on top of the lock definition > and explain what it protects. > > Signed-off-by: Julien Grall <jgrall@xxxxxxxxxx> Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> with one nit: > --- a/xen/include/xen/sched.h > +++ b/xen/include/xen/sched.h > @@ -255,7 +255,13 @@ struct vcpu > /* VCPU paused by system controller. */ > int controller_pause_count; > > - /* Grant table map tracking. */ > + /* > + * Grant table map tracking. The lock maptrack_freelist_lock > + * protects to: I don't think you want "to" here. Jan > + * - The entries in the freelist > + * - maptrack_head > + * - maptrack_tail > + */ > spinlock_t maptrack_freelist_lock; > unsigned int maptrack_head; > unsigned int maptrack_tail; >
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |