Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 094732a5 authored by Ram Pai's avatar Ram Pai Committed by Jesse Barnes
Browse files

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: default avatarRam Pai <linuxram@us.ibm.com>
Signed-off-by: default avatarJesse Barnes <jbarnes@virtuousgeek.org>
parent 13583b16
Loading
Loading
Loading
Loading
+12 −15
Original line number Diff line number Diff line
@@ -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;