mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-24 21:24:00 +08:00
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:
parent
13583b1659
commit
094732a520
@ -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 @@ again:
|
||||
|
||||
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 @@ again:
|
||||
|
||||
list = list->next;
|
||||
}
|
||||
free_failed_list(&head);
|
||||
free_list(resource_list_x, &head);
|
||||
|
||||
goto again;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user