svn commit: r337374 - head/sys/compat/linuxkpi/common/include/asm
Mateusz Guzik
mjguzik at gmail.com
Mon Aug 6 09:33:34 UTC 2018
On Mon, Aug 6, 2018 at 10:40 AM Hans Petter Selasky <hselasky at freebsd.org>
wrote:
> Author: hselasky
> Date: Mon Aug 6 08:40:02 2018
> New Revision: 337374
> URL: https://svnweb.freebsd.org/changeset/base/337374
>
> Log:
> Implement atomic_long_cmpxchg() function in the LinuxKPI.
>
> Submitted by: Johannes Lundberg <johalun0 at gmail.com>
> MFC after: 1 week
> Sponsored by: Mellanox Technologies
>
> Modified:
> head/sys/compat/linuxkpi/common/include/asm/atomic-long.h
>
> Modified: head/sys/compat/linuxkpi/common/include/asm/atomic-long.h
>
> ==============================================================================
> --- head/sys/compat/linuxkpi/common/include/asm/atomic-long.h Mon Aug 6
> 08:35:16 2018 (r337373)
> +++ head/sys/compat/linuxkpi/common/include/asm/atomic-long.h Mon Aug 6
> 08:40:02 2018 (r337374)
> @@ -81,6 +81,21 @@ atomic_long_xchg(atomic_long_t *v, long val)
> return atomic_swap_long(&v->counter, val);
> }
>
> +static inline long
> +atomic_long_cmpxchg(atomic_long_t *v, long old, long new)
> +{
> + long ret = old;
> +
> + for (;;) {
> + if (atomic_cmpset_long(&v->counter, old, new))
> + break;
> + ret = READ_ONCE(v->counter);
> + if (ret != old)
> + break;
> + }
> + return (ret);
> +}
This code is seriously inferior to atomic_fcmpset_long, which happens to
return the found value just like the linux atomic_long_cmpxchg would.
The atomic_cmpset_* primitives should not be used if the target value is to
be inspected.
+
> static inline int
> atomic_long_add_unless(atomic_long_t *v, long a, long u)
> {
>
>
--
Mateusz Guzik <mjguzik gmail.com>
More information about the svn-src-all
mailing list