diff options
Diffstat (limited to 'debian/patches-rt/0127-s390-vtime-Use-the-generic-IRQ-entry-accounting.patch')
-rw-r--r-- | debian/patches-rt/0127-s390-vtime-Use-the-generic-IRQ-entry-accounting.patch | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/debian/patches-rt/0127-s390-vtime-Use-the-generic-IRQ-entry-accounting.patch b/debian/patches-rt/0127-s390-vtime-Use-the-generic-IRQ-entry-accounting.patch new file mode 100644 index 000000000..e4a67c29c --- /dev/null +++ b/debian/patches-rt/0127-s390-vtime-Use-the-generic-IRQ-entry-accounting.patch @@ -0,0 +1,126 @@ +From 433f928a0fd33d67682020e134ac00885b38a2a9 Mon Sep 17 00:00:00 2001 +From: Frederic Weisbecker <frederic@kernel.org> +Date: Wed, 2 Dec 2020 12:57:29 +0100 +Subject: [PATCH 127/323] s390/vtime: Use the generic IRQ entry accounting +Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/5.10/older/patches-5.10.204-rt100.tar.xz + +s390 has its own version of IRQ entry accounting because it doesn't +account the idle time the same way the other architectures do. Only +the actual idle sleep time is accounted as idle time, the rest of the +idle task execution is accounted as system time. + +Make the generic IRQ entry accounting aware of architectures that have +their own way of accounting idle time and convert s390 to use it. + +This prepares s390 to get involved in further consolidations of IRQ +time accounting. + +Signed-off-by: Frederic Weisbecker <frederic@kernel.org> +Signed-off-by: Thomas Gleixner <tglx@linutronix.de> +Link: https://lore.kernel.org/r/20201202115732.27827-3-frederic@kernel.org +Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> +--- + arch/Kconfig | 7 ++++++- + arch/s390/Kconfig | 1 + + arch/s390/include/asm/vtime.h | 1 - + arch/s390/kernel/vtime.c | 4 ---- + kernel/sched/cputime.c | 13 ++----------- + 5 files changed, 9 insertions(+), 17 deletions(-) + +diff --git a/arch/Kconfig b/arch/Kconfig +index 240277d5626c..628e1e7fe302 100644 +--- a/arch/Kconfig ++++ b/arch/Kconfig +@@ -646,6 +646,12 @@ config HAVE_TIF_NOHZ + config HAVE_VIRT_CPU_ACCOUNTING + bool + ++config HAVE_VIRT_CPU_ACCOUNTING_IDLE ++ bool ++ help ++ Architecture has its own way to account idle CPU time and therefore ++ doesn't implement vtime_account_idle(). ++ + config ARCH_HAS_SCALED_CPUTIME + bool + +@@ -660,7 +666,6 @@ config HAVE_VIRT_CPU_ACCOUNTING_GEN + some 32-bit arches may require multiple accesses, so proper + locking is needed to protect against concurrent accesses. + +- + config HAVE_IRQ_TIME_ACCOUNTING + bool + help +diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig +index 878993982e39..2e78071551e7 100644 +--- a/arch/s390/Kconfig ++++ b/arch/s390/Kconfig +@@ -183,6 +183,7 @@ config S390 + select HAVE_RSEQ + select HAVE_SYSCALL_TRACEPOINTS + select HAVE_VIRT_CPU_ACCOUNTING ++ select HAVE_VIRT_CPU_ACCOUNTING_IDLE + select IOMMU_HELPER if PCI + select IOMMU_SUPPORT if PCI + select MODULES_USE_ELF_RELA +diff --git a/arch/s390/include/asm/vtime.h b/arch/s390/include/asm/vtime.h +index 3622d4ebc73a..fac6a67988eb 100644 +--- a/arch/s390/include/asm/vtime.h ++++ b/arch/s390/include/asm/vtime.h +@@ -2,7 +2,6 @@ + #ifndef _S390_VTIME_H + #define _S390_VTIME_H + +-#define __ARCH_HAS_VTIME_ACCOUNT + #define __ARCH_HAS_VTIME_TASK_SWITCH + + #endif /* _S390_VTIME_H */ +diff --git a/arch/s390/kernel/vtime.c b/arch/s390/kernel/vtime.c +index 710135905deb..18a97631af43 100644 +--- a/arch/s390/kernel/vtime.c ++++ b/arch/s390/kernel/vtime.c +@@ -248,10 +248,6 @@ void vtime_account_kernel(struct task_struct *tsk) + } + EXPORT_SYMBOL_GPL(vtime_account_kernel); + +-void vtime_account_irq_enter(struct task_struct *tsk) +-__attribute__((alias("vtime_account_kernel"))); +- +- + /* + * Sorted add to a list. List is linear searched until first bigger + * element is found. +diff --git a/kernel/sched/cputime.c b/kernel/sched/cputime.c +index e03568c5f584..1d78b835ec8b 100644 +--- a/kernel/sched/cputime.c ++++ b/kernel/sched/cputime.c +@@ -417,23 +417,14 @@ void vtime_task_switch(struct task_struct *prev) + } + # endif + +-/* +- * Archs that account the whole time spent in the idle task +- * (outside irq) as idle time can rely on this and just implement +- * vtime_account_kernel() and vtime_account_idle(). Archs that +- * have other meaning of the idle time (s390 only includes the +- * time spent by the CPU when it's in low power mode) must override +- * vtime_account(). +- */ +-#ifndef __ARCH_HAS_VTIME_ACCOUNT + void vtime_account_irq_enter(struct task_struct *tsk) + { +- if (!in_interrupt() && is_idle_task(tsk)) ++ if (!IS_ENABLED(CONFIG_HAVE_VIRT_CPU_ACCOUNTING_IDLE) && ++ !in_interrupt() && is_idle_task(tsk)) + vtime_account_idle(tsk); + else + vtime_account_kernel(tsk); + } +-#endif /* __ARCH_HAS_VTIME_ACCOUNT */ + + void cputime_adjust(struct task_cputime *curr, struct prev_cputime *prev, + u64 *ut, u64 *st) +-- +2.43.0 + |