Files
linux/include/linux
Jason A. Donenfeld 56e3d1cd05 kref: prefer atomic_inc_not_zero to atomic_add_unless
On most platforms, there exists this ifdef:

 #define atomic_inc_not_zero(v) atomic_add_unless((v), 1, 0)

This makes this patch functionally useless. However, on PPC, there is
actually an explicit definition of atomic_inc_not_zero with its own
assembly that is slightly more optimized than atomic_add_unless. So,
this patch changes kref to use atomic_inc_not_zero instead, for PPC and
any future platforms that might provide an explicit implementation.

This also puts this usage of kref more in line with a verbatim reading
of the examples in Paul McKenney's paper [1] in the section titled "2.4
Atomic Counting With Check and Release Memory Barrier", which uses
atomic_inc_not_zero.

[1] http://open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2167.pdf

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Reviewed-by: Thomas Hellstrom <thellstrom@vmware.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Link: http://patchwork.freedesktop.org/patch/msgid/20161215050110.3241-1-Jason@zx2c4.com
2016-12-16 08:33:40 +01:00
..
2016-07-08 16:23:11 +02:00
2016-11-11 23:23:02 +01:00
2016-08-25 11:26:48 -04:00
2016-09-14 09:18:06 -06:00
2016-06-07 13:41:38 -06:00
2016-09-29 01:35:35 -04:00
2016-08-11 09:41:35 -06:00
2016-09-27 21:20:53 -04:00
2016-08-02 19:35:24 -04:00
2016-10-07 18:46:30 -07:00
2016-06-07 13:41:38 -06:00
2016-05-17 15:48:12 -04:00
2016-10-30 13:09:42 -04:00
2016-09-16 12:44:20 +02:00
2016-07-22 09:07:02 +02:00
2016-09-24 10:48:18 +02:00
2016-10-20 15:51:28 +11:00
2016-09-16 09:34:15 +01:00
2016-09-14 09:18:09 -06:00
2016-09-20 23:20:32 +02:00
2016-05-11 22:37:54 +02:00
2016-08-10 11:23:44 -04:00
2016-09-15 16:49:39 +02:00
2016-09-14 12:57:43 -07:00
2016-09-27 12:33:47 +02:00
2016-10-24 19:13:20 -07:00
2016-08-04 10:16:55 +09:30
2016-07-29 12:17:52 -07:00
2016-08-28 23:32:41 -04:00
2016-06-03 19:37:21 -04:00
2016-10-19 11:36:22 -06:00
2016-05-02 09:00:56 -05:00
2016-11-23 16:23:23 -06:00
2016-10-14 11:36:59 -07:00
2016-07-12 19:25:38 -07:00
2016-09-27 21:52:00 -04:00
2016-09-08 15:01:10 -07:00
2016-09-08 15:01:10 -07:00
2016-07-06 10:51:14 +01:00
2016-09-20 04:43:36 -04:00
2016-07-26 16:19:19 -07:00
2016-09-08 22:15:25 -07:00
2016-06-14 10:54:40 -07:00
2016-09-06 18:30:20 +02:00
2016-08-28 23:44:55 -04:00
2016-05-08 23:46:14 -04:00
2016-10-05 18:23:36 -04:00
2016-10-07 18:46:27 -07:00
2016-09-21 00:23:00 -04:00
2016-06-20 12:47:15 -07:00
2016-07-19 17:43:38 +03:00
2016-05-23 17:04:14 -07:00
2016-07-26 16:19:19 -07:00
2016-05-20 17:58:30 -07:00
2016-06-25 09:04:48 -07:00
2016-09-30 10:54:03 +02:00