From 7ce52b096fcbca2f04c1f7b1d0734e22a9fa92a5 Mon Sep 17 00:00:00 2001 From: "David S. Miller" Date: Thu, 19 Jul 2007 22:51:07 -0700 Subject: [PATCH] --- yaml --- r: 62289 b: refs/heads/master c: 58fb666643acee28d347de0b59bb938844c22f83 h: refs/heads/master i: 62287: 29c92aa4bb037febdea138f2261e637ae2fc413f v: v3 --- [refs] | 2 +- trunk/arch/sparc64/kernel/vio.c | 35 +++++++++++++++------------------ 2 files changed, 17 insertions(+), 20 deletions(-) diff --git a/[refs] b/[refs] index 41dde3067390..a0040c78b192 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 3d6e470236bc759f43c9f2377899b526a50e2e63 +refs/heads/master: 58fb666643acee28d347de0b59bb938844c22f83 diff --git a/trunk/arch/sparc64/kernel/vio.c b/trunk/arch/sparc64/kernel/vio.c index 491223a6628f..3685daf5157f 100644 --- a/trunk/arch/sparc64/kernel/vio.c +++ b/trunk/arch/sparc64/kernel/vio.c @@ -205,7 +205,8 @@ static struct vio_dev *vio_create_one(struct mdesc_handle *hp, u64 mp, struct device_node *dp; struct vio_dev *vdev; int err, tlen, clen; - const u64 *id; + const u64 *id, *cfg_handle; + u64 a; type = mdesc_get_property(hp, mp, "device-type", &tlen); if (!type) { @@ -221,26 +222,18 @@ static struct vio_dev *vio_create_one(struct mdesc_handle *hp, u64 mp, return NULL; } - if (!strcmp(type, "vdc-port")) { - u64 a; + id = mdesc_get_property(hp, mp, "id", NULL); - id = NULL; - mdesc_for_each_arc(a, hp, mp, MDESC_ARC_TYPE_BACK) { - u64 target; + cfg_handle = NULL; + mdesc_for_each_arc(a, hp, mp, MDESC_ARC_TYPE_BACK) { + u64 target; - target = mdesc_arc_target(hp, a); - id = mdesc_get_property(hp, target, + target = mdesc_arc_target(hp, a); + cfg_handle = mdesc_get_property(hp, target, "cfg-handle", NULL); - if (id) - break; - } - if (!id) { - printk(KERN_ERR "VIO: vdc-port lacks parent " - "cfg-handle.\n"); - return NULL; - } - } else - id = mdesc_get_property(hp, mp, "id", NULL); + if (cfg_handle) + break; + } bus_id_name = type; if (!strcmp(type, "domain-services-port")) @@ -285,10 +278,14 @@ static struct vio_dev *vio_create_one(struct mdesc_handle *hp, u64 mp, snprintf(vdev->dev.bus_id, BUS_ID_SIZE, "%s", bus_id_name); vdev->dev_no = ~(u64)0; - } else { + } else if (!cfg_handle) { snprintf(vdev->dev.bus_id, BUS_ID_SIZE, "%s-%lu", bus_id_name, *id); vdev->dev_no = *id; + } else { + snprintf(vdev->dev.bus_id, BUS_ID_SIZE, "%s-%lu-%lu", + bus_id_name, *cfg_handle, *id); + vdev->dev_no = *cfg_handle; } vdev->dev.parent = parent;