diff options
Diffstat (limited to 'drivers/pci/hotplug/acpiphp_core.c')
-rw-r--r-- | drivers/pci/hotplug/acpiphp_core.c | 39 |
1 files changed, 8 insertions, 31 deletions
diff --git a/drivers/pci/hotplug/acpiphp_core.c b/drivers/pci/hotplug/acpiphp_core.c index c57d9d5ce84e..40c79b03c7ef 100644 --- a/drivers/pci/hotplug/acpiphp_core.c +++ b/drivers/pci/hotplug/acpiphp_core.c | |||
@@ -303,25 +303,15 @@ static int __init init_acpi(void) | |||
303 | /* read initial number of slots */ | 303 | /* read initial number of slots */ |
304 | if (!retval) { | 304 | if (!retval) { |
305 | num_slots = acpiphp_get_num_slots(); | 305 | num_slots = acpiphp_get_num_slots(); |
306 | if (num_slots == 0) | 306 | if (num_slots == 0) { |
307 | acpiphp_glue_exit(); | ||
307 | retval = -ENODEV; | 308 | retval = -ENODEV; |
309 | } | ||
308 | } | 310 | } |
309 | 311 | ||
310 | return retval; | 312 | return retval; |
311 | } | 313 | } |
312 | 314 | ||
313 | |||
314 | /** | ||
315 | * make_slot_name - make a slot name that appears in pcihpfs | ||
316 | * @slot: slot to name | ||
317 | * | ||
318 | */ | ||
319 | static void make_slot_name(struct slot *slot) | ||
320 | { | ||
321 | snprintf(slot->hotplug_slot->name, SLOT_NAME_SIZE, "%u", | ||
322 | slot->acpi_slot->sun); | ||
323 | } | ||
324 | |||
325 | /** | 315 | /** |
326 | * release_slot - free up the memory used by a slot | 316 | * release_slot - free up the memory used by a slot |
327 | * @hotplug_slot: slot to free | 317 | * @hotplug_slot: slot to free |
@@ -332,8 +322,6 @@ static void release_slot(struct hotplug_slot *hotplug_slot) | |||
332 | 322 | ||
333 | dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); | 323 | dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); |
334 | 324 | ||
335 | kfree(slot->hotplug_slot->info); | ||
336 | kfree(slot->hotplug_slot->name); | ||
337 | kfree(slot->hotplug_slot); | 325 | kfree(slot->hotplug_slot); |
338 | kfree(slot); | 326 | kfree(slot); |
339 | } | 327 | } |
@@ -342,26 +330,19 @@ static void release_slot(struct hotplug_slot *hotplug_slot) | |||
342 | int acpiphp_register_hotplug_slot(struct acpiphp_slot *acpiphp_slot) | 330 | int acpiphp_register_hotplug_slot(struct acpiphp_slot *acpiphp_slot) |
343 | { | 331 | { |
344 | struct slot *slot; | 332 | struct slot *slot; |
345 | struct hotplug_slot *hotplug_slot; | ||
346 | struct hotplug_slot_info *hotplug_slot_info; | ||
347 | int retval = -ENOMEM; | 333 | int retval = -ENOMEM; |
348 | 334 | ||
349 | slot = kzalloc(sizeof(*slot), GFP_KERNEL); | 335 | slot = kzalloc(sizeof(*slot), GFP_KERNEL); |
350 | if (!slot) | 336 | if (!slot) |
351 | goto error; | 337 | goto error; |
352 | 338 | ||
353 | slot->hotplug_slot = kzalloc(sizeof(*hotplug_slot), GFP_KERNEL); | 339 | slot->hotplug_slot = kzalloc(sizeof(*slot->hotplug_slot), GFP_KERNEL); |
354 | if (!slot->hotplug_slot) | 340 | if (!slot->hotplug_slot) |
355 | goto error_slot; | 341 | goto error_slot; |
356 | 342 | ||
357 | slot->hotplug_slot->info = kzalloc(sizeof(*hotplug_slot_info), | 343 | slot->hotplug_slot->info = &slot->info; |
358 | GFP_KERNEL); | ||
359 | if (!slot->hotplug_slot->info) | ||
360 | goto error_hpslot; | ||
361 | 344 | ||
362 | slot->hotplug_slot->name = kzalloc(SLOT_NAME_SIZE, GFP_KERNEL); | 345 | slot->hotplug_slot->name = slot->name; |
363 | if (!slot->hotplug_slot->name) | ||
364 | goto error_info; | ||
365 | 346 | ||
366 | slot->hotplug_slot->private = slot; | 347 | slot->hotplug_slot->private = slot; |
367 | slot->hotplug_slot->release = &release_slot; | 348 | slot->hotplug_slot->release = &release_slot; |
@@ -376,21 +357,17 @@ int acpiphp_register_hotplug_slot(struct acpiphp_slot *acpiphp_slot) | |||
376 | slot->hotplug_slot->info->cur_bus_speed = PCI_SPEED_UNKNOWN; | 357 | slot->hotplug_slot->info->cur_bus_speed = PCI_SPEED_UNKNOWN; |
377 | 358 | ||
378 | acpiphp_slot->slot = slot; | 359 | acpiphp_slot->slot = slot; |
379 | make_slot_name(slot); | 360 | snprintf(slot->name, sizeof(slot->name), "%u", slot->acpi_slot->sun); |
380 | 361 | ||
381 | retval = pci_hp_register(slot->hotplug_slot); | 362 | retval = pci_hp_register(slot->hotplug_slot); |
382 | if (retval) { | 363 | if (retval) { |
383 | err("pci_hp_register failed with error %d\n", retval); | 364 | err("pci_hp_register failed with error %d\n", retval); |
384 | goto error_name; | 365 | goto error_hpslot; |
385 | } | 366 | } |
386 | 367 | ||
387 | info("Slot [%s] registered\n", slot->hotplug_slot->name); | 368 | info("Slot [%s] registered\n", slot->hotplug_slot->name); |
388 | 369 | ||
389 | return 0; | 370 | return 0; |
390 | error_name: | ||
391 | kfree(slot->hotplug_slot->name); | ||
392 | error_info: | ||
393 | kfree(slot->hotplug_slot->info); | ||
394 | error_hpslot: | 371 | error_hpslot: |
395 | kfree(slot->hotplug_slot); | 372 | kfree(slot->hotplug_slot); |
396 | error_slot: | 373 | error_slot: |