diff options
author | Michael Wang <wangyun@linux.vnet.ibm.com> | 2012-09-19 20:51:04 -0400 |
---|---|---|
committer | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2012-11-08 14:50:16 -0500 |
commit | 878eda72e24d11e463a25b1dc7097a8d953f17cb (patch) | |
tree | c1e3196ade3e7d4aa02dbaacdd102d820439571b /kernel/rcutree_trace.c | |
parent | 374b928ee8061fdbb0b527fb3924080ba2437767 (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.c | 31 |
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 | ||
177 | static 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 | |||
183 | static 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 | |||
190 | static int new_rcudata_open(struct inode *inode, struct file *file) | ||
191 | { | ||
192 | return r_open(inode, file, &new_rcudate_op); | ||
193 | } | ||
194 | |||
195 | static 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 | |||
177 | static void print_one_rcu_data_csv(struct seq_file *m, struct rcu_data *rdp) | 203 | static 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, |