X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fpci%2Fhotplug%2Frpaphp_vio.c;h=d82b6649ed8c6ef9e907fe373d8b69451bbdbac6;hb=9bf4aaab3e101692164d49b7ca357651eb691cb6;hp=29d7ca6ba2dc37fab908b8a9ec2a0f766b64e268;hpb=db216c3d5e4c040e557a50f8f5d35d5c415e8c1c;p=linux-2.6.git diff --git a/drivers/pci/hotplug/rpaphp_vio.c b/drivers/pci/hotplug/rpaphp_vio.c index 29d7ca6ba..d82b6649e 100644 --- a/drivers/pci/hotplug/rpaphp_vio.c +++ b/drivers/pci/hotplug/rpaphp_vio.c @@ -74,20 +74,27 @@ int register_vio_slot(struct device_node *dn) int rc = 1; struct slot *slot = NULL; + name = rpaphp_get_drc_name(dn); + if (!name) + goto exit_rc; index = (u32 *) get_property(dn, "ibm,my-drc-index", NULL); if (!index) goto exit_rc; - name = get_property(dn, "ibm,loc-code", NULL); - if (!name) - goto exit_rc; if (!(slot = alloc_slot_struct(dn, *index, name, 0))) { rc = -ENOMEM; goto exit_rc; } slot->dev_type = VIO_DEV; slot->dev.vio_dev = vio_find_node(dn); - if (!slot->dev.vio_dev) - slot->dev.vio_dev = vio_register_device(dn); + if (slot->dev.vio_dev) { + /* + * rpaphp is the only owner of vio devices and + * does not need extra reference taken by + * vio_find_node + */ + put_device(&slot->dev.vio_dev->dev); + } else + slot->dev.vio_dev = vio_register_device_node(dn); if (slot->dev.vio_dev) slot->state = CONFIGURED; else @@ -108,7 +115,7 @@ int rpaphp_enable_vio_slot(struct slot *slot) { int retval = 0; - if ((slot->dev.vio_dev = vio_register_device(slot->dn))) { + if ((slot->dev.vio_dev = vio_register_device_node(slot->dn))) { info("%s: VIO adapter %s in slot[%s] has been configured\n", __FUNCTION__, slot->dn->name, slot->name); slot->state = CONFIGURED;