From: Randy D. <ran...@li...> - 2005-12-16 01:16:43
|
From: Randy Dunlap <ran...@li...> Make acpi_path_name() usable by everyone. I need this for adding SATA suspend/resume ACPI support. Note: This function is now a memory allocator and callers should kfree() the memory when done with it. It doesn't seem safe to me to leave it as returning a pointer to a static buffer (as it was in multiple cloned copies) as we add callers to it. Signed-off-by: Randy Dunlap <ran...@li...> --- drivers/acpi/osl.c | 29 +++++++++++++++++++++++++++++ include/acpi/acpiosxf.h | 2 ++ 2 files changed, 31 insertions(+) --- linux-2615-rc5g5.orig/drivers/acpi/osl.c +++ linux-2615-rc5g5/drivers/acpi/osl.c @@ -1078,6 +1078,35 @@ void acpi_os_release_lock(acpi_handle ha spin_unlock_irqrestore((spinlock_t *) handle, flags); } +/** + * acpi_path_name - get ACPI path_name for the given handle + * @handle: ACPI object handle to look up name of + * + * Allocates memory if successul. Caller must free the memory. + * + * Returns: pointer to path_name if successful, NULL if not. + */ +u8 *acpi_path_name(acpi_handle handle) +{ + acpi_status status; + static u8 *path_name; + struct acpi_buffer ret_buf = {ACPI_PATHNAME_MAX, path_name}; + + path_name = kzalloc(ACPI_PATHNAME_MAX, GFP_KERNEL); + if (!path_name) + return NULL; + + status = acpi_get_name(handle, ACPI_FULL_PATHNAME, &ret_buf); + + if (ACPI_FAILURE(status)) { + acpi_os_free(path_name); + return NULL; + } + + return path_name; +} +EXPORT_SYMBOL(acpi_path_name); + #ifndef ACPI_USE_LOCAL_CACHE /******************************************************************************* --- linux-2615-rc5g5.orig/include/acpi/acpiosxf.h +++ linux-2615-rc5g5/include/acpi/acpiosxf.h @@ -112,6 +112,8 @@ unsigned long acpi_os_acquire_lock(acpi_ void acpi_os_release_lock(acpi_handle handle, unsigned long flags); +u8 *acpi_path_name(acpi_handle handle); + /* * Memory allocation and mapping */ --- |