diff -upr linux-2.6.17/drivers/net/sunlance.c linux-new/drivers/net/sunlance.c --- linux-2.6.17/drivers/net/sunlance.c 2006-08-10 08:58:34.000000000 +0200 +++ linux-new/drivers/net/sunlance.c 2006-08-12 15:02:20.000000000 +0200 @@ -1570,7 +1570,17 @@ static int __devinit sunlance_sbus_probe int err; if (!strcmp(dp->name, "le")) { - err = sparc_lance_probe_one(sdev, NULL, NULL); + if (sdev->parent) { + struct of_device *parent = &sdev->parent->ofdev; + + if (!strcmp(parent->node->name, "ledma") || + !strcmp(parent->node->name, "lebuffer")) { + /* this is a child of already probed device */ + err = 0; + } else + err = sparc_lance_probe_one(sdev->child, NULL, NULL); + } else + err = sparc_lance_probe_one(sdev->child, NULL, NULL); } else if (!strcmp(dp->name, "ledma")) { struct sbus_dma *ledma = find_ledma(sdev);