Index: arch/parisc/kernel/drivers.c =================================================================== RCS file: /var/cvs/linux-2.6/arch/parisc/kernel/drivers.c,v retrieving revision 1.24 diff -u -r1.24 drivers.c --- arch/parisc/kernel/drivers.c 19 Jul 2005 03:49:49 -0000 1.24 +++ arch/parisc/kernel/drivers.c 26 Jul 2005 22:47:12 -0000 @@ -470,10 +470,11 @@ struct match_id_data d = { .id = id, }; - int ret; - ret = for_each_padev(match_by_id, &d); - return ret ? create_tree_node(id, parent) : NULL; + if (device_for_each_child(parent, &d, match_by_id)) + return d.dev; + else + return create_tree_node(id, parent); } static struct parisc_device *create_parisc_device(struct hardware_path *modpath) Index: drivers/parisc/gsc.c =================================================================== RCS file: /var/cvs/linux-2.6/drivers/parisc/gsc.c,v retrieving revision 1.21 diff -u -r1.21 gsc.c --- drivers/parisc/gsc.c 23 Jan 2005 00:09:47 -0000 1.21 +++ drivers/parisc/gsc.c 26 Jul 2005 22:47:21 -0000 @@ -186,9 +186,13 @@ void gsc_fixup_irqs(struct parisc_device *parent, void *ctrl, void (*choose_irq)(struct parisc_device *, void *)) { + extern struct device * next_device(struct klist_iter * i); + struct device *dev; + struct klist_iter i; - list_for_each_entry(dev, &parent->dev.children, node) { + klist_iter_init(&parent->dev.klist_children, &i); + while ((dev = next_device(&i))) { struct parisc_device *padev = to_parisc_device(dev); /* work-around for 715/64 and others which have parent @@ -197,6 +201,7 @@ return gsc_fixup_irqs(padev, ctrl, choose_irq); choose_irq(padev, ctrl); } + klist_iter_exit(&i); } int gsc_common_setup(struct parisc_device *parent, struct gsc_asic *gsc_asic)