On 10/11/19 2:23 AM, Dmitry Safonov wrote: > From: Andrei Vagin <avagin@xxxxxxxxx> > > Place the branch with no concurrent write before contended case. > > Performance numbers for Intel(R) Core(TM) i5-6300U CPU @ 2.40GHz > (more clock_gettime() cycles - the better): > | before | after > ----------------------------------- > | 150252214 | 153242367 > | 150301112 | 153324800 > | 150392773 | 153125401 > | 150373957 | 153399355 > | 150303157 | 153489417 > | 150365237 | 153494270 > ----------------------------------- > avg | 150331408 | 153345935 > diff % | 2 | 0 > ----------------------------------- > stdev % | 0.3 | 0.1 > > Signed-off-by: Andrei Vagin <avagin@xxxxxxxxx> > Co-developed-by: Dmitry Safonov <dima@xxxxxxxxxx> > Signed-off-by: Dmitry Safonov <dima@xxxxxxxxxx> Reviewed-by: Vincenzo Frascino <vincenzo.frascino@xxxxxxx> Tested-by: Vincenzo Frascino <vincenzo.frascino@xxxxxxx> > --- > include/vdso/helpers.h | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/include/vdso/helpers.h b/include/vdso/helpers.h > index 01641dbb68ef..9a2af9fca45e 100644 > --- a/include/vdso/helpers.h > +++ b/include/vdso/helpers.h > @@ -10,7 +10,7 @@ static __always_inline u32 vdso_read_begin(const struct vdso_data *vd) > { > u32 seq; > > - while ((seq = READ_ONCE(vd->seq)) & 1) > + while (unlikely((seq = READ_ONCE(vd->seq)) & 1)) > cpu_relax(); > > smp_rmb(); > -- Regards, Vincenzo