hc
2024-11-01 2f529f9b558ca1c1bd74be7437a84e4711743404
kernel/arch/arm/kernel/entry-header.S
....@@ -203,15 +203,21 @@
203203 .macro svc_exit, rpsr, irq = 0
204204 .if \irq != 0
205205 @ IRQs already off
206
-#ifdef CONFIG_TRACE_IRQFLAGS
207206 @ The parent context IRQs must have been enabled to get here in
208207 @ the first place, so there's no point checking the PSR I bit.
208
+#ifdef CONFIG_IRQ_PIPELINE
209
+ mov r0, sp
210
+ bl kentry_exit_pipelined
211
+#elif defined(CONFIG_TRACE_IRQFLAGS)
209212 bl trace_hardirqs_on
210213 #endif
211214 .else
212215 @ IRQs off again before pulling preserved data off the stack
213216 disable_irq_notrace
214
-#ifdef CONFIG_TRACE_IRQFLAGS
217
+#ifdef CONFIG_IRQ_PIPELINE
218
+ mov r0, sp
219
+ bl kentry_exit_pipelined
220
+#elif defined(CONFIG_TRACE_IRQFLAGS)
215221 tst \rpsr, #PSR_I_BIT
216222 bleq trace_hardirqs_on
217223 tst \rpsr, #PSR_I_BIT
....@@ -402,6 +408,19 @@
402408 .endm
403409
404410 /*
411
+ * Branch to the exception epilogue, skipping the in-band work
412
+ * if running over the out-of-band interrupt stage.
413
+ */
414
+ .macro ret_to_user_pipelined, tmp
415
+#ifdef CONFIG_IRQ_PIPELINE
416
+ ldr \tmp, [tsk, #TI_LOCAL_FLAGS]
417
+ tst \tmp, #_TLF_OOB
418
+ bne fast_ret_to_user
419
+#endif
420
+ b ret_to_user
421
+ .endm
422
+
423
+/*
405424 * These are the registers used in the syscall handler, and allow us to
406425 * have in theory up to 7 arguments to a function - r0 to r6.
407426 *