lockdep: Simplify lockdep seqfile code
Use seq_list_start_head() and seq_list_next(). Signed-off-by: Li Zefan <lizf@cn.fujitsu.com> Cc: Peter Zijlstra <peterz@infradead.org> LKML-Reference: <4A88ED41.5000000@cn.fujitsu.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
e9d65725bd
commit
8109e1de85
@ -25,38 +25,12 @@
|
|||||||
|
|
||||||
static void *l_next(struct seq_file *m, void *v, loff_t *pos)
|
static void *l_next(struct seq_file *m, void *v, loff_t *pos)
|
||||||
{
|
{
|
||||||
struct lock_class *class;
|
return seq_list_next(v, &all_lock_classes, pos);
|
||||||
|
|
||||||
(*pos)++;
|
|
||||||
|
|
||||||
if (v == SEQ_START_TOKEN)
|
|
||||||
class = m->private;
|
|
||||||
else {
|
|
||||||
class = v;
|
|
||||||
|
|
||||||
if (class->lock_entry.next != &all_lock_classes)
|
|
||||||
class = list_entry(class->lock_entry.next,
|
|
||||||
struct lock_class, lock_entry);
|
|
||||||
else
|
|
||||||
class = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return class;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void *l_start(struct seq_file *m, loff_t *pos)
|
static void *l_start(struct seq_file *m, loff_t *pos)
|
||||||
{
|
{
|
||||||
struct lock_class *class;
|
return seq_list_start_head(&all_lock_classes, *pos);
|
||||||
loff_t i = 0;
|
|
||||||
|
|
||||||
if (*pos == 0)
|
|
||||||
return SEQ_START_TOKEN;
|
|
||||||
|
|
||||||
list_for_each_entry(class, &all_lock_classes, lock_entry) {
|
|
||||||
if (++i == *pos)
|
|
||||||
return class;
|
|
||||||
}
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void l_stop(struct seq_file *m, void *v)
|
static void l_stop(struct seq_file *m, void *v)
|
||||||
@ -82,11 +56,11 @@ static void print_name(struct seq_file *m, struct lock_class *class)
|
|||||||
|
|
||||||
static int l_show(struct seq_file *m, void *v)
|
static int l_show(struct seq_file *m, void *v)
|
||||||
{
|
{
|
||||||
struct lock_class *class = v;
|
struct lock_class *class = list_entry(v, struct lock_class, lock_entry);
|
||||||
struct lock_list *entry;
|
struct lock_list *entry;
|
||||||
char usage[LOCK_USAGE_CHARS];
|
char usage[LOCK_USAGE_CHARS];
|
||||||
|
|
||||||
if (v == SEQ_START_TOKEN) {
|
if (v == &all_lock_classes) {
|
||||||
seq_printf(m, "all lock classes:\n");
|
seq_printf(m, "all lock classes:\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -128,17 +102,7 @@ static const struct seq_operations lockdep_ops = {
|
|||||||
|
|
||||||
static int lockdep_open(struct inode *inode, struct file *file)
|
static int lockdep_open(struct inode *inode, struct file *file)
|
||||||
{
|
{
|
||||||
int res = seq_open(file, &lockdep_ops);
|
return seq_open(file, &lockdep_ops);
|
||||||
if (!res) {
|
|
||||||
struct seq_file *m = file->private_data;
|
|
||||||
|
|
||||||
if (!list_empty(&all_lock_classes))
|
|
||||||
m->private = list_entry(all_lock_classes.next,
|
|
||||||
struct lock_class, lock_entry);
|
|
||||||
else
|
|
||||||
m->private = NULL;
|
|
||||||
}
|
|
||||||
return res;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct file_operations proc_lockdep_operations = {
|
static const struct file_operations proc_lockdep_operations = {
|
||||||
|
Loading…
Reference in New Issue
Block a user