diff options
-rw-r--r-- | drivers/pci/hotplug/acpiphp_glue.c | 58 |
1 files changed, 17 insertions, 41 deletions
diff --git a/drivers/pci/hotplug/acpiphp_glue.c b/drivers/pci/hotplug/acpiphp_glue.c index 392e4b3fa2e4..8f4a2073d83a 100644 --- a/drivers/pci/hotplug/acpiphp_glue.c +++ b/drivers/pci/hotplug/acpiphp_glue.c | |||
@@ -309,17 +309,13 @@ static void init_bridge_misc(struct acpiphp_bridge *bridge) | |||
309 | /* find acpiphp_func from acpiphp_bridge */ | 309 | /* find acpiphp_func from acpiphp_bridge */ |
310 | static struct acpiphp_func *acpiphp_bridge_handle_to_function(acpi_handle handle) | 310 | static struct acpiphp_func *acpiphp_bridge_handle_to_function(acpi_handle handle) |
311 | { | 311 | { |
312 | struct list_head *node, *l; | ||
313 | struct acpiphp_bridge *bridge; | 312 | struct acpiphp_bridge *bridge; |
314 | struct acpiphp_slot *slot; | 313 | struct acpiphp_slot *slot; |
315 | struct acpiphp_func *func; | 314 | struct acpiphp_func *func; |
316 | 315 | ||
317 | list_for_each(node, &bridge_list) { | 316 | list_for_each_entry(bridge, &bridge_list, list) { |
318 | bridge = list_entry(node, struct acpiphp_bridge, list); | ||
319 | for (slot = bridge->slots; slot; slot = slot->next) { | 317 | for (slot = bridge->slots; slot; slot = slot->next) { |
320 | list_for_each(l, &slot->funcs) { | 318 | list_for_each_entry(func, &slot->funcs, sibling) { |
321 | func = list_entry(l, struct acpiphp_func, | ||
322 | sibling); | ||
323 | if (func->handle == handle) | 319 | if (func->handle == handle) |
324 | return func; | 320 | return func; |
325 | } | 321 | } |
@@ -493,21 +489,19 @@ static int add_bridge(acpi_handle handle) | |||
493 | 489 | ||
494 | static struct acpiphp_bridge *acpiphp_handle_to_bridge(acpi_handle handle) | 490 | static struct acpiphp_bridge *acpiphp_handle_to_bridge(acpi_handle handle) |
495 | { | 491 | { |
496 | struct list_head *head; | 492 | struct acpiphp_bridge *bridge; |
497 | list_for_each(head, &bridge_list) { | 493 | |
498 | struct acpiphp_bridge *bridge = list_entry(head, | 494 | list_for_each_entry(bridge, &bridge_list, list) |
499 | struct acpiphp_bridge, list); | ||
500 | if (bridge->handle == handle) | 495 | if (bridge->handle == handle) |
501 | return bridge; | 496 | return bridge; |
502 | } | ||
503 | 497 | ||
504 | return NULL; | 498 | return NULL; |
505 | } | 499 | } |
506 | 500 | ||
507 | static void cleanup_bridge(struct acpiphp_bridge *bridge) | 501 | static void cleanup_bridge(struct acpiphp_bridge *bridge) |
508 | { | 502 | { |
509 | struct list_head *list, *tmp; | 503 | struct acpiphp_slot *slot, *next; |
510 | struct acpiphp_slot *slot; | 504 | struct acpiphp_func *func, *tmp; |
511 | acpi_status status; | 505 | acpi_status status; |
512 | acpi_handle handle = bridge->handle; | 506 | acpi_handle handle = bridge->handle; |
513 | 507 | ||
@@ -528,10 +522,8 @@ static void cleanup_bridge(struct acpiphp_bridge *bridge) | |||
528 | 522 | ||
529 | slot = bridge->slots; | 523 | slot = bridge->slots; |
530 | while (slot) { | 524 | while (slot) { |
531 | struct acpiphp_slot *next = slot->next; | 525 | next = slot->next; |
532 | list_for_each_safe (list, tmp, &slot->funcs) { | 526 | list_for_each_entry_safe(func, tmp, &slot->funcs, sibling) { |
533 | struct acpiphp_func *func; | ||
534 | func = list_entry(list, struct acpiphp_func, sibling); | ||
535 | if (is_dock_device(func->handle)) { | 527 | if (is_dock_device(func->handle)) { |
536 | unregister_hotplug_dock_device(func->handle); | 528 | unregister_hotplug_dock_device(func->handle); |
537 | unregister_dock_notifier(&func->nb); | 529 | unregister_dock_notifier(&func->nb); |
@@ -543,7 +535,7 @@ static void cleanup_bridge(struct acpiphp_bridge *bridge) | |||
543 | if (ACPI_FAILURE(status)) | 535 | if (ACPI_FAILURE(status)) |
544 | err("failed to remove notify handler\n"); | 536 | err("failed to remove notify handler\n"); |
545 | } | 537 | } |
546 | list_del(list); | 538 | list_del(&func->sibling); |
547 | kfree(func); | 539 | kfree(func); |
548 | } | 540 | } |
549 | acpiphp_unregister_hotplug_slot(slot); | 541 | acpiphp_unregister_hotplug_slot(slot); |
@@ -608,16 +600,13 @@ static int power_on_slot(struct acpiphp_slot *slot) | |||
608 | { | 600 | { |
609 | acpi_status status; | 601 | acpi_status status; |
610 | struct acpiphp_func *func; | 602 | struct acpiphp_func *func; |
611 | struct list_head *l; | ||
612 | int retval = 0; | 603 | int retval = 0; |
613 | 604 | ||
614 | /* if already enabled, just skip */ | 605 | /* if already enabled, just skip */ |
615 | if (slot->flags & SLOT_POWEREDON) | 606 | if (slot->flags & SLOT_POWEREDON) |
616 | goto err_exit; | 607 | goto err_exit; |
617 | 608 | ||
618 | list_for_each (l, &slot->funcs) { | 609 | list_for_each_entry(func, &slot->funcs, sibling) { |
619 | func = list_entry(l, struct acpiphp_func, sibling); | ||
620 | |||
621 | if (func->flags & FUNC_HAS_PS0) { | 610 | if (func->flags & FUNC_HAS_PS0) { |
622 | dbg("%s: executing _PS0\n", __func__); | 611 | dbg("%s: executing _PS0\n", __func__); |
623 | status = acpi_evaluate_object(func->handle, "_PS0", NULL, NULL); | 612 | status = acpi_evaluate_object(func->handle, "_PS0", NULL, NULL); |
@@ -643,7 +632,6 @@ static int power_off_slot(struct acpiphp_slot *slot) | |||
643 | { | 632 | { |
644 | acpi_status status; | 633 | acpi_status status; |
645 | struct acpiphp_func *func; | 634 | struct acpiphp_func *func; |
646 | struct list_head *l; | ||
647 | 635 | ||
648 | int retval = 0; | 636 | int retval = 0; |
649 | 637 | ||
@@ -651,9 +639,7 @@ static int power_off_slot(struct acpiphp_slot *slot) | |||
651 | if ((slot->flags & SLOT_POWEREDON) == 0) | 639 | if ((slot->flags & SLOT_POWEREDON) == 0) |
652 | goto err_exit; | 640 | goto err_exit; |
653 | 641 | ||
654 | list_for_each (l, &slot->funcs) { | 642 | list_for_each_entry(func, &slot->funcs, sibling) { |
655 | func = list_entry(l, struct acpiphp_func, sibling); | ||
656 | |||
657 | if (func->flags & FUNC_HAS_PS3) { | 643 | if (func->flags & FUNC_HAS_PS3) { |
658 | status = acpi_evaluate_object(func->handle, "_PS3", NULL, NULL); | 644 | status = acpi_evaluate_object(func->handle, "_PS3", NULL, NULL); |
659 | if (ACPI_FAILURE(status)) { | 645 | if (ACPI_FAILURE(status)) { |
@@ -780,7 +766,6 @@ static int __ref enable_device(struct acpiphp_slot *slot) | |||
780 | { | 766 | { |
781 | struct pci_dev *dev; | 767 | struct pci_dev *dev; |
782 | struct pci_bus *bus = slot->bridge->pci_bus; | 768 | struct pci_bus *bus = slot->bridge->pci_bus; |
783 | struct list_head *l; | ||
784 | struct acpiphp_func *func; | 769 | struct acpiphp_func *func; |
785 | int retval = 0; | 770 | int retval = 0; |
786 | int num, max, pass; | 771 | int num, max, pass; |
@@ -820,10 +805,8 @@ static int __ref enable_device(struct acpiphp_slot *slot) | |||
820 | } | 805 | } |
821 | } | 806 | } |
822 | 807 | ||
823 | list_for_each (l, &slot->funcs) { | 808 | list_for_each_entry(func, &slot->funcs, sibling) |
824 | func = list_entry(l, struct acpiphp_func, sibling); | ||
825 | acpiphp_bus_add(func); | 809 | acpiphp_bus_add(func); |
826 | } | ||
827 | 810 | ||
828 | pci_bus_assign_resources(bus); | 811 | pci_bus_assign_resources(bus); |
829 | acpiphp_sanitize_bus(bus); | 812 | acpiphp_sanitize_bus(bus); |
@@ -831,8 +814,7 @@ static int __ref enable_device(struct acpiphp_slot *slot) | |||
831 | pci_enable_bridges(bus); | 814 | pci_enable_bridges(bus); |
832 | pci_bus_add_devices(bus); | 815 | pci_bus_add_devices(bus); |
833 | 816 | ||
834 | list_for_each (l, &slot->funcs) { | 817 | list_for_each_entry(func, &slot->funcs, sibling) { |
835 | func = list_entry(l, struct acpiphp_func, sibling); | ||
836 | dev = pci_get_slot(bus, PCI_DEVFN(slot->device, | 818 | dev = pci_get_slot(bus, PCI_DEVFN(slot->device, |
837 | func->function)); | 819 | func->function)); |
838 | if (!dev) | 820 | if (!dev) |
@@ -930,12 +912,9 @@ static unsigned int get_slot_status(struct acpiphp_slot *slot) | |||
930 | acpi_status status; | 912 | acpi_status status; |
931 | unsigned long long sta = 0; | 913 | unsigned long long sta = 0; |
932 | u32 dvid; | 914 | u32 dvid; |
933 | struct list_head *l; | ||
934 | struct acpiphp_func *func; | 915 | struct acpiphp_func *func; |
935 | 916 | ||
936 | list_for_each (l, &slot->funcs) { | 917 | list_for_each_entry(func, &slot->funcs, sibling) { |
937 | func = list_entry(l, struct acpiphp_func, sibling); | ||
938 | |||
939 | if (func->flags & FUNC_HAS_STA) { | 918 | if (func->flags & FUNC_HAS_STA) { |
940 | status = acpi_evaluate_integer(func->handle, "_STA", NULL, &sta); | 919 | status = acpi_evaluate_integer(func->handle, "_STA", NULL, &sta); |
941 | if (ACPI_SUCCESS(status) && sta) | 920 | if (ACPI_SUCCESS(status) && sta) |
@@ -963,13 +942,10 @@ int acpiphp_eject_slot(struct acpiphp_slot *slot) | |||
963 | { | 942 | { |
964 | acpi_status status; | 943 | acpi_status status; |
965 | struct acpiphp_func *func; | 944 | struct acpiphp_func *func; |
966 | struct list_head *l; | ||
967 | struct acpi_object_list arg_list; | 945 | struct acpi_object_list arg_list; |
968 | union acpi_object arg; | 946 | union acpi_object arg; |
969 | 947 | ||
970 | list_for_each (l, &slot->funcs) { | 948 | list_for_each_entry(func, &slot->funcs, sibling) { |
971 | func = list_entry(l, struct acpiphp_func, sibling); | ||
972 | |||
973 | /* We don't want to call _EJ0 on non-existing functions. */ | 949 | /* We don't want to call _EJ0 on non-existing functions. */ |
974 | if ((func->flags & FUNC_HAS_EJ0)) { | 950 | if ((func->flags & FUNC_HAS_EJ0)) { |
975 | /* _EJ0 method take one argument */ | 951 | /* _EJ0 method take one argument */ |
@@ -1352,7 +1328,7 @@ int __init acpiphp_get_num_slots(void) | |||
1352 | struct acpiphp_bridge *bridge; | 1328 | struct acpiphp_bridge *bridge; |
1353 | int num_slots = 0; | 1329 | int num_slots = 0; |
1354 | 1330 | ||
1355 | list_for_each_entry (bridge, &bridge_list, list) { | 1331 | list_for_each_entry(bridge, &bridge_list, list) { |
1356 | dbg("Bus %04x:%02x has %d slot%s\n", | 1332 | dbg("Bus %04x:%02x has %d slot%s\n", |
1357 | pci_domain_nr(bridge->pci_bus), | 1333 | pci_domain_nr(bridge->pci_bus), |
1358 | bridge->pci_bus->number, bridge->nr_slots, | 1334 | bridge->pci_bus->number, bridge->nr_slots, |