hc
2024-11-01 2f529f9b558ca1c1bd74be7437a84e4711743404
kernel/arch/arm/kernel/process.c
....@@ -71,6 +71,7 @@
7171 arm_pm_idle();
7272 else
7373 cpu_do_idle();
74
+ hard_cond_local_irq_enable();
7475 raw_local_irq_enable();
7576 }
7677
....@@ -448,3 +449,28 @@
448449 return ret;
449450 }
450451 #endif
452
+
453
+#ifdef CONFIG_IRQ_PIPELINE
454
+
455
+/*
456
+ * When pipelining interrupts, we have to reconcile the hardware and
457
+ * the virtual states. Hard irqs are off on entry while the current
458
+ * stage has to be unstalled: fix this up by stalling the in-band
459
+ * stage on entry, unstalling on exit.
460
+ */
461
+asmlinkage void __sched arm_preempt_schedule_irq(void)
462
+{
463
+ WARN_ON_ONCE(irq_pipeline_debug() && test_inband_stall());
464
+ stall_inband_nocheck();
465
+ preempt_schedule_irq();
466
+ unstall_inband_nocheck();
467
+}
468
+
469
+#else
470
+
471
+asmlinkage void __sched arm_preempt_schedule_irq(void)
472
+{
473
+ preempt_schedule_irq();
474
+}
475
+
476
+#endif