aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/rcutree_trace.c
diff options
context:
space:
mode:
authorMichael Wang <wangyun@linux.vnet.ibm.com>2012-09-19 20:51:04 -0400
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>2012-11-08 14:50:16 -0500
commit878eda72e24d11e463a25b1dc7097a8d953f17cb (patch)
treec1e3196ade3e7d4aa02dbaacdd102d820439571b /kernel/rcutree_trace.c
parent374b928ee8061fdbb0b527fb3924080ba2437767 (diff)
rcu: Optimize the 'rcudata' for RCU trace
This patch implements the new 'rcudata' interface under each rsp directory, by using the 'CPU units sequence reading', thus avoiding loss of tracing data. Signed-off-by: Michael Wang <wangyun@linux.vnet.ibm.com> Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Diffstat (limited to 'kernel/rcutree_trace.c')
-rw-r--r--kernel/rcutree_trace.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/kernel/rcutree_trace.c b/kernel/rcutree_trace.c
index 0dfe9b512f0f..a11522f62c71 100644
--- a/kernel/rcutree_trace.c
+++ b/kernel/rcutree_trace.c
@@ -174,6 +174,32 @@ static const struct file_operations rcudata_fops = {
174 .release = single_release, 174 .release = single_release,
175}; 175};
176 176
177static int new_show_rcudata(struct seq_file *m, void *v)
178{
179 print_one_rcu_data(m, (struct rcu_data *)v);
180 return 0;
181}
182
183static const struct seq_operations new_rcudate_op = {
184 .start = r_start,
185 .next = r_next,
186 .stop = r_stop,
187 .show = new_show_rcudata,
188};
189
190static int new_rcudata_open(struct inode *inode, struct file *file)
191{
192 return r_open(inode, file, &new_rcudate_op);
193}
194
195static const struct file_operations new_rcudata_fops = {
196 .owner = THIS_MODULE,
197 .open = new_rcudata_open,
198 .read = seq_read,
199 .llseek = no_llseek,
200 .release = seq_release,
201};
202
177static void print_one_rcu_data_csv(struct seq_file *m, struct rcu_data *rdp) 203static void print_one_rcu_data_csv(struct seq_file *m, struct rcu_data *rdp)
178{ 204{
179 if (!rdp->beenonline) 205 if (!rdp->beenonline)
@@ -488,6 +514,11 @@ static int __init rcutree_trace_init(void)
488 rspdir = debugfs_create_dir(rsp->name, rcudir); 514 rspdir = debugfs_create_dir(rsp->name, rcudir);
489 if (!rspdir) 515 if (!rspdir)
490 goto free_out; 516 goto free_out;
517
518 retval = debugfs_create_file("rcudata", 0444,
519 rspdir, rsp, &new_rcudata_fops);
520 if (!retval)
521 goto free_out;
491 } 522 }
492 523
493 retval = debugfs_create_file("rcubarrier", 0444, rcudir, 524 retval = debugfs_create_file("rcubarrier", 0444, rcudir,