hc
2024-05-10 37f49e37ab4cb5d0bc4c60eb5c6d4dd57db767bb
kernel/include/linux/preempt.h
....@@ -26,13 +26,13 @@
2626 * PREEMPT_MASK: 0x000000ff
2727 * SOFTIRQ_MASK: 0x0000ff00
2828 * HARDIRQ_MASK: 0x000f0000
29
- * NMI_MASK: 0x00100000
29
+ * NMI_MASK: 0x00f00000
3030 * PREEMPT_NEED_RESCHED: 0x80000000
3131 */
3232 #define PREEMPT_BITS 8
3333 #define SOFTIRQ_BITS 8
3434 #define HARDIRQ_BITS 4
35
-#define NMI_BITS 1
35
+#define NMI_BITS 4
3636
3737 #define PREEMPT_SHIFT 0
3838 #define SOFTIRQ_SHIFT (PREEMPT_SHIFT + PREEMPT_BITS)
....@@ -52,9 +52,6 @@
5252 #define NMI_OFFSET (1UL << NMI_SHIFT)
5353
5454 #define SOFTIRQ_DISABLE_OFFSET (2 * SOFTIRQ_OFFSET)
55
-
56
-/* We use the MSB mostly because its available */
57
-#define PREEMPT_NEED_RESCHED 0x80000000
5855
5956 #define PREEMPT_DISABLED (PREEMPT_DISABLE_OFFSET + PREEMPT_ENABLED)
6057
....@@ -185,7 +182,7 @@
185182
186183 #define preemptible() (preempt_count() == 0 && !irqs_disabled())
187184
188
-#ifdef CONFIG_PREEMPT
185
+#ifdef CONFIG_PREEMPTION
189186 #define preempt_enable() \
190187 do { \
191188 barrier(); \
....@@ -206,7 +203,7 @@
206203 __preempt_schedule(); \
207204 } while (0)
208205
209
-#else /* !CONFIG_PREEMPT */
206
+#else /* !CONFIG_PREEMPTION */
210207 #define preempt_enable() \
211208 do { \
212209 barrier(); \
....@@ -220,7 +217,7 @@
220217 } while (0)
221218
222219 #define preempt_check_resched() do { } while (0)
223
-#endif /* CONFIG_PREEMPT */
220
+#endif /* CONFIG_PREEMPTION */
224221
225222 #define preempt_disable_notrace() \
226223 do { \
....@@ -325,4 +322,34 @@
325322
326323 #endif
327324
325
+/**
326
+ * migrate_disable - Prevent migration of the current task
327
+ *
328
+ * Maps to preempt_disable() which also disables preemption. Use
329
+ * migrate_disable() to annotate that the intent is to prevent migration,
330
+ * but not necessarily preemption.
331
+ *
332
+ * Can be invoked nested like preempt_disable() and needs the corresponding
333
+ * number of migrate_enable() invocations.
334
+ */
335
+static __always_inline void migrate_disable(void)
336
+{
337
+ preempt_disable();
338
+}
339
+
340
+/**
341
+ * migrate_enable - Allow migration of the current task
342
+ *
343
+ * Counterpart to migrate_disable().
344
+ *
345
+ * As migrate_disable() can be invoked nested, only the outermost invocation
346
+ * reenables migration.
347
+ *
348
+ * Currently mapped to preempt_enable().
349
+ */
350
+static __always_inline void migrate_enable(void)
351
+{
352
+ preempt_enable();
353
+}
354
+
328355 #endif /* __LINUX_PREEMPT_H */