186{
187 long i;
188
189 (*pos)++;
190
191 if (v == SEQ_START_TOKEN)
192 i = 0;
193 else {
194 i = *(long *)v;
195 i++;
196 }
197
198 if (i >= max_stack_trace.nr_entries ||
199 stack_dump_trace[i] == ULONG_MAX)
200 return NULL;
201
202 m->private = (void *)i;
203
204 return &m->private;
205}
206
207static void *t_start(struct seq_file *m, loff_t *pos)
208{
209 void *t = SEQ_START_TOKEN;
210 loff_t l = 0;
211
212 local_irq_disable();
213 __raw_spin_lock(&max_stack_lock);
214
215 if (*pos == 0)
216 return SEQ_START_TOKEN;
217
218 for (; t && l < *pos; t = t_next(m, t, &l))
219 ;
220
221 return t;
222}
223
224static void t_stop(struct seq_file *m, void *p)
225{
226 __raw_spin_unlock(&max_stack_lock);