aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/acpi/acpica/hwpci.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/drivers/acpi/acpica/hwpci.c b/drivers/acpi/acpica/hwpci.c
index e701d8c33dbf..6aade8e1d2a1 100644
--- a/drivers/acpi/acpica/hwpci.c
+++ b/drivers/acpi/acpica/hwpci.c
@@ -140,11 +140,12 @@ acpi_hw_derive_pci_id(struct acpi_pci_id *pci_id,
140 /* Walk the list, updating the PCI device/function/bus numbers */ 140 /* Walk the list, updating the PCI device/function/bus numbers */
141 141
142 status = acpi_hw_process_pci_list(pci_id, list_head); 142 status = acpi_hw_process_pci_list(pci_id, list_head);
143 }
144 143
145 /* Always delete the list */ 144 /* Delete the list */
145
146 acpi_hw_delete_pci_list(list_head);
147 }
146 148
147 acpi_hw_delete_pci_list(list_head);
148 return_ACPI_STATUS(status); 149 return_ACPI_STATUS(status);
149} 150}
150 151
@@ -187,6 +188,10 @@ acpi_hw_build_pci_list(acpi_handle root_pci_device,
187 while (1) { 188 while (1) {
188 status = acpi_get_parent(current_device, &parent_device); 189 status = acpi_get_parent(current_device, &parent_device);
189 if (ACPI_FAILURE(status)) { 190 if (ACPI_FAILURE(status)) {
191
192 /* Must delete the list before exit */
193
194 acpi_hw_delete_pci_list(*return_list_head);
190 return (status); 195 return (status);
191 } 196 }
192 197
@@ -199,6 +204,10 @@ acpi_hw_build_pci_list(acpi_handle root_pci_device,
199 204
200 list_element = ACPI_ALLOCATE(sizeof(struct acpi_pci_device)); 205 list_element = ACPI_ALLOCATE(sizeof(struct acpi_pci_device));
201 if (!list_element) { 206 if (!list_element) {
207
208 /* Must delete the list before exit */
209
210 acpi_hw_delete_pci_list(*return_list_head);
202 return (AE_NO_MEMORY); 211 return (AE_NO_MEMORY);
203 } 212 }
204 213