|
@@ -1467,8 +1467,6 @@ t_next(struct seq_file *m, void *v, loff_t *pos)
|
|
iter->pg = iter->pg->next;
|
|
iter->pg = iter->pg->next;
|
|
iter->idx = 0;
|
|
iter->idx = 0;
|
|
goto retry;
|
|
goto retry;
|
|
- } else {
|
|
|
|
- iter->idx = -1;
|
|
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
rec = &iter->pg->records[iter->idx++];
|
|
rec = &iter->pg->records[iter->idx++];
|
|
@@ -1497,6 +1495,7 @@ static void *t_start(struct seq_file *m, loff_t *pos)
|
|
{
|
|
{
|
|
struct ftrace_iterator *iter = m->private;
|
|
struct ftrace_iterator *iter = m->private;
|
|
void *p = NULL;
|
|
void *p = NULL;
|
|
|
|
+ loff_t l;
|
|
|
|
|
|
mutex_lock(&ftrace_lock);
|
|
mutex_lock(&ftrace_lock);
|
|
/*
|
|
/*
|
|
@@ -1508,23 +1507,21 @@ static void *t_start(struct seq_file *m, loff_t *pos)
|
|
if (*pos > 0)
|
|
if (*pos > 0)
|
|
return t_hash_start(m, pos);
|
|
return t_hash_start(m, pos);
|
|
iter->flags |= FTRACE_ITER_PRINTALL;
|
|
iter->flags |= FTRACE_ITER_PRINTALL;
|
|
- (*pos)++;
|
|
|
|
return iter;
|
|
return iter;
|
|
}
|
|
}
|
|
|
|
|
|
if (iter->flags & FTRACE_ITER_HASH)
|
|
if (iter->flags & FTRACE_ITER_HASH)
|
|
return t_hash_start(m, pos);
|
|
return t_hash_start(m, pos);
|
|
|
|
|
|
- if (*pos > 0) {
|
|
|
|
- if (iter->idx < 0)
|
|
|
|
- return p;
|
|
|
|
- (*pos)--;
|
|
|
|
- iter->idx--;
|
|
|
|
|
|
+ iter->pg = ftrace_pages_start;
|
|
|
|
+ iter->idx = 0;
|
|
|
|
+ for (l = 0; l <= *pos; ) {
|
|
|
|
+ p = t_next(m, p, &l);
|
|
|
|
+ if (!p)
|
|
|
|
+ break;
|
|
}
|
|
}
|
|
|
|
|
|
- p = t_next(m, p, pos);
|
|
|
|
-
|
|
|
|
- if (!p)
|
|
|
|
|
|
+ if (!p && iter->flags & FTRACE_ITER_FILTER)
|
|
return t_hash_start(m, pos);
|
|
return t_hash_start(m, pos);
|
|
|
|
|
|
return p;
|
|
return p;
|