ChangeSet 1.1587.12.66, 2004/04/30 15:03:58-07:00, eike-hotplug@sf-tec.de [PATCH] RPA PCI Hotplug: use goto for error handling in rpaphp_slot.c Convert rpaphp_slot.c::alloc_slot_struct to use goto for error handling. Also some small coding style fixes. drivers/pci/hotplug/rpaphp_slot.c | 64 +++++++++++++++++++------------------- 1 files changed, 32 insertions(+), 32 deletions(-) diff -Nru a/drivers/pci/hotplug/rpaphp_slot.c b/drivers/pci/hotplug/rpaphp_slot.c --- a/drivers/pci/hotplug/rpaphp_slot.c Mon May 17 16:59:09 2004 +++ b/drivers/pci/hotplug/rpaphp_slot.c Mon May 17 16:59:09 2004 @@ -80,54 +80,52 @@ { struct slot *slot; - dbg("Enter alloc_slot_struct(): dn->full_name=%s drc_index=0x%x drc_name=%s\n", - dn->full_name, drc_index, drc_name); + dbg("Enter %s: dn->full_name=%s drc_index=0x%x drc_name=%s\n", + __FUNCTION__, dn->full_name, drc_index, drc_name); slot = kmalloc(sizeof (struct slot), GFP_KERNEL); if (!slot) - return (NULL); + goto error_nomem; memset(slot, 0, sizeof (struct slot)); slot->hotplug_slot = kmalloc(sizeof (struct hotplug_slot), GFP_KERNEL); - if (!slot->hotplug_slot) { - kfree(slot); - return (NULL); - } + if (!slot->hotplug_slot) + goto error_hpslot; memset(slot->hotplug_slot, 0, sizeof (struct hotplug_slot)); slot->hotplug_slot->info = kmalloc(sizeof (struct hotplug_slot_info), GFP_KERNEL); - if (!slot->hotplug_slot->info) { - kfree(slot->hotplug_slot); - kfree(slot); - return (NULL); - } + if (!slot->hotplug_slot->info) + goto error_hoslot; memset(slot->hotplug_slot->info, 0, sizeof (struct hotplug_slot_info)); slot->hotplug_slot->name = kmalloc(BUS_ID_SIZE + 1, GFP_KERNEL); - if (!slot->hotplug_slot->name) { - kfree(slot->hotplug_slot->info); - kfree(slot->hotplug_slot); - kfree(slot); - return (NULL); - } + if (!slot->hotplug_slot->name) + goto error_name; slot->location = kmalloc(strlen(drc_name) + 1, GFP_KERNEL); - if (!slot->location) { - kfree(slot->hotplug_slot->info); - kfree(slot->hotplug_slot->name); - kfree(slot->hotplug_slot); - kfree(slot); - return (NULL); - } + if (!slot->location) + goto error_info; slot->name = slot->hotplug_slot->name; slot->dn = dn; slot->index = drc_index; strcpy(slot->location, drc_name); slot->power_domain = power_domain; - slot->magic = SLOT_MAGIC; slot->hotplug_slot->private = slot; slot->hotplug_slot->ops = &rpaphp_hotplug_slot_ops; slot->hotplug_slot->release = &rpaphp_release_slot; - dbg("Exit alloc_slot_struct(): slot->dn->full_name=%s drc_index=0x%x drc_name=%s\n", - slot->dn->full_name, slot->index, slot->name); - return (slot); + slot->hotplug_slot->info->cur_bus_speed = PCI_SPEED_UNKNOWN; + dbg("Exit %s: slot->dn->full_name=%s drc_index=0x%x drc_name=%s\n", + __FUNCTION__, slot->dn->full_name, slot->index, slot->name); + + return slot; + +error_info: + kfree(slot->hotplug_slot->info); +error_name: + kfree(slot->hotplug_slot->name); +error_hpslot: + kfree(slot->hotplug_slot); +error_slot: + kfree(slot); +error_nomem: + return NULL; } int register_slot(struct slot *slot) @@ -135,13 +133,15 @@ int retval; char *vio_uni_addr = NULL; - dbg("%s registering slot:path[%s] index[%x], name[%s] pdomain[%x] type[%d]\n", __FUNCTION__, slot->dn->full_name, slot->index, slot->name, slot->power_domain, slot->type); + dbg("%s registering slot:path[%s] index[%x], name[%s] pdomain[%x] type[%d]\n", + __FUNCTION__, slot->dn->full_name, slot->index, slot->name, + slot->power_domain, slot->type); retval = pci_hp_register(slot->hotplug_slot); if (retval) { err("pci_hp_register failed with error %d\n", retval); rpaphp_release_slot(slot->hotplug_slot); - return (retval); + return retval; } /* create "phy_locatoin" file */ @@ -160,7 +160,7 @@ info("Slot [%s](bus_id=%s) registered\n", slot->name, pci_name(slot->bridge)); num_slots++; - return (0); + return 0; } int rpaphp_get_power_status(struct slot *slot, u8 * value)