]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
s390/wti: Add debugfs file to display missed grace periods per cpu
authorTobias Huschle <huschle@linux.ibm.com>
Mon, 12 Aug 2024 11:39:30 +0000 (13:39 +0200)
committerVasily Gorbik <gor@linux.ibm.com>
Thu, 29 Aug 2024 20:56:35 +0000 (22:56 +0200)
Introduce a new debug file which allows to determine how many warning
track grace periods were missed on each CPU.
The new file can be found as /sys/kernel/debug/s390/wti

It is formatted as:
       CPU0       CPU1   [...]    CPUx
        xyz        xyz   [...]     xyz

Acked-by: Heiko Carstens <hca@linux.ibm.com>
Reviewed-by: Mete Durlu <meted@linux.ibm.com>
Signed-off-by: Tobias Huschle <huschle@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
arch/s390/kernel/wti.c

index da8bbffbed9d91683fc444b506da9c9f9dc7eb04..949fdbf0e8b659ead49c57b8e89f344802b214f5 100644 (file)
@@ -5,6 +5,8 @@
  * Copyright IBM Corp. 2023
  */
 
+#include <linux/cpu.h>
+#include <linux/debugfs.h>
 #include <linux/kallsyms.h>
 #include <linux/smpboot.h>
 #include <linux/irq.h>
@@ -117,6 +119,26 @@ static void wti_dbf_grace_period(struct wti_state *st)
        wdi->missed++;
 }
 
+static int wti_show(struct seq_file *seq, void *v)
+{
+       struct wti_state *st;
+       int cpu;
+
+       cpus_read_lock();
+       seq_puts(seq, "       ");
+       for_each_online_cpu(cpu)
+               seq_printf(seq, "CPU%-8d", cpu);
+       seq_putc(seq, '\n');
+       for_each_online_cpu(cpu) {
+               st = per_cpu_ptr(&wti_state, cpu);
+               seq_printf(seq, " %10lu", st->dbg.missed);
+       }
+       seq_putc(seq, '\n');
+       cpus_read_unlock();
+       return 0;
+}
+DEFINE_SHOW_ATTRIBUTE(wti);
+
 static void wti_thread_fn(unsigned int cpu)
 {
        struct wti_state *st = per_cpu_ptr(&wti_state, cpu);
@@ -143,6 +165,7 @@ static struct smp_hotplug_thread wti_threads = {
 static int __init wti_init(void)
 {
        struct sched_param wti_sched_param = { .sched_priority = MAX_RT_PRIO - 1 };
+       struct dentry *wti_dir;
        struct wti_state *st;
        int cpu, rc;
 
@@ -168,6 +191,8 @@ static int __init wti_init(void)
                rc = -EOPNOTSUPP;
                goto out_subclass;
        }
+       wti_dir = debugfs_create_dir("wti", arch_debugfs_dir);
+       debugfs_create_file("stat", 0400, wti_dir, NULL, &wti_fops);
        wti_dbg = debug_register("wti", 1, 1, WTI_DBF_LEN);
        if (!wti_dbg) {
                rc = -ENOMEM;