summaryrefslogtreecommitdiff
path: root/Documentation/static-keys.txt
diff options
context:
space:
mode:
authorMarc Zyngier <marc.zyngier@arm.com>2017-08-01 09:02:56 +0100
committerIngo Molnar <mingo@kernel.org>2017-08-10 12:28:59 +0200
commit5a40527f8f0798553764fc8db4111d7d9c33ea51 (patch)
tree8147a2345202a3e7d5b1d3b14ca1c804d660f300 /Documentation/static-keys.txt
parent8b7b412807053ab5f059ffae426a280e769a5bda (diff)
downloadlwn-5a40527f8f0798553764fc8db4111d7d9c33ea51.tar.gz
lwn-5a40527f8f0798553764fc8db4111d7d9c33ea51.zip
jump_label: Provide hotplug context variants
As using the normal static key API under the hotplug lock is pretty much impossible, let's provide a variant of some of them that require the hotplug lock to have already been taken. These function are only meant to be used in CPU hotplug callbacks. Signed-off-by: Marc Zyngier <marc.zyngier@arm.com> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Cc: Leo Yan <leo.yan@linaro.org> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: linux-arm-kernel@lists.infradead.org Link: http://lkml.kernel.org/r/20170801080257.5056-4-marc.zyngier@arm.com Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'Documentation/static-keys.txt')
-rw-r--r--Documentation/static-keys.txt15
1 files changed, 15 insertions, 0 deletions
diff --git a/Documentation/static-keys.txt b/Documentation/static-keys.txt
index 870b4be3cb11..ab16efe0c79d 100644
--- a/Documentation/static-keys.txt
+++ b/Documentation/static-keys.txt
@@ -154,6 +154,21 @@ and 'static_key_count()'. In general, if you use these functions, they
should be protected with the same mutex used around the enable/disable
or increment/decrement function.
+Note that switching branches results in some locks being taken,
+particularly the CPU hotplug lock (in order to avoid races against
+CPUs being brought in the kernel whilst the kernel is getting
+patched). Calling the static key API from within a hotplug notifier is
+thus a sure deadlock recipe. In order to still allow use of the
+functionnality, the following functions are provided:
+
+ static_key_enable_cpuslocked()
+ static_key_disable_cpuslocked()
+ static_branch_enable_cpuslocked()
+ static_branch_disable_cpuslocked()
+
+These functions are *not* general purpose, and must only be used when
+you really know that you're in the above context, and no other.
+
Where an array of keys is required, it can be defined as::
DEFINE_STATIC_KEY_ARRAY_TRUE(keys, count);