[PATCH] lockref: stop doing cpu_relax in the cmpxchg loop

Luck, Tony tony.luck at intel.com
Sat Jan 14 08:47:50 AEDT 2023


> diff --git a/lib/lockref.c b/lib/lockref.c
> index 45e93ece8ba0..2afe4c5d8919 100644
> --- a/lib/lockref.c
> +++ b/lib/lockref.c
> @@ -23,7 +23,6 @@
>               }                                                               \
>               if (!--retry)                                                   \
>                       break;                                                  \
> -             cpu_relax();                                                    \
>       }                                                                       \
>  } while (0)

The computer necrophiliacs at Debian and Gentoo seem determined
to keep ia64 alive.

So perhaps this should s/cpu_relax/soemt_relax/ where soemt_relax
is a no-op everywhere except ia64, which can define it as cpu_relax.

The ia64 case is quite painful if one thread on a core is spinning in that
loop, while the other thread on the same core is the one that needs to
run to update that value so that the cmpxchg can succeed.

-Tony


More information about the Linuxppc-dev mailing list