Files
android_kernel_xiaomi_sm8450/include/linux
Jason Baron d430d3d7e6 jump label: Introduce static_branch() interface
Introduce:

static __always_inline bool static_branch(struct jump_label_key *key);

instead of the old JUMP_LABEL(key, label) macro.

In this way, jump labels become really easy to use:

Define:

        struct jump_label_key jump_key;

Can be used as:

        if (static_branch(&jump_key))
                do unlikely code

enable/disale via:

        jump_label_inc(&jump_key);
        jump_label_dec(&jump_key);

that's it!

For the jump labels disabled case, the static_branch() becomes an
atomic_read(), and jump_label_inc()/dec() are simply atomic_inc(),
atomic_dec() operations. We show testing results for this change below.

Thanks to H. Peter Anvin for suggesting the 'static_branch()' construct.

Since we now require a 'struct jump_label_key *key', we can store a pointer into
the jump table addresses. In this way, we can enable/disable jump labels, in
basically constant time. This change allows us to completely remove the previous
hashtable scheme. Thanks to Peter Zijlstra for this re-write.

Testing:

I ran a series of 'tbench 20' runs 5 times (with reboots) for 3
configurations, where tracepoints were disabled.

jump label configured in
avg: 815.6

jump label *not* configured in (using atomic reads)
avg: 800.1

jump label *not* configured in (regular reads)
avg: 803.4

Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
LKML-Reference: <20110316212947.GA8792@redhat.com>
Signed-off-by: Jason Baron <jbaron@redhat.com>
Suggested-by: H. Peter Anvin <hpa@linux.intel.com>
Tested-by: David Daney <ddaney@caviumnetworks.com>
Acked-by: Ralf Baechle <ralf@linux-mips.org>
Acked-by: David S. Miller <davem@davemloft.net>
Acked-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
2011-04-04 12:48:08 -04:00
..
2011-03-23 10:42:00 +01:00
2011-03-18 23:38:50 -07:00
2011-03-28 08:47:17 +02:00
2011-03-25 01:24:57 +09:00
2011-03-01 22:24:19 +03:00
2010-08-12 06:38:24 +10:00
2011-02-24 19:58:42 +01:00
2010-10-15 21:18:59 +02:00
2011-01-20 18:30:17 -08:00
2010-11-23 20:14:46 +00:00
2011-01-31 14:03:00 -08:00
2011-01-15 20:07:45 -05:00
2011-03-10 08:52:07 +01:00
2011-03-22 17:43:59 -07:00
2011-03-11 14:25:50 +00:00
2011-01-13 08:03:12 -08:00
2011-03-10 08:52:27 +01:00
2011-03-10 08:52:07 +01:00
2010-12-16 17:53:38 +01:00
2011-02-16 13:30:48 +01:00
2011-02-16 13:30:48 +01:00
2010-10-25 08:02:40 -07:00
2011-03-22 17:44:15 -07:00
2011-01-10 08:51:44 -08:00
2011-03-10 11:35:17 +01:00
2010-10-21 14:47:59 +02:00
2011-03-23 19:46:17 -07:00
2011-01-12 20:16:43 -05:00
2011-03-14 19:12:20 -04:00
2010-08-19 17:18:03 -07:00
2010-12-08 10:30:34 -08:00
2011-01-10 08:51:44 -08:00
2011-01-07 17:50:27 +11:00
2011-01-07 17:50:23 +11:00
2010-12-07 20:16:56 +01:00
2011-03-22 17:44:05 -07:00
2010-10-25 14:11:37 -07:00
2011-03-05 10:56:00 +01:00
2010-10-12 16:53:37 +02:00
2010-08-11 09:23:22 +02:00
2011-02-23 00:53:26 +00:00
2011-03-20 14:50:53 +01:00
2010-11-16 10:58:30 -08:00
2010-09-21 18:04:47 -07:00
2011-02-27 16:11:51 -08:00
2010-08-19 17:16:23 -07:00
2011-03-28 06:05:21 -04:00
2010-10-26 16:52:08 -07:00
2010-08-09 20:45:05 -07:00
2010-11-24 11:16:42 -08:00
2011-03-28 20:13:57 +02:00
2010-10-07 14:08:55 +01:00
2010-08-10 11:49:21 -07:00
2010-12-09 20:17:07 -08:00
2010-08-12 11:27:58 +02:00
2011-03-22 04:53:54 -03:00
2011-02-17 11:12:40 -08:00
2010-10-22 15:34:12 -05:00
2011-01-13 17:32:31 -08:00
2011-01-13 17:32:47 -08:00
2011-02-13 16:54:24 -08:00
2011-01-24 14:45:11 +10:30
2010-09-09 18:57:24 -07:00
2011-03-22 17:43:59 -07:00
2011-01-14 13:12:45 +00:00
2010-12-06 11:03:46 -08:00
2011-01-13 17:32:46 -08:00
2011-02-15 10:24:31 +01:00
2011-01-16 13:47:07 -05:00
2010-10-12 16:53:34 +02:00
2011-03-23 15:29:04 -04:00
2010-08-19 17:18:02 -07:00
2011-03-22 04:53:46 -03:00
2011-01-16 13:47:07 -05:00
2010-10-24 15:07:11 -07:00
2010-08-21 23:40:14 -07:00
2011-03-11 15:13:26 -05:00
2010-12-10 15:06:43 +01:00
2011-01-13 08:03:21 -08:00
2010-10-29 04:16:31 -04:00
2011-01-14 02:36:43 +00:00
2010-09-08 18:16:55 -07:00
2010-08-09 16:47:27 -04:00
2010-11-15 13:24:06 -05:00
2011-01-13 08:03:18 -08:00
2011-03-23 19:46:43 -07:00
2011-03-22 17:44:03 -07:00
2010-10-30 12:12:50 +02:00
2011-01-07 17:50:27 +11:00
2011-01-13 08:03:19 -08:00
2011-03-23 07:48:42 -07:00
2010-10-07 14:08:55 +01:00
2010-08-09 16:48:44 -04:00
2010-08-30 13:23:33 -07:00
2011-02-28 18:00:31 -08:00
2011-02-21 12:53:08 -08:00
2011-02-02 15:28:18 +01:00
2010-09-09 20:41:20 +02:00
2010-11-29 08:55:25 +11:00
2010-11-29 08:55:22 +11:00
2010-12-20 09:37:33 +01:00
2011-01-24 14:45:11 +10:30
2011-03-22 17:44:05 -07:00
2010-11-15 13:25:02 -05:00
2011-01-13 08:03:24 -08:00