PCI: data structure agnostic free list function

Replace free_failed_list() with a free_list() call. free_list() can
handle 'resource_list_x', 'resource_list' and any linked list linked
through ->next

Signed-off-by: Ram Pai <linuxram@us.ibm.com>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
This commit is contained in:
Ram Pai 2011-02-14 17:43:18 -08:00 committed by Jesse Barnes
parent 13583b1659
commit 094732a520

View File

@ -36,6 +36,16 @@ struct resource_list_x {
unsigned long flags;
};
#define free_list(type, head) do { \
struct type *list, *tmp; \
for (list = (head)->next; list;) { \
tmp = list; \
list = list->next; \
kfree(tmp); \
} \
(head)->next = NULL; \
} while (0)
static void add_to_failed_list(struct resource_list_x *head,
struct pci_dev *dev, struct resource *res)
{
@ -58,19 +68,6 @@ static void add_to_failed_list(struct resource_list_x *head,
list->next = tmp;
}
static void free_failed_list(struct resource_list_x *head)
{
struct resource_list_x *list, *tmp;
for (list = head->next; list;) {
tmp = list;
list = list->next;
kfree(tmp);
}
head->next = NULL;
}
static void __dev_sort_resources(struct pci_dev *dev,
struct resource_list *head)
{
@ -900,7 +897,7 @@ void pci_assign_unassigned_bridge_resources(struct pci_dev *bridge)
if (tried_times >= 2) {
/* still fail, don't need to try more */
free_failed_list(&head);
free_list(resource_list_x, &head);
goto enable_all;
}
@ -931,7 +928,7 @@ void pci_assign_unassigned_bridge_resources(struct pci_dev *bridge)
list = list->next;
}
free_failed_list(&head);
free_list(resource_list_x, &head);
goto again;