lkml.org 
[lkml]   [2019]   [May]   [31]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH v3 06/13] epoll: introduce helpers for adding/removing events to uring
On Thu, May 16, 2019 at 10:58:03AM +0200, Roman Penyaev wrote:
> +#define atomic_set_unless_zero(ptr, flags) \
> +({ \
> + typeof(ptr) _ptr = (ptr); \
> + typeof(flags) _flags = (flags); \
> + typeof(*_ptr) _old, _val = READ_ONCE(*_ptr); \
> + \
> + for (;;) { \
> + if (!_val) \
> + break; \
> + _old = cmpxchg(_ptr, _val, _flags); \
> + if (_old == _val) \
> + break; \
> + _val = _old; \
> + } \
> + _val; \
> +})

> +#define atomic_or_with_mask(ptr, flags, mask) \
> +({ \
> + typeof(ptr) _ptr = (ptr); \
> + typeof(flags) _flags = (flags); \
> + typeof(flags) _mask = (mask); \
> + typeof(*_ptr) _old, _new, _val = READ_ONCE(*_ptr); \
> + \
> + for (;;) { \
> + _new = (_val & ~_mask) | _flags; \
> + _old = cmpxchg(_ptr, _val, _new); \
> + if (_old == _val) \
> + break; \
> + _val = _old; \
> + } \
> + _val; \
> +})

Don't call them atomic_*() if they're not part of the atomic_t
interface.

\
 
 \ /
  Last update: 2019-05-31 11:57    [W:0.242 / U:26.224 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site