On Wed, Nov 11, 2015 at 07:44:27PM +0100, Peter Zijlstra wrote: > On Wed, Nov 11, 2015 at 07:31:28PM +0100, Peter Zijlstra wrote: > > > Add new one that does 'fetch_and_add' ? What is the real use case it > > > will be used for? > > > > Look at all the atomic_{add,dec}_return*() users in the kernel. A typical > > example would be a reader-writer lock implementations. See > > include/asm-generic/rwsem.h for examples. > > Maybe a better example would be refcounting, where you free on 0. > > if (!fetch_add(&obj->ref, -1)) > free(obj);
Urgh, too used to the atomic_add_return(), which returns post op. That wants to be: if (fetch_add(&obj->ref, -1) == 1) free(obj); Note that I would very much recommend _against_ encoding the post-op thing in instructions. It works for reversible operations (like add) but is pointless for irreversible operations (like or). That is, given or_return(), you cannot reconstruct the state prior to the operation, so or_return() provides less information than fetch_or(). -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/