hc
2024-11-01 2f529f9b558ca1c1bd74be7437a84e4711743404
kernel/include/linux/hardirq.h
....@@ -7,6 +7,7 @@
77 #include <linux/lockdep.h>
88 #include <linux/ftrace_irq.h>
99 #include <linux/vtime.h>
10
+#include <asm-generic/irq_pipeline.h>
1011 #include <asm/hardirq.h>
1112
1213 extern void synchronize_irq(unsigned int irq);
....@@ -122,6 +123,7 @@
122123
123124 #define nmi_enter() \
124125 do { \
126
+ irq_pipeline_nmi_enter(); \
125127 __nmi_enter(); \
126128 lockdep_hardirq_enter(); \
127129 rcu_nmi_enter(); \
....@@ -147,6 +149,22 @@
147149 rcu_nmi_exit(); \
148150 lockdep_hardirq_exit(); \
149151 __nmi_exit(); \
152
+ irq_pipeline_nmi_exit(); \
150153 } while (0)
151154
155
+static inline bool start_irq_flow(void)
156
+{
157
+ return !irqs_pipelined() || in_pipeline();
158
+}
159
+
160
+static inline bool on_pipeline_entry(void)
161
+{
162
+ return irqs_pipelined() && in_pipeline();
163
+}
164
+
165
+static inline bool in_hard_irq(void)
166
+{
167
+ return irqs_pipelined() ? in_pipeline() : in_irq();
168
+}
169
+
152170 #endif /* LINUX_HARDIRQ_H */