"Itf Type    ESI/\"MAC\"addr "
                "AAL(TX,err,RX,err,drop) ...               [refcnt]\n";
 
-       if (v == SEQ_START_TOKEN)
+       if (v == &atm_devs)
                seq_puts(seq, atm_dev_banner);
        else {
                struct atm_dev *dev = list_entry(v, struct atm_dev, dev_list);
 
        return error;
 }
 
-static inline void *dev_get_idx(loff_t left)
-{
-       struct list_head *p;
-
-       list_for_each(p, &atm_devs) {
-               if (!--left)
-                       break;
-       }
-       return (p != &atm_devs) ? p : NULL;
-}
-
 void *atm_dev_seq_start(struct seq_file *seq, loff_t *pos)
 {
        mutex_lock(&atm_dev_mutex);
-       return *pos ? dev_get_idx(*pos) : SEQ_START_TOKEN;
+       return seq_list_start_head(&atm_devs, *pos);
 }
 
 void atm_dev_seq_stop(struct seq_file *seq, void *v)
 
 void *atm_dev_seq_next(struct seq_file *seq, void *v, loff_t *pos)
 {
-       ++*pos;
-       v = (v == SEQ_START_TOKEN)
-               ? atm_devs.next : ((struct list_head *)v)->next;
-       return (v == &atm_devs) ? NULL : v;
+       return seq_list_next(v, &atm_devs, pos);
 }