hc
2023-11-06 e3e12f52b214121840b44c91de5b3e5af5d3eb84
kernel/kernel/irq/manage.c
....@@ -24,6 +24,7 @@
2424 #include "internals.h"
2525
2626 #ifdef CONFIG_IRQ_FORCED_THREADING
27
+# ifndef CONFIG_PREEMPT_RT_BASE
2728 __read_mostly bool force_irqthreads;
2829 EXPORT_SYMBOL_GPL(force_irqthreads);
2930
....@@ -33,6 +34,7 @@
3334 return 0;
3435 }
3536 early_param("threadirqs", setup_forced_irqthreads);
37
+# endif
3638 #endif
3739
3840 static void __synchronize_hardirq(struct irq_desc *desc, bool sync_chip)
....@@ -1095,6 +1097,12 @@
10951097 if (action_ret == IRQ_WAKE_THREAD)
10961098 irq_wake_secondary(desc, action);
10971099
1100
+#ifdef CONFIG_PREEMPT_RT_FULL
1101
+ migrate_disable();
1102
+ add_interrupt_randomness(action->irq, 0,
1103
+ desc->random_ip ^ (unsigned long) action);
1104
+ migrate_enable();
1105
+#endif
10981106 wake_threads_waitq(desc);
10991107 }
11001108
....@@ -1506,6 +1514,9 @@
15061514 irq_settings_set_no_balancing(desc);
15071515 irqd_set(&desc->irq_data, IRQD_NO_BALANCING);
15081516 }
1517
+
1518
+ if (new->flags & IRQF_NO_SOFTIRQ_CALL)
1519
+ irq_settings_set_no_softirq_call(desc);
15091520
15101521 if (irq_settings_can_autoenable(desc)) {
15111522 irq_startup(desc, IRQ_RESEND, IRQ_START_COND);
....@@ -2312,7 +2323,7 @@
23122323 * This call sets the internal irqchip state of an interrupt,
23132324 * depending on the value of @which.
23142325 *
2315
- * This function should be called with preemption disabled if the
2326
+ * This function should be called with migration disabled if the
23162327 * interrupt controller has per-cpu registers.
23172328 */
23182329 int irq_set_irqchip_state(unsigned int irq, enum irqchip_irq_state which,