diff options
-rw-r--r-- | drivers/acpi/acpica/hwpci.c | 15 |
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 | ||