summaryrefslogtreecommitdiffstats
path: root/Documentation/RCU/Design/Requirements
diff options
context:
space:
mode:
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>2018-06-22 15:22:20 +0200
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>2018-08-29 17:54:14 +0200
commite77cb32558a7bd0e996b7e203158a7fbf1a663fb (patch)
treed9cc8361ba906356c05fed445cdf73c7a5d9fc81 /Documentation/RCU/Design/Requirements
parentLinux 4.19-rc1 (diff)
downloadlinux-e77cb32558a7bd0e996b7e203158a7fbf1a663fb.tar.xz
linux-e77cb32558a7bd0e996b7e203158a7fbf1a663fb.zip
doc: Add design documentation on interruption of NMI handlers
Make Requirements.html talk about how NMI handlers can take what appear to RCU to be normal interrupts. Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Diffstat (limited to 'Documentation/RCU/Design/Requirements')
-rw-r--r--Documentation/RCU/Design/Requirements/Requirements.html11
1 files changed, 11 insertions, 0 deletions
diff --git a/Documentation/RCU/Design/Requirements/Requirements.html b/Documentation/RCU/Design/Requirements/Requirements.html
index 49690228b1c6..089a8e8faac1 100644
--- a/Documentation/RCU/Design/Requirements/Requirements.html
+++ b/Documentation/RCU/Design/Requirements/Requirements.html
@@ -2275,6 +2275,17 @@ he also kindly surprised me with
<a href="https://lkml.kernel.org/g/CALCETrXSY9JpW3uE6H8WYk81sg56qasA2aqmjMPsq5dOtzso=g@mail.gmail.com">an algorithm</a>
that meets this requirement.
+<p>
+Furthermore, NMI handlers can be interrupted by what appear to RCU
+to be normal interrupts.
+One way that this can happen is for code that directly invokes
+<tt>rcu_irq_enter()</tt> and </tt>rcu_irq_exit()</tt> to be called
+from an NMI handler.
+This astonishing fact of life prompted the current code structure,
+which has <tt>rcu_irq_enter()</tt> invoking <tt>rcu_nmi_enter()</tt>
+and <tt>rcu_irq_exit()</tt> invoking <tt>rcu_nmi_exit()</tt>.
+And yes, I also learned of this requirement the hard way.
+
<h3><a name="Loadable Modules">Loadable Modules</a></h3>
<p>