Commit 498fbb5d authored by Gary Hade's avatar Gary Hade Committed by Greg Kroah-Hartman

PCI: hotplug: acpiphp_ibm: Remove get device information

drivers/pci/hotplug/acpiphp_ibm.c:ibm_find_acpi_device() is not
large enough to accommodate data returned by the _CID method
executed from acpi_get_object_info().

This patch eliminates the problem by letting ACPI code
(instead of driver code) determine and obtain a correctly
sized buffer.
Signed-off-by: default avatarGary Hade <garyhade@us.ibm.com>
Signed-off-by: default avatarKristen Carlson Accardi <kristen.c.accardi@intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent e80af3a8
...@@ -395,33 +395,34 @@ static acpi_status __init ibm_find_acpi_device(acpi_handle handle, ...@@ -395,33 +395,34 @@ static acpi_status __init ibm_find_acpi_device(acpi_handle handle,
{ {
acpi_handle *phandle = (acpi_handle *)context; acpi_handle *phandle = (acpi_handle *)context;
acpi_status status; acpi_status status;
struct acpi_device_info info; struct acpi_device_info *info;
struct acpi_buffer info_buffer = { struct acpi_buffer info_buffer = { ACPI_ALLOCATE_BUFFER, NULL };
.length = sizeof(struct acpi_device_info), int retval = 0;
.pointer = &info,
};
status = acpi_get_object_info(handle, &info_buffer); status = acpi_get_object_info(handle, &info_buffer);
if (ACPI_FAILURE(status)) { if (ACPI_FAILURE(status)) {
err("%s: Failed to get device information\n", __FUNCTION__); err("%s: Failed to get device information status=0x%x\n",
return 0; __FUNCTION__, status);
return retval;
} }
info.hardware_id.value[sizeof(info.hardware_id.value) - 1] = '\0'; info = info_buffer.pointer;
info->hardware_id.value[sizeof(info->hardware_id.value) - 1] = '\0';
if (info.current_status && (info.valid & ACPI_VALID_HID) &&
(!strcmp(info.hardware_id.value, IBM_HARDWARE_ID1) || if (info->current_status && (info->valid & ACPI_VALID_HID) &&
!strcmp(info.hardware_id.value, IBM_HARDWARE_ID2))) { (!strcmp(info->hardware_id.value, IBM_HARDWARE_ID1) ||
dbg("found hardware: %s, handle: %p\n", info.hardware_id.value, !strcmp(info->hardware_id.value, IBM_HARDWARE_ID2))) {
handle); dbg("found hardware: %s, handle: %p\n",
info->hardware_id.value, handle);
*phandle = handle; *phandle = handle;
/* returning non-zero causes the search to stop /* returning non-zero causes the search to stop
* and returns this value to the caller of * and returns this value to the caller of
* acpi_walk_namespace, but it also causes some warnings * acpi_walk_namespace, but it also causes some warnings
* in the acpi debug code to print... * in the acpi debug code to print...
*/ */
return FOUND_APCI; retval = FOUND_APCI;
} }
return 0; kfree(info);
return retval;
} }
static int __init ibm_acpiphp_init(void) static int __init ibm_acpiphp_init(void)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment