summaryrefslogtreecommitdiffstats
path: root/debian/patches-rt/0127-s390-vtime-Use-the-generic-IRQ-entry-accounting.patch
diff options
context:
space:
mode:
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.patch126
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
+