patch-5.15.79-rt54.patch
[platform/kernel/linux-rpi.git] / kernel / entry / common.c
index d5a61d5..a553fed 100644 (file)
@@ -124,7 +124,7 @@ static __always_inline void __exit_to_user_mode(void)
 {
        instrumentation_begin();
        trace_hardirqs_on_prepare();
-       lockdep_hardirqs_on_prepare(CALLER_ADDR0);
+       lockdep_hardirqs_on_prepare();
        instrumentation_end();
 
        user_enter_irqoff();
@@ -159,9 +159,17 @@ static unsigned long exit_to_user_mode_loop(struct pt_regs *regs,
 
                local_irq_enable_exit_to_user(ti_work);
 
-               if (ti_work & _TIF_NEED_RESCHED)
+               if (ti_work & _TIF_NEED_RESCHED_MASK)
                        schedule();
 
+#ifdef ARCH_RT_DELAYS_SIGNAL_SEND
+               if (unlikely(current->forced_info.si_signo)) {
+                       struct task_struct *t = current;
+                       force_sig_info(&t->forced_info);
+                       t->forced_info.si_signo = 0;
+               }
+#endif
+
                if (ti_work & _TIF_UPROBE)
                        uprobe_notify_resume(regs);
 
@@ -387,7 +395,7 @@ void irqentry_exit_cond_resched(void)
                rcu_irq_exit_check_preempt();
                if (IS_ENABLED(CONFIG_DEBUG_ENTRY))
                        WARN_ON_ONCE(!on_thread_stack());
-               if (need_resched())
+               if (should_resched(0))
                        preempt_schedule_irq();
        }
 }
@@ -412,7 +420,7 @@ noinstr void irqentry_exit(struct pt_regs *regs, irqentry_state_t state)
                        instrumentation_begin();
                        /* Tell the tracer that IRET will enable interrupts */
                        trace_hardirqs_on_prepare();
-                       lockdep_hardirqs_on_prepare(CALLER_ADDR0);
+                       lockdep_hardirqs_on_prepare();
                        instrumentation_end();
                        rcu_irq_exit();
                        lockdep_hardirqs_on(CALLER_ADDR0);
@@ -465,7 +473,7 @@ void noinstr irqentry_nmi_exit(struct pt_regs *regs, irqentry_state_t irq_state)
        ftrace_nmi_exit();
        if (irq_state.lockdep) {
                trace_hardirqs_on_prepare();
-               lockdep_hardirqs_on_prepare(CALLER_ADDR0);
+               lockdep_hardirqs_on_prepare();
        }
        instrumentation_end();