FROMLIST: sched: Avoid placing RT threads on cores handling long softirqs
In certain audio use cases, scheduling RT threads on cores that are handling softirqs can lead to glitches. Prevent this behavior in cases where the softirq is likely to take a long time. To avoid unnecessary migrations, the old behavior is preserved for RCU, SCHED and TIMER irqs which are expected to be relatively quick. This patch reworks and combines two related changes originally by John Dias <joaodias@google.com> Cc: John Dias <joaodias@google.com> Cc: Connor O'Brien <connoro@google.com> Cc: Rick Yiu <rickyiu@google.com> Cc: John Kacur <jkacur@redhat.com> Cc: Qais Yousef <qyousef@google.com> Cc: Chris Redpath <chris.redpath@arm.com> Cc: Abhijeet Dharmapurikar <adharmap@quicinc.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Ingo Molnar <mingo@redhat.com> Cc: Juri Lelli <juri.lelli@redhat.com> Cc: Vincent Guittot <vincent.guittot@linaro.org> Cc: Dietmar Eggemann <dietmar.eggemann@arm.com> Cc: Steven Rostedt <rostedt@goodmis.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Heiko Carstens <hca@linux.ibm.com> Cc: Vasily Gorbik <gor@linux.ibm.com> Cc: Joel Fernandes <joel@joelfernandes.org> Cc: Alexander Gordeev <agordeev@linux.ibm.com> Cc: kernel-team@android.com Signed-off-by:John Dias <joaodias@google.com> [elavila: Port to mainline, amend commit text] Signed-off-by:
J. Avila <elavila@google.com> [connoro: Reworked, simplified, and merged two patches together] Signed-off-by:
Connor O'Brien <connoro@google.com> [jstultz: Further simplified and fixed issues, reworded commit message, removed arm64-isms] Signed-off-by:
John Stultz <jstultz@google.com> Link: https://lore.kernel.org/lkml/20221116075929.453876-3-jstultz@google.com/ Change-Id: Iea6719e1d900be4a3492949685f1218f299f29e8 Bug: 168521633 --- v2: * Reformatted Kconfig entry to match coding style (Reported-by:
Randy Dunlap <rdunlap@infradead.org>)> * Made rt_task_fits_capacity_and_may_preempt static to avoid warnings (Reported-by:
kernel test robot <lkp@intel.com>)> * Rework to use preempt_count and drop kconfig dependency on ARM64 v3: * Use introduced __cpu_softirq_pending() to avoid s390 build issues (Reported-by:
kernel test robot <lkp@intel.com>)> v4: * Drop TASKLET_SOFTIRQ from LONG_SOFTIRQS (suggested by Qais) * Depend on !PREEMPT_RT (Suggested by Qais) * Larger simplification of logic (suggested by Qais) * Rework LONG_SOFTIRQS to use BIT() macros * Rename task_may_preempt() to cpu_busy_with_softirqs() v5: * Conditionalize active_softirqs handling (suggested by Alexander Gordeev <agordeev@linux.ibm.com>) * Reorder rt_task_fits_cpu to have the "fast" function first (Suggested by Alexander Gordeev <agordeev@linux.ibm.com>) * Fix bug I introduced in v2 condensing task_thread_info(task)->preempt_count to preempt_count() (Reported-by:
Alexander Gordeev <agordeev@linux.ibm.com>)> * Tweak comment discription to remove the vauge "slow" descriptor of softirqs being run by ksoftirqd (Suggested by Alexander Gordeev <agordeev@linux.ibm.com>) * Switch to using CONFIG_RT_SOFTIRQ_AWARE_SCHED (suggested by Joel Fernandes <joel@joelfernandes.org>) * Simplify cpu_busy_with_softirqs() logic as pointed out by Alexander Gordeev <agordeev@linux.ibm.com> * Switch to using IS_ENABLED rather then defining my own macro (suggsted by Joel Fernandes <joel@joelfernandes.org>)
Loading