From: "Paul E. McKenney" <paulmck-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
To: Heiko Carstens <heiko.carstens-tA70FqPdS9bQT0dZR+AlfA@public.gmane.org>
Cc: Ingo Molnar <mingo-X9Un+BFzKDI@public.gmane.org>,
"Rafael J. Wysocki" <rjw-KKrjLPT3xs0@public.gmane.org>,
Linux Kernel Mailing List
<linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
Kernel Testers List
<kernel-testers-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
Rusty Russell <rusty-8n+1lVoiYb80n/F98K4Iww@public.gmane.org>,
Vegard Nossum
<vegard.nossum-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
Peter Zijlstra
<a.p.zijlstra-/NLkJaSkS4VmR6Xm/wNWPw@public.gmane.org>,
Oleg Nesterov <oleg-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>,
Dmitry Adamushko
<dmitry.adamushko-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
Andrew Morton
<akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org>,
Steven Rostedt <srostedt-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
Subject: Re: [Bug #11989] Suspend failure on NForce4-based boards due to chanes in stop_machine
Date: Tue, 11 Nov 2008 09:34:51 -0800 [thread overview]
Message-ID: <20081111173451.GA24720@linux.vnet.ibm.com> (raw)
In-Reply-To: <20081111164523.GB6736-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
On Tue, Nov 11, 2008 at 08:45:23AM -0800, Paul E. McKenney wrote:
> On Tue, Nov 11, 2008 at 05:14:01PM +0100, Heiko Carstens wrote:
> > > > Could you please apply the following debug patch (due to Jiangshan and
> > > > myself)? Then you should be able to build with CONFIG_RCU_TRACE,
> > > > then mount debugfs after boot, for example, on /debug. This will
> > > > create a /debug/rcu directory with three files, "rcucb", "rcu_data",
> > > > and "rcu_bh_data". Since you are still able to log in, could you
> > > > please send the contents of these three files?
> > > >
> > > > Thanx, Paul
> > >
> > > This time with the patch actually attached... Thanks to Peter Z.
> > > for alerting me to my omission.
> >
> > Well, your patch doesn't apply on git head. However I used preemptible
> > RCU instead and had tracing enabled.
>
> Were you using preemptible RCU earlier as well? Raphael was using
> classic RCU. Don't get me wrong, all problems need fixing, just trying
> to make sure I understand where the problems are occurring.
And here is a version of the patch rebased to linux-2.6 git head.
This adds tracing to classic RCU.
Signed-off-by: Paul E. McKenney <paulmck-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
Signed-off-by: Lai Jiangshan <laijs-BthXqXjhjHXQFUHtdCDX3A@public.gmane.org>
---
include/linux/rcuclassic.h | 4
kernel/Kconfig.preempt | 1
kernel/Makefile | 2
kernel/rcuclassic.c | 5 -
kernel/rcuclassic_trace.c | 198 +++++++++++++++++++++++++++++++++++++++++++++
5 files changed, 207 insertions(+), 3 deletions(-)
diff --git a/include/linux/rcuclassic.h b/include/linux/rcuclassic.h
index 5f89b62..ce183a8 100644
--- a/include/linux/rcuclassic.h
+++ b/include/linux/rcuclassic.h
@@ -63,6 +63,9 @@ struct rcu_ctrlblk {
/* for current batch to proceed. */
} ____cacheline_internodealigned_in_smp;
+extern struct rcu_ctrlblk rcu_ctrlblk;
+extern struct rcu_ctrlblk rcu_bh_ctrlblk;
+
/* Is batch a before batch b ? */
static inline int rcu_batch_before(long a, long b)
{
@@ -81,6 +84,7 @@ struct rcu_data {
long quiescbatch; /* Batch # for grace period */
int passed_quiesc; /* User-mode/idle loop etc. */
int qs_pending; /* core waits for quiesc state */
+ bool beenonline; /* CPU online at least once */
/* 2) batch handling */
/*
diff --git a/kernel/Kconfig.preempt b/kernel/Kconfig.preempt
index 9fdba03..ba32338 100644
--- a/kernel/Kconfig.preempt
+++ b/kernel/Kconfig.preempt
@@ -68,7 +68,6 @@ config PREEMPT_RCU
config RCU_TRACE
bool "Enable tracing for RCU - currently stats in debugfs"
- depends on PREEMPT_RCU
select DEBUG_FS
default y
help
diff --git a/kernel/Makefile b/kernel/Makefile
index 9a3ec66..9771050 100644
--- a/kernel/Makefile
+++ b/kernel/Makefile
@@ -79,6 +79,8 @@ obj-$(CONFIG_CLASSIC_RCU) += rcuclassic.o
obj-$(CONFIG_PREEMPT_RCU) += rcupreempt.o
ifeq ($(CONFIG_PREEMPT_RCU),y)
obj-$(CONFIG_RCU_TRACE) += rcupreempt_trace.o
+else
+obj-$(CONFIG_RCU_TRACE) += rcuclassic_trace.o
endif
obj-$(CONFIG_RELAY) += relay.o
obj-$(CONFIG_SYSCTL) += utsname_sysctl.o
diff --git a/kernel/rcuclassic.c b/kernel/rcuclassic.c
index 37f72e5..54bd23b 100644
--- a/kernel/rcuclassic.c
+++ b/kernel/rcuclassic.c
@@ -58,14 +58,14 @@ EXPORT_SYMBOL_GPL(rcu_lock_map);
/* Definition for rcupdate control block. */
-static struct rcu_ctrlblk rcu_ctrlblk = {
+struct rcu_ctrlblk rcu_ctrlblk = {
.cur = -300,
.completed = -300,
.pending = -300,
.lock = __SPIN_LOCK_UNLOCKED(&rcu_ctrlblk.lock),
.cpumask = CPU_MASK_NONE,
};
-static struct rcu_ctrlblk rcu_bh_ctrlblk = {
+struct rcu_ctrlblk rcu_bh_ctrlblk = {
.cur = -300,
.completed = -300,
.pending = -300,
@@ -725,6 +725,7 @@ static void rcu_init_percpu_data(int cpu, struct rcu_ctrlblk *rcp,
rdp->donetail = &rdp->donelist;
rdp->quiescbatch = rcp->completed;
rdp->qs_pending = 0;
+ rdp->beenonline = 1;
rdp->cpu = cpu;
rdp->blimit = blimit;
spin_unlock_irqrestore(&rcp->lock, flags);
diff --git a/kernel/rcuclassic_trace.c b/kernel/rcuclassic_trace.c
new file mode 100644
index 0000000..612170c
--- /dev/null
+++ b/kernel/rcuclassic_trace.c
@@ -0,0 +1,198 @@
+/*
+ * Read-Copy Update tracing for classic implementation
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Copyright IBM Corporation, 2008
+ *
+ * Updated to use seqfile by Lai Jiangshan.
+ *
+ * Papers: http://www.rdrop.com/users/paulmck/RCU
+ *
+ * For detailed explanation of Read-Copy Update mechanism see -
+ * Documentation/RCU
+ *
+ */
+#include <linux/rcupdate.h>
+#include <linux/module.h>
+#include <linux/debugfs.h>
+#include <linux/seq_file.h>
+
+/* Print out rcu_data structures using seqfile facility. */
+
+static struct rcu_data *get_rcu_data_bh(int cpu)
+{
+ return &per_cpu(rcu_bh_data, cpu);
+}
+
+static struct rcu_data *get_rcu_data(int cpu)
+{
+ return &per_cpu(rcu_data, cpu);
+}
+
+static int show_rcu_data(struct seq_file *m, void *v)
+{
+ struct rcu_data *rdp = v;
+
+ if (!rdp->beenonline)
+ return 0;
+
+ seq_printf(m, "processor\t: %d", rdp->cpu);
+ if (cpu_is_offline(rdp->cpu))
+ seq_puts(m, "!\n");
+ else
+ seq_puts(m, "\n");
+ seq_printf(m, "quiescbatch\t: %ld\n", rdp->quiescbatch);
+ seq_printf(m, "batch\t\t: %ld\n", rdp->batch);
+ seq_printf(m, "passed_quiesc\t: %d\n", rdp->passed_quiesc);
+ seq_printf(m, "qs_pending\t: %d\n", rdp->qs_pending);
+ seq_printf(m, "qlen\t\t: %ld\n", rdp->qlen);
+ seq_printf(m, "blimit\t\t: %ld\n", rdp->blimit);
+ seq_puts(m, "\n");
+ return 0;
+}
+
+static void *c_start(struct seq_file *m, loff_t *pos)
+{
+ typedef struct rcu_data *(*get_data_func)(int);
+
+ if (*pos == 0) /* just in case, cpu 0 is not the first */
+ *pos = first_cpu(cpu_possible_map);
+ else
+ *pos = next_cpu_nr(*pos - 1, cpu_possible_map);
+ if ((*pos) < nr_cpu_ids)
+ return ((get_data_func)m->private)(*pos);
+ return NULL;
+}
+
+static void *c_next(struct seq_file *m, void *v, loff_t *pos)
+{
+ (*pos)++;
+ return c_start(m, pos);
+}
+
+static void c_stop(struct seq_file *m, void *v)
+{
+}
+
+const struct seq_operations rcu_data_seq_op = {
+ .start = c_start,
+ .next = c_next,
+ .stop = c_stop,
+ .show = show_rcu_data,
+};
+
+static int rcu_data_open(struct inode *inode, struct file *file)
+{
+ int ret = seq_open(file, &rcu_data_seq_op);
+
+ if (ret)
+ return ret;
+ ((struct seq_file *)file->private_data)->private = inode->i_private;
+ return 0;
+}
+
+static const struct file_operations rcu_data_fops = {
+ .owner = THIS_MODULE,
+ .open = rcu_data_open,
+ .read = seq_read,
+ .llseek = seq_lseek,
+ .release = seq_release,
+};
+
+/* Print out rcu_ctrlblk structures using seqfile facility. */
+
+static void print_one_rcu_ctrlblk(struct seq_file *m, struct rcu_ctrlblk *rcp)
+{
+ seq_printf(m, "cur=%ld completed=%ld pending=%d s=%d\n\t",
+ rcp->cur, rcp->completed, rcp->pending, rcp->signaled);
+ seq_cpumask(m, &rcp->cpumask);
+ seq_puts(m, "\n");
+}
+
+static int show_rcucb(struct seq_file *m, void *unused)
+{
+ seq_puts(m, "rcu: ");
+ print_one_rcu_ctrlblk(m, &rcu_ctrlblk);
+ seq_puts(m, "rcu_bh: ");
+ print_one_rcu_ctrlblk(m, &rcu_bh_ctrlblk);
+ seq_puts(m, "online: ");
+ seq_cpumask(m, &cpu_online_map);
+ seq_puts(m, "\n");
+ return 0;
+}
+
+static int rcucb_open(struct inode *inode, struct file *file)
+{
+ return single_open(file, show_rcucb, NULL);
+}
+
+static struct file_operations rcucb_fops = {
+ .owner = THIS_MODULE,
+ .open = rcucb_open,
+ .read = seq_read,
+ .llseek = seq_lseek,
+ .release = single_release,
+};
+
+static struct dentry *rcudir, *rcu_bh_data_file, *rcu_data_file, *rcucb_file;
+
+static int __init rcuclassic_trace_init(void)
+{
+ rcudir = debugfs_create_dir("rcu", NULL);
+ if (!rcudir)
+ goto out;
+
+ rcu_bh_data_file = debugfs_create_file("rcu_bh_data", 0444, rcudir,
+ get_rcu_data_bh, &rcu_data_fops);
+ if (!rcu_bh_data_file)
+ goto out_rcudir;
+
+ rcu_data_file = debugfs_create_file("rcu_data", 0444, rcudir,
+ get_rcu_data, &rcu_data_fops);
+ if (!rcu_data_file)
+ goto out_rcudata_bh_file;
+
+ rcucb_file = debugfs_create_file("rcucb", 0444, rcudir,
+ NULL, &rcucb_fops);
+ if (!rcucb_file)
+ goto out_rcudata_file;
+ return 0;
+
+out_rcudata_file:
+ debugfs_remove(rcu_data_file);
+out_rcudata_bh_file:
+ debugfs_remove(rcu_bh_data_file);
+out_rcudir:
+ debugfs_remove(rcudir);
+out:
+ return 1;
+}
+
+static void __exit rcuclassic_trace_cleanup(void)
+{
+ debugfs_remove(rcucb_file);
+ debugfs_remove(rcu_data_file);
+ debugfs_remove(rcu_bh_data_file);
+ debugfs_remove(rcudir);
+}
+
+module_init(rcuclassic_trace_init);
+module_exit(rcuclassic_trace_cleanup);
+
+MODULE_AUTHOR("Paul E. McKenney");
+MODULE_DESCRIPTION("Read-Copy Update tracing for classic implementation");
+MODULE_LICENSE("GPL");
+
WARNING: multiple messages have this Message-ID (diff)
From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: Ingo Molnar <mingo@elte.hu>, "Rafael J. Wysocki" <rjw@sisk.pl>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
Kernel Testers List <kernel-testers@vger.kernel.org>,
Rusty Russell <rusty@rustcorp.com.au>,
Vegard Nossum <vegard.nossum@gmail.com>,
Peter Zijlstra <a.p.zijlstra@chello.nl>,
Oleg Nesterov <oleg@redhat.com>,
Dmitry Adamushko <dmitry.adamushko@gmail.com>,
Andrew Morton <akpm@linux-foundation.org>,
Steven Rostedt <srostedt@redhat.com>
Subject: Re: [Bug #11989] Suspend failure on NForce4-based boards due to chanes in stop_machine
Date: Tue, 11 Nov 2008 09:34:51 -0800 [thread overview]
Message-ID: <20081111173451.GA24720@linux.vnet.ibm.com> (raw)
In-Reply-To: <20081111164523.GB6736@linux.vnet.ibm.com>
On Tue, Nov 11, 2008 at 08:45:23AM -0800, Paul E. McKenney wrote:
> On Tue, Nov 11, 2008 at 05:14:01PM +0100, Heiko Carstens wrote:
> > > > Could you please apply the following debug patch (due to Jiangshan and
> > > > myself)? Then you should be able to build with CONFIG_RCU_TRACE,
> > > > then mount debugfs after boot, for example, on /debug. This will
> > > > create a /debug/rcu directory with three files, "rcucb", "rcu_data",
> > > > and "rcu_bh_data". Since you are still able to log in, could you
> > > > please send the contents of these three files?
> > > >
> > > > Thanx, Paul
> > >
> > > This time with the patch actually attached... Thanks to Peter Z.
> > > for alerting me to my omission.
> >
> > Well, your patch doesn't apply on git head. However I used preemptible
> > RCU instead and had tracing enabled.
>
> Were you using preemptible RCU earlier as well? Raphael was using
> classic RCU. Don't get me wrong, all problems need fixing, just trying
> to make sure I understand where the problems are occurring.
And here is a version of the patch rebased to linux-2.6 git head.
This adds tracing to classic RCU.
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
---
include/linux/rcuclassic.h | 4
kernel/Kconfig.preempt | 1
kernel/Makefile | 2
kernel/rcuclassic.c | 5 -
kernel/rcuclassic_trace.c | 198 +++++++++++++++++++++++++++++++++++++++++++++
5 files changed, 207 insertions(+), 3 deletions(-)
diff --git a/include/linux/rcuclassic.h b/include/linux/rcuclassic.h
index 5f89b62..ce183a8 100644
--- a/include/linux/rcuclassic.h
+++ b/include/linux/rcuclassic.h
@@ -63,6 +63,9 @@ struct rcu_ctrlblk {
/* for current batch to proceed. */
} ____cacheline_internodealigned_in_smp;
+extern struct rcu_ctrlblk rcu_ctrlblk;
+extern struct rcu_ctrlblk rcu_bh_ctrlblk;
+
/* Is batch a before batch b ? */
static inline int rcu_batch_before(long a, long b)
{
@@ -81,6 +84,7 @@ struct rcu_data {
long quiescbatch; /* Batch # for grace period */
int passed_quiesc; /* User-mode/idle loop etc. */
int qs_pending; /* core waits for quiesc state */
+ bool beenonline; /* CPU online at least once */
/* 2) batch handling */
/*
diff --git a/kernel/Kconfig.preempt b/kernel/Kconfig.preempt
index 9fdba03..ba32338 100644
--- a/kernel/Kconfig.preempt
+++ b/kernel/Kconfig.preempt
@@ -68,7 +68,6 @@ config PREEMPT_RCU
config RCU_TRACE
bool "Enable tracing for RCU - currently stats in debugfs"
- depends on PREEMPT_RCU
select DEBUG_FS
default y
help
diff --git a/kernel/Makefile b/kernel/Makefile
index 9a3ec66..9771050 100644
--- a/kernel/Makefile
+++ b/kernel/Makefile
@@ -79,6 +79,8 @@ obj-$(CONFIG_CLASSIC_RCU) += rcuclassic.o
obj-$(CONFIG_PREEMPT_RCU) += rcupreempt.o
ifeq ($(CONFIG_PREEMPT_RCU),y)
obj-$(CONFIG_RCU_TRACE) += rcupreempt_trace.o
+else
+obj-$(CONFIG_RCU_TRACE) += rcuclassic_trace.o
endif
obj-$(CONFIG_RELAY) += relay.o
obj-$(CONFIG_SYSCTL) += utsname_sysctl.o
diff --git a/kernel/rcuclassic.c b/kernel/rcuclassic.c
index 37f72e5..54bd23b 100644
--- a/kernel/rcuclassic.c
+++ b/kernel/rcuclassic.c
@@ -58,14 +58,14 @@ EXPORT_SYMBOL_GPL(rcu_lock_map);
/* Definition for rcupdate control block. */
-static struct rcu_ctrlblk rcu_ctrlblk = {
+struct rcu_ctrlblk rcu_ctrlblk = {
.cur = -300,
.completed = -300,
.pending = -300,
.lock = __SPIN_LOCK_UNLOCKED(&rcu_ctrlblk.lock),
.cpumask = CPU_MASK_NONE,
};
-static struct rcu_ctrlblk rcu_bh_ctrlblk = {
+struct rcu_ctrlblk rcu_bh_ctrlblk = {
.cur = -300,
.completed = -300,
.pending = -300,
@@ -725,6 +725,7 @@ static void rcu_init_percpu_data(int cpu, struct rcu_ctrlblk *rcp,
rdp->donetail = &rdp->donelist;
rdp->quiescbatch = rcp->completed;
rdp->qs_pending = 0;
+ rdp->beenonline = 1;
rdp->cpu = cpu;
rdp->blimit = blimit;
spin_unlock_irqrestore(&rcp->lock, flags);
diff --git a/kernel/rcuclassic_trace.c b/kernel/rcuclassic_trace.c
new file mode 100644
index 0000000..612170c
--- /dev/null
+++ b/kernel/rcuclassic_trace.c
@@ -0,0 +1,198 @@
+/*
+ * Read-Copy Update tracing for classic implementation
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Copyright IBM Corporation, 2008
+ *
+ * Updated to use seqfile by Lai Jiangshan.
+ *
+ * Papers: http://www.rdrop.com/users/paulmck/RCU
+ *
+ * For detailed explanation of Read-Copy Update mechanism see -
+ * Documentation/RCU
+ *
+ */
+#include <linux/rcupdate.h>
+#include <linux/module.h>
+#include <linux/debugfs.h>
+#include <linux/seq_file.h>
+
+/* Print out rcu_data structures using seqfile facility. */
+
+static struct rcu_data *get_rcu_data_bh(int cpu)
+{
+ return &per_cpu(rcu_bh_data, cpu);
+}
+
+static struct rcu_data *get_rcu_data(int cpu)
+{
+ return &per_cpu(rcu_data, cpu);
+}
+
+static int show_rcu_data(struct seq_file *m, void *v)
+{
+ struct rcu_data *rdp = v;
+
+ if (!rdp->beenonline)
+ return 0;
+
+ seq_printf(m, "processor\t: %d", rdp->cpu);
+ if (cpu_is_offline(rdp->cpu))
+ seq_puts(m, "!\n");
+ else
+ seq_puts(m, "\n");
+ seq_printf(m, "quiescbatch\t: %ld\n", rdp->quiescbatch);
+ seq_printf(m, "batch\t\t: %ld\n", rdp->batch);
+ seq_printf(m, "passed_quiesc\t: %d\n", rdp->passed_quiesc);
+ seq_printf(m, "qs_pending\t: %d\n", rdp->qs_pending);
+ seq_printf(m, "qlen\t\t: %ld\n", rdp->qlen);
+ seq_printf(m, "blimit\t\t: %ld\n", rdp->blimit);
+ seq_puts(m, "\n");
+ return 0;
+}
+
+static void *c_start(struct seq_file *m, loff_t *pos)
+{
+ typedef struct rcu_data *(*get_data_func)(int);
+
+ if (*pos == 0) /* just in case, cpu 0 is not the first */
+ *pos = first_cpu(cpu_possible_map);
+ else
+ *pos = next_cpu_nr(*pos - 1, cpu_possible_map);
+ if ((*pos) < nr_cpu_ids)
+ return ((get_data_func)m->private)(*pos);
+ return NULL;
+}
+
+static void *c_next(struct seq_file *m, void *v, loff_t *pos)
+{
+ (*pos)++;
+ return c_start(m, pos);
+}
+
+static void c_stop(struct seq_file *m, void *v)
+{
+}
+
+const struct seq_operations rcu_data_seq_op = {
+ .start = c_start,
+ .next = c_next,
+ .stop = c_stop,
+ .show = show_rcu_data,
+};
+
+static int rcu_data_open(struct inode *inode, struct file *file)
+{
+ int ret = seq_open(file, &rcu_data_seq_op);
+
+ if (ret)
+ return ret;
+ ((struct seq_file *)file->private_data)->private = inode->i_private;
+ return 0;
+}
+
+static const struct file_operations rcu_data_fops = {
+ .owner = THIS_MODULE,
+ .open = rcu_data_open,
+ .read = seq_read,
+ .llseek = seq_lseek,
+ .release = seq_release,
+};
+
+/* Print out rcu_ctrlblk structures using seqfile facility. */
+
+static void print_one_rcu_ctrlblk(struct seq_file *m, struct rcu_ctrlblk *rcp)
+{
+ seq_printf(m, "cur=%ld completed=%ld pending=%d s=%d\n\t",
+ rcp->cur, rcp->completed, rcp->pending, rcp->signaled);
+ seq_cpumask(m, &rcp->cpumask);
+ seq_puts(m, "\n");
+}
+
+static int show_rcucb(struct seq_file *m, void *unused)
+{
+ seq_puts(m, "rcu: ");
+ print_one_rcu_ctrlblk(m, &rcu_ctrlblk);
+ seq_puts(m, "rcu_bh: ");
+ print_one_rcu_ctrlblk(m, &rcu_bh_ctrlblk);
+ seq_puts(m, "online: ");
+ seq_cpumask(m, &cpu_online_map);
+ seq_puts(m, "\n");
+ return 0;
+}
+
+static int rcucb_open(struct inode *inode, struct file *file)
+{
+ return single_open(file, show_rcucb, NULL);
+}
+
+static struct file_operations rcucb_fops = {
+ .owner = THIS_MODULE,
+ .open = rcucb_open,
+ .read = seq_read,
+ .llseek = seq_lseek,
+ .release = single_release,
+};
+
+static struct dentry *rcudir, *rcu_bh_data_file, *rcu_data_file, *rcucb_file;
+
+static int __init rcuclassic_trace_init(void)
+{
+ rcudir = debugfs_create_dir("rcu", NULL);
+ if (!rcudir)
+ goto out;
+
+ rcu_bh_data_file = debugfs_create_file("rcu_bh_data", 0444, rcudir,
+ get_rcu_data_bh, &rcu_data_fops);
+ if (!rcu_bh_data_file)
+ goto out_rcudir;
+
+ rcu_data_file = debugfs_create_file("rcu_data", 0444, rcudir,
+ get_rcu_data, &rcu_data_fops);
+ if (!rcu_data_file)
+ goto out_rcudata_bh_file;
+
+ rcucb_file = debugfs_create_file("rcucb", 0444, rcudir,
+ NULL, &rcucb_fops);
+ if (!rcucb_file)
+ goto out_rcudata_file;
+ return 0;
+
+out_rcudata_file:
+ debugfs_remove(rcu_data_file);
+out_rcudata_bh_file:
+ debugfs_remove(rcu_bh_data_file);
+out_rcudir:
+ debugfs_remove(rcudir);
+out:
+ return 1;
+}
+
+static void __exit rcuclassic_trace_cleanup(void)
+{
+ debugfs_remove(rcucb_file);
+ debugfs_remove(rcu_data_file);
+ debugfs_remove(rcu_bh_data_file);
+ debugfs_remove(rcudir);
+}
+
+module_init(rcuclassic_trace_init);
+module_exit(rcuclassic_trace_cleanup);
+
+MODULE_AUTHOR("Paul E. McKenney");
+MODULE_DESCRIPTION("Read-Copy Update tracing for classic implementation");
+MODULE_LICENSE("GPL");
+
next prev parent reply other threads:[~2008-11-11 17:34 UTC|newest]
Thread overview: 202+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-11-09 17:53 2.6.28-rc3-git6: Reported regressions from 2.6.27 Rafael J. Wysocki
2008-11-09 17:53 ` Rafael J. Wysocki
2008-11-09 17:53 ` [Bug #11799] xorg can not start up with stolen memory Rafael J. Wysocki
2008-11-09 17:53 ` Rafael J. Wysocki
2008-11-09 17:54 ` [Bug #11806] iwl3945 fails with microcode error Rafael J. Wysocki
2008-11-09 17:54 ` Rafael J. Wysocki
2008-11-09 17:59 ` [Bug #11849] default IRQ affinity change in v2.6.27 (breaking several SMP PPC based systems) Rafael J. Wysocki
2008-11-09 17:59 ` Rafael J. Wysocki
2008-11-09 17:59 ` [Bug #11822] ACPI Warning (nspredef-0858): _SB_.PCI0.LPC_.EC__.BAT0._BIF: Return Package type mismatch at index 9 - found Buffer, expected String [20080926] Rafael J. Wysocki
2008-11-09 17:59 ` Rafael J. Wysocki
2008-11-09 17:59 ` [Bug #11841] plenty of line "ACPI: EC: non-query interrupt received, switching to interrupt mode" in dmesg and system not powering down Rafael J. Wysocki
2008-11-09 17:59 ` Rafael J. Wysocki
2008-11-09 17:59 ` [Bug #11834] iwl3945: if I leave my machine running overnight, wifi will not work in the morning Rafael J. Wysocki
2008-11-09 17:59 ` Rafael J. Wysocki
2008-11-09 17:59 ` [Bug #11826] extreme slowness of IO stuff using 2.6.28-rc1 Rafael J. Wysocki
2008-11-09 17:59 ` Rafael J. Wysocki
2008-11-09 17:59 ` [Bug #11873] unable to mount ext3 root filesystem due to htree_dirblock_to_tree Rafael J. Wysocki
2008-11-09 17:59 ` Rafael J. Wysocki
2008-11-09 17:59 ` [Bug #11891] resume from disk broken on hp/compaq nx7000 (DRM problem) Rafael J. Wysocki
2008-11-09 17:59 ` Rafael J. Wysocki
2008-11-09 17:59 ` [Bug #11858] Timeout regression introduced by 242f9dcb8ba6f68fcd217a119a7648a4f69290e9 Rafael J. Wysocki
2008-11-09 17:59 ` Rafael J. Wysocki
2008-11-09 17:59 ` [Bug #11875] radeonfb lockup in .28-rc (bisected) Rafael J. Wysocki
2008-11-09 17:59 ` Rafael J. Wysocki
2008-11-09 21:15 ` Benjamin Herrenschmidt
2008-11-09 21:15 ` Benjamin Herrenschmidt
2008-11-10 5:46 ` Benjamin Herrenschmidt
2008-11-10 5:46 ` Benjamin Herrenschmidt
2008-11-10 7:13 ` Paul Collins
[not found] ` <87abc8rr3m.fsf-D7l3p2TGOOdLdt5/z87VRY6ehsQQaF5K@public.gmane.org>
2008-11-10 9:05 ` Benjamin Herrenschmidt
2008-11-10 9:05 ` Benjamin Herrenschmidt
2008-11-10 9:06 ` David Miller
2008-11-10 9:06 ` David Miller
2008-11-10 20:39 ` Andreas Schwab
2008-11-10 20:39 ` Andreas Schwab
[not found] ` <jetzafiad4.fsf-+JVCjXrnBTholqkO4TVVkw@public.gmane.org>
2008-11-10 21:52 ` Benjamin Herrenschmidt
2008-11-10 21:52 ` Benjamin Herrenschmidt
2008-11-10 23:20 ` Andreas Schwab
2008-11-10 23:20 ` Andreas Schwab
[not found] ` <jefxlzi2x0.fsf-+JVCjXrnBTholqkO4TVVkw@public.gmane.org>
2008-11-10 23:34 ` Benjamin Herrenschmidt
2008-11-10 23:34 ` Benjamin Herrenschmidt
2008-11-10 23:54 ` Andreas Schwab
2008-11-10 23:54 ` Andreas Schwab
[not found] ` <je1vxji1br.fsf-+JVCjXrnBTholqkO4TVVkw@public.gmane.org>
2008-11-11 1:49 ` Benjamin Herrenschmidt
2008-11-11 1:49 ` Benjamin Herrenschmidt
2008-11-11 2:47 ` Linus Torvalds
2008-11-11 2:47 ` Linus Torvalds
[not found] ` <alpine.LFD.2.00.0811101822350.3468-nfNrOhbfy2R17+2ddN/4kux8cNe9sq/dYPYVAmT7z5s@public.gmane.org>
2008-11-11 3:21 ` Benjamin Herrenschmidt
2008-11-11 3:21 ` Benjamin Herrenschmidt
2008-11-11 9:31 ` Andreas Schwab
2008-11-11 9:31 ` Andreas Schwab
[not found] ` <jeskpy7gnl.fsf-+JVCjXrnBTholqkO4TVVkw@public.gmane.org>
2008-11-11 11:30 ` Benjamin Herrenschmidt
2008-11-11 11:30 ` Benjamin Herrenschmidt
2008-11-21 2:55 ` Benjamin Herrenschmidt
2008-11-21 2:55 ` Benjamin Herrenschmidt
2008-11-21 3:02 ` Benjamin Herrenschmidt
2008-11-21 3:02 ` Benjamin Herrenschmidt
2008-11-13 23:11 ` David Miller
2008-11-13 23:11 ` David Miller
[not found] ` <20081113.151116.139760511.davem-fT/PcQaiUtIeIZ0/mPfg9Q@public.gmane.org>
2008-11-14 0:54 ` Benjamin Herrenschmidt
2008-11-14 0:54 ` Benjamin Herrenschmidt
2008-11-14 2:50 ` David Miller
2008-11-14 2:50 ` David Miller
[not found] ` <20081113.185059.154690040.davem-fT/PcQaiUtIeIZ0/mPfg9Q@public.gmane.org>
2008-11-14 3:04 ` David Miller
2008-11-14 3:04 ` David Miller
[not found] ` <20081113.190447.252605555.davem-fT/PcQaiUtIeIZ0/mPfg9Q@public.gmane.org>
2008-11-14 3:29 ` Benjamin Herrenschmidt
2008-11-14 3:29 ` Benjamin Herrenschmidt
2008-11-14 4:28 ` David Miller
2008-11-14 4:28 ` David Miller
2008-11-14 8:51 ` Benjamin Herrenschmidt
2008-11-09 17:59 ` [Bug #11895] 2.6.28-rc2 regression: keyboard dead after reboot on Toshiba Portege 4000 Rafael J. Wysocki
2008-11-09 17:59 ` Rafael J. Wysocki
2008-11-10 16:53 ` Andrey Borzenkov
[not found] ` <200811101953.38938.arvidjaar-JGs/UdohzUI@public.gmane.org>
2008-11-10 18:06 ` Rafael J. Wysocki
2008-11-10 18:06 ` Rafael J. Wysocki
2008-11-09 17:59 ` [Bug #11898] mke2fs hang on AIC79 device Rafael J. Wysocki
2008-11-09 17:59 ` Rafael J. Wysocki
2008-11-09 17:59 ` [Bug #11896] [2.6.28-rc2] EeePC ACPI errors & exceptions Rafael J. Wysocki
2008-11-09 17:59 ` Rafael J. Wysocki
2008-11-09 17:59 ` [Bug #11899] sometime boot failed on T61 laptop Rafael J. Wysocki
2008-11-09 17:59 ` Rafael J. Wysocki
2008-11-09 17:59 ` [Bug #11906] 2.6.28-rc2 seems to fail at powering down the monitor when it should Rafael J. Wysocki
2008-11-09 17:59 ` Rafael J. Wysocki
2008-11-09 17:59 ` [Bug #11905] lots of extra timer interrupts costing 2W Rafael J. Wysocki
2008-11-09 17:59 ` Rafael J. Wysocki
2008-11-09 17:59 ` [Bug #11903] regression: vmalloc easily fail Rafael J. Wysocki
2008-11-09 17:59 ` Rafael J. Wysocki
2008-11-09 17:59 ` [Bug #11917] Asus Eee PC hotkeys stop working after prolonged usage Rafael J. Wysocki
2008-11-09 17:59 ` Rafael J. Wysocki
2008-11-09 17:59 ` [Bug #11913] USB/INPUT: slab error in cache_alloc_debugcheck_after(): double free? Rafael J. Wysocki
2008-11-09 17:59 ` Rafael J. Wysocki
2008-11-09 17:59 ` [Bug #11908] linux-2.6.28-rc2 regression : oprofile doesnt work anymore Rafael J. Wysocki
2008-11-09 17:59 ` Rafael J. Wysocki
2008-11-09 17:59 ` [Bug #11911] new PCMCIA device instance after resume - orinoco can't download firmware Rafael J. Wysocki
2008-11-09 17:59 ` Rafael J. Wysocki
2008-11-10 3:55 ` Andrey Borzenkov
2008-11-09 17:59 ` [Bug #11928] ath5k gets lost with eeepc-laptop removal Rafael J. Wysocki
2008-11-09 17:59 ` Rafael J. Wysocki
2008-11-09 17:59 ` [Bug #11925] cdrom: missing compat ioctls Rafael J. Wysocki
2008-11-09 17:59 ` Rafael J. Wysocki
2008-11-09 23:00 ` Andreas Schwab
2008-11-09 23:00 ` Andreas Schwab
[not found] ` <jeiqqwjyis.fsf-+JVCjXrnBTholqkO4TVVkw@public.gmane.org>
2008-11-09 23:29 ` Rafael J. Wysocki
2008-11-09 23:29 ` Rafael J. Wysocki
[not found] ` <200811100029.11044.rjw-KKrjLPT3xs0@public.gmane.org>
2008-11-09 23:39 ` Andreas Schwab
2008-11-09 23:39 ` Andreas Schwab
2008-11-09 17:59 ` [Bug #11937] ext3 __log_wait_for_space: no transactions Rafael J. Wysocki
2008-11-09 17:59 ` Rafael J. Wysocki
2008-11-09 17:59 ` [Bug #11942] AMD64 reboot regression Rafael J. Wysocki
2008-11-09 17:59 ` Rafael J. Wysocki
2008-11-09 17:59 ` [Bug #11947] 2.6.28-rc VC switching with Intel graphics broken Rafael J. Wysocki
2008-11-09 17:59 ` Rafael J. Wysocki
2008-11-11 9:28 ` Romano Giannetti
2008-11-11 9:28 ` Romano Giannetti
2008-11-09 17:59 ` [Bug #11965] regression introduced by - timers: fix itimer/many thread hang Rafael J. Wysocki
2008-11-09 17:59 ` Rafael J. Wysocki
2008-11-09 17:59 ` [Bug #11958] [2.6.27.x => 2.6.28-rc3] Xorg crash with xf86MapVidMem error Rafael J. Wysocki
2008-11-09 17:59 ` Rafael J. Wysocki
2008-11-09 17:59 ` [Bug #11985] 2.6.28-rc3 truncates nfsd results Rafael J. Wysocki
2008-11-09 17:59 ` Rafael J. Wysocki
2008-11-09 21:05 ` J. Bruce Fields
2008-11-09 21:05 ` J. Bruce Fields
2008-11-09 17:59 ` [Bug #11982] Fan level 7 after resume wit 2.6.28-rc3 Rafael J. Wysocki
2008-11-09 17:59 ` Rafael J. Wysocki
2008-11-09 17:59 ` [Bug #11984] regression when switching TTY->X, input related? Rafael J. Wysocki
2008-11-09 17:59 ` Rafael J. Wysocki
2008-11-09 17:59 ` [Bug #11970] gettimeofday return a old time in mmbench Rafael J. Wysocki
2008-11-09 17:59 ` Rafael J. Wysocki
2008-11-09 17:59 ` [Bug #11989] Suspend failure on NForce4-based boards due to chanes in stop_machine Rafael J. Wysocki
2008-11-09 17:59 ` Rafael J. Wysocki
2008-11-10 12:04 ` Heiko Carstens
2008-11-10 12:04 ` Heiko Carstens
2008-11-10 14:47 ` Rafael J. Wysocki
[not found] ` <200811101547.21325.rjw-KKrjLPT3xs0@public.gmane.org>
2008-11-10 22:55 ` Rafael J. Wysocki
2008-11-10 22:55 ` Rafael J. Wysocki
[not found] ` <200811102355.42389.rjw-KKrjLPT3xs0@public.gmane.org>
2008-11-11 10:52 ` Ingo Molnar
2008-11-11 10:52 ` Ingo Molnar
[not found] ` <20081111105214.GA15645-X9Un+BFzKDI@public.gmane.org>
2008-11-11 11:31 ` Heiko Carstens
2008-11-11 11:31 ` Heiko Carstens
[not found] ` <20081111113134.GA5653-Pmgahw53EmNLmI7Nx2oIsGnsbthNF6/HVpNB7YpNyf8@public.gmane.org>
2008-11-11 12:42 ` Heiko Carstens
2008-11-11 12:42 ` Heiko Carstens
[not found] ` <20081111124201.GA9459-Pmgahw53EmNLmI7Nx2oIsGnsbthNF6/HVpNB7YpNyf8@public.gmane.org>
2008-11-11 13:13 ` Ingo Molnar
2008-11-11 13:13 ` Ingo Molnar
2008-11-11 14:35 ` Paul E. McKenney
2008-11-11 14:35 ` Paul E. McKenney
2008-11-11 15:01 ` Heiko Carstens
[not found] ` <20081111150132.GB9459-Pmgahw53EmNLmI7Nx2oIsGnsbthNF6/HVpNB7YpNyf8@public.gmane.org>
2008-11-11 16:17 ` Paul E. McKenney
2008-11-11 16:17 ` Paul E. McKenney
2008-11-11 15:02 ` Paul E. McKenney
[not found] ` <20081111150225.GA10743-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
2008-11-11 16:14 ` Heiko Carstens
2008-11-11 16:14 ` Heiko Carstens
[not found] ` <20081111161401.GC9459-Pmgahw53EmNLmI7Nx2oIsGnsbthNF6/HVpNB7YpNyf8@public.gmane.org>
2008-11-11 16:45 ` Paul E. McKenney
2008-11-11 16:45 ` Paul E. McKenney
[not found] ` <20081111164523.GB6736-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
2008-11-11 17:34 ` Paul E. McKenney [this message]
2008-11-11 17:34 ` Paul E. McKenney
[not found] ` <20081111173451.GA24720-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
2008-11-12 9:05 ` Heiko Carstens
2008-11-12 9:05 ` Heiko Carstens
2008-11-12 16:03 ` Paul E. McKenney
[not found] ` <20081112160349.GA6667-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
2008-11-12 16:51 ` Heiko Carstens
2008-11-12 16:51 ` Heiko Carstens
[not found] ` <20081112165118.GA30743-Pmgahw53EmNLmI7Nx2oIsGnsbthNF6/HVpNB7YpNyf8@public.gmane.org>
2008-11-12 19:43 ` Paul E. McKenney
2008-11-12 19:43 ` Paul E. McKenney
2008-11-11 17:03 ` Q: force_quiescent_state && cpu_online_map Oleg Nesterov
2008-11-11 17:03 ` Oleg Nesterov
[not found] ` <20081111170327.GB18214-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2008-11-11 17:25 ` Paul E. McKenney
2008-11-11 17:25 ` Paul E. McKenney
2008-11-11 13:36 ` [Bug #11989] Suspend failure on NForce4-based boards due to chanes in stop_machine Vegard Nossum
2008-11-11 13:36 ` Vegard Nossum
2008-11-11 13:46 ` Vegard Nossum
[not found] ` <19f34abd0811110536i71994436q4aa78a99d201c478-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2008-11-11 13:49 ` Peter Zijlstra
2008-11-11 13:49 ` Peter Zijlstra
2008-11-11 14:47 ` Vegard Nossum
2008-11-11 14:47 ` Vegard Nossum
[not found] ` <19f34abd0811110647y2a00cfbfr2b219a5aa1b3ac9f-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2008-11-11 15:11 ` Dmitry Adamushko
2008-11-11 15:11 ` Dmitry Adamushko
2008-11-11 16:31 ` Oleg Nesterov
[not found] ` <20081111163118.GA18214-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2008-11-12 3:30 ` Rusty Russell
2008-11-12 3:30 ` Rusty Russell
2008-11-12 3:39 ` Rusty Russell
2008-11-12 3:39 ` Rusty Russell
[not found] ` <200811112256.58467.rusty-8n+1lVoiYb80n/F98K4Iww@public.gmane.org>
2008-11-15 13:37 ` Rafael J. Wysocki
2008-11-15 13:37 ` Rafael J. Wysocki
2008-11-11 21:28 ` Dmitry Adamushko
2008-11-11 21:28 ` Dmitry Adamushko
[not found] ` <b647ffbd0811111328s6a0cd185we3316be5e8f5ce-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2008-11-11 23:43 ` Rafael J. Wysocki
2008-11-11 23:43 ` Rafael J. Wysocki
2008-11-09 17:59 ` [Bug #11988] Eliminate recursive mutex in compat fb ioctl path Rafael J. Wysocki
2008-11-09 17:59 ` Rafael J. Wysocki
2008-11-14 14:51 ` Geert Uytterhoeven
2008-11-14 14:51 ` Geert Uytterhoeven
[not found] ` <Pine.LNX.4.64.0811141549140.5955-DVqXPGhgXSn9uFGNBm7GzQ@public.gmane.org>
2008-11-15 11:51 ` Rafael J. Wysocki
2008-11-15 11:51 ` Rafael J. Wysocki
2008-11-09 17:59 ` [Bug #11994] Computer doesn't power down after commit CPI: EC: do transaction from interrupt context Rafael J. Wysocki
2008-11-09 17:59 ` Rafael J. Wysocki
2008-11-09 17:59 ` [Bug #11987] Bootup time regression from 2.6.27 to 2.6.28-rc3+ Rafael J. Wysocki
2008-11-09 17:59 ` Rafael J. Wysocki
2008-11-09 17:59 ` [Bug #11986] 2.6.28-rc2-git1: spitz still won't boot Rafael J. Wysocki
2008-11-09 17:59 ` Rafael J. Wysocki
2008-11-09 17:59 ` [Bug #11996] Tracing framework regression in 2.6.28-rc3 Rafael J. Wysocki
2008-11-09 17:59 ` Rafael J. Wysocki
-- strict thread matches above, loose matches on Subject: below --
2008-11-16 16:24 2.6.28-rc5: Reported regressions from 2.6.27 Rafael J. Wysocki
2008-11-16 16:35 ` [Bug #11989] Suspend failure on NForce4-based boards due to chanes in stop_machine Rafael J. Wysocki
2008-11-16 16:35 ` Rafael J. Wysocki
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20081111173451.GA24720@linux.vnet.ibm.com \
--to=paulmck-23vcf4htsmix0ybbhkvfkdbpr1lh4cv8@public.gmane.org \
--cc=a.p.zijlstra-/NLkJaSkS4VmR6Xm/wNWPw@public.gmane.org \
--cc=akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org \
--cc=dmitry.adamushko-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=heiko.carstens-tA70FqPdS9bQT0dZR+AlfA@public.gmane.org \
--cc=kernel-testers-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=mingo-X9Un+BFzKDI@public.gmane.org \
--cc=oleg-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=rjw-KKrjLPT3xs0@public.gmane.org \
--cc=rusty-8n+1lVoiYb80n/F98K4Iww@public.gmane.org \
--cc=srostedt-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=vegard.nossum-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.