mirror of https://gitee.com/openkylin/linux.git
Merge branch 'acpica'
* acpica: ACPI: Clean up incorrect inclusions of ACPICA headers ACPICA: Update version to 20131115. ACPICA: Add support to delete all objects attached to the root namespace node. ACPICA: Delete all attached data objects during namespace node deletion. ACPICA: Resources: Fix loop termination for the get AML length function. ACPICA: Tests: Add CHECKSUM_ABORT protection for test utilities. ACPICA: Debug output: Do not emit function nesting level for kernel build.
This commit is contained in:
commit
2d304ba757
|
@ -184,7 +184,7 @@ acpi_rs_create_resource_list(union acpi_operand_object *aml_buffer,
|
||||||
struct acpi_buffer *output_buffer);
|
struct acpi_buffer *output_buffer);
|
||||||
|
|
||||||
acpi_status
|
acpi_status
|
||||||
acpi_rs_create_aml_resources(struct acpi_resource *linked_list_buffer,
|
acpi_rs_create_aml_resources(struct acpi_buffer *resource_list,
|
||||||
struct acpi_buffer *output_buffer);
|
struct acpi_buffer *output_buffer);
|
||||||
|
|
||||||
acpi_status
|
acpi_status
|
||||||
|
@ -227,8 +227,8 @@ acpi_rs_get_list_length(u8 * aml_buffer,
|
||||||
u32 aml_buffer_length, acpi_size * size_needed);
|
u32 aml_buffer_length, acpi_size * size_needed);
|
||||||
|
|
||||||
acpi_status
|
acpi_status
|
||||||
acpi_rs_get_aml_length(struct acpi_resource *linked_list_buffer,
|
acpi_rs_get_aml_length(struct acpi_resource *resource_list,
|
||||||
acpi_size * size_needed);
|
acpi_size resource_list_size, acpi_size * size_needed);
|
||||||
|
|
||||||
acpi_status
|
acpi_status
|
||||||
acpi_rs_get_pci_routing_table_length(union acpi_operand_object *package_object,
|
acpi_rs_get_pci_routing_table_length(union acpi_operand_object *package_object,
|
||||||
|
|
|
@ -106,6 +106,7 @@ struct acpi_namespace_node *acpi_ns_create_node(u32 name)
|
||||||
void acpi_ns_delete_node(struct acpi_namespace_node *node)
|
void acpi_ns_delete_node(struct acpi_namespace_node *node)
|
||||||
{
|
{
|
||||||
union acpi_operand_object *obj_desc;
|
union acpi_operand_object *obj_desc;
|
||||||
|
union acpi_operand_object *next_desc;
|
||||||
|
|
||||||
ACPI_FUNCTION_NAME(ns_delete_node);
|
ACPI_FUNCTION_NAME(ns_delete_node);
|
||||||
|
|
||||||
|
@ -114,12 +115,13 @@ void acpi_ns_delete_node(struct acpi_namespace_node *node)
|
||||||
acpi_ns_detach_object(node);
|
acpi_ns_detach_object(node);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Delete an attached data object if present (an object that was created
|
* Delete an attached data object list if present (objects that were
|
||||||
* and attached via acpi_attach_data). Note: After any normal object is
|
* attached via acpi_attach_data). Note: After any normal object is
|
||||||
* detached above, the only possible remaining object is a data object.
|
* detached above, the only possible remaining object(s) are data
|
||||||
|
* objects, in a linked list.
|
||||||
*/
|
*/
|
||||||
obj_desc = node->object;
|
obj_desc = node->object;
|
||||||
if (obj_desc && (obj_desc->common.type == ACPI_TYPE_LOCAL_DATA)) {
|
while (obj_desc && (obj_desc->common.type == ACPI_TYPE_LOCAL_DATA)) {
|
||||||
|
|
||||||
/* Invoke the attached data deletion handler if present */
|
/* Invoke the attached data deletion handler if present */
|
||||||
|
|
||||||
|
@ -127,7 +129,15 @@ void acpi_ns_delete_node(struct acpi_namespace_node *node)
|
||||||
obj_desc->data.handler(node, obj_desc->data.pointer);
|
obj_desc->data.handler(node, obj_desc->data.pointer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
next_desc = obj_desc->common.next_object;
|
||||||
acpi_ut_remove_reference(obj_desc);
|
acpi_ut_remove_reference(obj_desc);
|
||||||
|
obj_desc = next_desc;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Special case for the statically allocated root node */
|
||||||
|
|
||||||
|
if (node == acpi_gbl_root_node) {
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Now we can delete the node */
|
/* Now we can delete the node */
|
||||||
|
|
|
@ -593,24 +593,26 @@ struct acpi_namespace_node *acpi_ns_validate_handle(acpi_handle handle)
|
||||||
|
|
||||||
void acpi_ns_terminate(void)
|
void acpi_ns_terminate(void)
|
||||||
{
|
{
|
||||||
union acpi_operand_object *obj_desc;
|
acpi_status status;
|
||||||
|
|
||||||
ACPI_FUNCTION_TRACE(ns_terminate);
|
ACPI_FUNCTION_TRACE(ns_terminate);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 1) Free the entire namespace -- all nodes and objects
|
* Free the entire namespace -- all nodes and all objects
|
||||||
*
|
* attached to the nodes
|
||||||
* Delete all object descriptors attached to namepsace nodes
|
|
||||||
*/
|
*/
|
||||||
acpi_ns_delete_namespace_subtree(acpi_gbl_root_node);
|
acpi_ns_delete_namespace_subtree(acpi_gbl_root_node);
|
||||||
|
|
||||||
/* Detach any objects attached to the root */
|
/* Delete any objects attached to the root node */
|
||||||
|
|
||||||
obj_desc = acpi_ns_get_attached_object(acpi_gbl_root_node);
|
status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
|
||||||
if (obj_desc) {
|
if (ACPI_FAILURE(status)) {
|
||||||
acpi_ns_detach_object(acpi_gbl_root_node);
|
return_VOID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
acpi_ns_delete_node(acpi_gbl_root_node);
|
||||||
|
(void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
|
||||||
|
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Namespace freed\n"));
|
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Namespace freed\n"));
|
||||||
return_VOID;
|
return_VOID;
|
||||||
}
|
}
|
||||||
|
|
|
@ -174,6 +174,7 @@ acpi_rs_stream_option_length(u32 resource_length,
|
||||||
* FUNCTION: acpi_rs_get_aml_length
|
* FUNCTION: acpi_rs_get_aml_length
|
||||||
*
|
*
|
||||||
* PARAMETERS: resource - Pointer to the resource linked list
|
* PARAMETERS: resource - Pointer to the resource linked list
|
||||||
|
* resource_list_size - Size of the resource linked list
|
||||||
* size_needed - Where the required size is returned
|
* size_needed - Where the required size is returned
|
||||||
*
|
*
|
||||||
* RETURN: Status
|
* RETURN: Status
|
||||||
|
@ -185,16 +186,20 @@ acpi_rs_stream_option_length(u32 resource_length,
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
acpi_status
|
acpi_status
|
||||||
acpi_rs_get_aml_length(struct acpi_resource * resource, acpi_size * size_needed)
|
acpi_rs_get_aml_length(struct acpi_resource *resource,
|
||||||
|
acpi_size resource_list_size, acpi_size * size_needed)
|
||||||
{
|
{
|
||||||
acpi_size aml_size_needed = 0;
|
acpi_size aml_size_needed = 0;
|
||||||
|
struct acpi_resource *resource_end;
|
||||||
acpi_rs_length total_size;
|
acpi_rs_length total_size;
|
||||||
|
|
||||||
ACPI_FUNCTION_TRACE(rs_get_aml_length);
|
ACPI_FUNCTION_TRACE(rs_get_aml_length);
|
||||||
|
|
||||||
/* Traverse entire list of internal resource descriptors */
|
/* Traverse entire list of internal resource descriptors */
|
||||||
|
|
||||||
while (resource) {
|
resource_end =
|
||||||
|
ACPI_ADD_PTR(struct acpi_resource, resource, resource_list_size);
|
||||||
|
while (resource < resource_end) {
|
||||||
|
|
||||||
/* Validate the descriptor type */
|
/* Validate the descriptor type */
|
||||||
|
|
||||||
|
|
|
@ -418,22 +418,21 @@ acpi_rs_create_pci_routing_table(union acpi_operand_object *package_object,
|
||||||
*
|
*
|
||||||
* FUNCTION: acpi_rs_create_aml_resources
|
* FUNCTION: acpi_rs_create_aml_resources
|
||||||
*
|
*
|
||||||
* PARAMETERS: linked_list_buffer - Pointer to the resource linked list
|
* PARAMETERS: resource_list - Pointer to the resource list buffer
|
||||||
* output_buffer - Pointer to the user's buffer
|
* output_buffer - Where the AML buffer is returned
|
||||||
*
|
*
|
||||||
* RETURN: Status AE_OK if okay, else a valid acpi_status code.
|
* RETURN: Status AE_OK if okay, else a valid acpi_status code.
|
||||||
* If the output_buffer is too small, the error will be
|
* If the output_buffer is too small, the error will be
|
||||||
* AE_BUFFER_OVERFLOW and output_buffer->Length will point
|
* AE_BUFFER_OVERFLOW and output_buffer->Length will point
|
||||||
* to the size buffer needed.
|
* to the size buffer needed.
|
||||||
*
|
*
|
||||||
* DESCRIPTION: Takes the linked list of device resources and
|
* DESCRIPTION: Converts a list of device resources to an AML bytestream
|
||||||
* creates a bytestream to be used as input for the
|
* to be used as input for the _SRS control method.
|
||||||
* _SRS control method.
|
|
||||||
*
|
*
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
acpi_status
|
acpi_status
|
||||||
acpi_rs_create_aml_resources(struct acpi_resource *linked_list_buffer,
|
acpi_rs_create_aml_resources(struct acpi_buffer *resource_list,
|
||||||
struct acpi_buffer *output_buffer)
|
struct acpi_buffer *output_buffer)
|
||||||
{
|
{
|
||||||
acpi_status status;
|
acpi_status status;
|
||||||
|
@ -441,16 +440,16 @@ acpi_rs_create_aml_resources(struct acpi_resource *linked_list_buffer,
|
||||||
|
|
||||||
ACPI_FUNCTION_TRACE(rs_create_aml_resources);
|
ACPI_FUNCTION_TRACE(rs_create_aml_resources);
|
||||||
|
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "LinkedListBuffer = %p\n",
|
/* Params already validated, no need to re-validate here */
|
||||||
linked_list_buffer));
|
|
||||||
|
|
||||||
/*
|
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "ResourceList Buffer = %p\n",
|
||||||
* Params already validated, so we don't re-validate here
|
resource_list->pointer));
|
||||||
*
|
|
||||||
* Pass the linked_list_buffer into a module that calculates
|
/* Get the buffer size needed for the AML byte stream */
|
||||||
* the buffer size needed for the byte stream.
|
|
||||||
*/
|
status = acpi_rs_get_aml_length(resource_list->pointer,
|
||||||
status = acpi_rs_get_aml_length(linked_list_buffer, &aml_size_needed);
|
resource_list->length,
|
||||||
|
&aml_size_needed);
|
||||||
|
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "AmlSizeNeeded=%X, %s\n",
|
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "AmlSizeNeeded=%X, %s\n",
|
||||||
(u32)aml_size_needed, acpi_format_exception(status)));
|
(u32)aml_size_needed, acpi_format_exception(status)));
|
||||||
|
@ -467,10 +466,9 @@ acpi_rs_create_aml_resources(struct acpi_resource *linked_list_buffer,
|
||||||
|
|
||||||
/* Do the conversion */
|
/* Do the conversion */
|
||||||
|
|
||||||
status =
|
status = acpi_rs_convert_resources_to_aml(resource_list->pointer,
|
||||||
acpi_rs_convert_resources_to_aml(linked_list_buffer,
|
aml_size_needed,
|
||||||
aml_size_needed,
|
output_buffer->pointer);
|
||||||
output_buffer->pointer);
|
|
||||||
if (ACPI_FAILURE(status)) {
|
if (ACPI_FAILURE(status)) {
|
||||||
return_ACPI_STATUS(status);
|
return_ACPI_STATUS(status);
|
||||||
}
|
}
|
||||||
|
|
|
@ -753,7 +753,7 @@ acpi_rs_set_srs_method_data(struct acpi_namespace_node *node,
|
||||||
* Convert the linked list into a byte stream
|
* Convert the linked list into a byte stream
|
||||||
*/
|
*/
|
||||||
buffer.length = ACPI_ALLOCATE_LOCAL_BUFFER;
|
buffer.length = ACPI_ALLOCATE_LOCAL_BUFFER;
|
||||||
status = acpi_rs_create_aml_resources(in_buffer->pointer, &buffer);
|
status = acpi_rs_create_aml_resources(in_buffer, &buffer);
|
||||||
if (ACPI_FAILURE(status)) {
|
if (ACPI_FAILURE(status)) {
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
|
@ -185,6 +185,7 @@ acpi_debug_print(u32 requested_debug_level,
|
||||||
}
|
}
|
||||||
|
|
||||||
acpi_gbl_prev_thread_id = thread_id;
|
acpi_gbl_prev_thread_id = thread_id;
|
||||||
|
acpi_gbl_nesting_level = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -193,13 +194,21 @@ acpi_debug_print(u32 requested_debug_level,
|
||||||
*/
|
*/
|
||||||
acpi_os_printf("%9s-%04ld ", module_name, line_number);
|
acpi_os_printf("%9s-%04ld ", module_name, line_number);
|
||||||
|
|
||||||
|
#ifdef ACPI_EXEC_APP
|
||||||
|
/*
|
||||||
|
* For acpi_exec only, emit the thread ID and nesting level.
|
||||||
|
* Note: nesting level is really only useful during a single-thread
|
||||||
|
* execution. Otherwise, multiple threads will keep resetting the
|
||||||
|
* level.
|
||||||
|
*/
|
||||||
if (ACPI_LV_THREADS & acpi_dbg_level) {
|
if (ACPI_LV_THREADS & acpi_dbg_level) {
|
||||||
acpi_os_printf("[%u] ", (u32)thread_id);
|
acpi_os_printf("[%u] ", (u32)thread_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
acpi_os_printf("[%02ld] %-22.22s: ",
|
acpi_os_printf("[%02ld] ", acpi_gbl_nesting_level);
|
||||||
acpi_gbl_nesting_level,
|
#endif
|
||||||
acpi_ut_trim_function_name(function_name));
|
|
||||||
|
acpi_os_printf("%-22.22s: ", acpi_ut_trim_function_name(function_name));
|
||||||
|
|
||||||
va_start(args, format);
|
va_start(args, format);
|
||||||
acpi_os_vprintf(format, args);
|
acpi_os_vprintf(format, args);
|
||||||
|
@ -420,7 +429,9 @@ acpi_ut_exit(u32 line_number,
|
||||||
component_id, "%s\n", acpi_gbl_fn_exit_str);
|
component_id, "%s\n", acpi_gbl_fn_exit_str);
|
||||||
}
|
}
|
||||||
|
|
||||||
acpi_gbl_nesting_level--;
|
if (acpi_gbl_nesting_level) {
|
||||||
|
acpi_gbl_nesting_level--;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ACPI_EXPORT_SYMBOL(acpi_ut_exit)
|
ACPI_EXPORT_SYMBOL(acpi_ut_exit)
|
||||||
|
@ -467,7 +478,9 @@ acpi_ut_status_exit(u32 line_number,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
acpi_gbl_nesting_level--;
|
if (acpi_gbl_nesting_level) {
|
||||||
|
acpi_gbl_nesting_level--;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ACPI_EXPORT_SYMBOL(acpi_ut_status_exit)
|
ACPI_EXPORT_SYMBOL(acpi_ut_status_exit)
|
||||||
|
@ -504,7 +517,9 @@ acpi_ut_value_exit(u32 line_number,
|
||||||
ACPI_FORMAT_UINT64(value));
|
ACPI_FORMAT_UINT64(value));
|
||||||
}
|
}
|
||||||
|
|
||||||
acpi_gbl_nesting_level--;
|
if (acpi_gbl_nesting_level) {
|
||||||
|
acpi_gbl_nesting_level--;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ACPI_EXPORT_SYMBOL(acpi_ut_value_exit)
|
ACPI_EXPORT_SYMBOL(acpi_ut_value_exit)
|
||||||
|
@ -540,7 +555,9 @@ acpi_ut_ptr_exit(u32 line_number,
|
||||||
ptr);
|
ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
acpi_gbl_nesting_level--;
|
if (acpi_gbl_nesting_level) {
|
||||||
|
acpi_gbl_nesting_level--;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -13,7 +13,6 @@
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/acpi.h>
|
#include <linux/acpi.h>
|
||||||
#include <linux/acpi_io.h>
|
#include <linux/acpi_io.h>
|
||||||
#include <acpi/acpiosxf.h>
|
|
||||||
|
|
||||||
/* ACPI NVS regions, APEI may use it */
|
/* ACPI NVS regions, APEI may use it */
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,6 @@
|
||||||
#include <linux/err.h>
|
#include <linux/err.h>
|
||||||
|
|
||||||
#include <acpi/acpi.h>
|
#include <acpi/acpi.h>
|
||||||
#include <acpi/acpixf.h>
|
|
||||||
#include <acpi/acpi_drivers.h>
|
#include <acpi/acpi_drivers.h>
|
||||||
#include <acpi/acpi_bus.h>
|
#include <acpi/acpi_bus.h>
|
||||||
|
|
||||||
|
|
|
@ -83,7 +83,9 @@
|
||||||
* Should the subsystem abort the loading of an ACPI table if the
|
* Should the subsystem abort the loading of an ACPI table if the
|
||||||
* table checksum is incorrect?
|
* table checksum is incorrect?
|
||||||
*/
|
*/
|
||||||
|
#ifndef ACPI_CHECKSUM_ABORT
|
||||||
#define ACPI_CHECKSUM_ABORT FALSE
|
#define ACPI_CHECKSUM_ABORT FALSE
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Generate a version of ACPICA that only supports "reduced hardware"
|
* Generate a version of ACPICA that only supports "reduced hardware"
|
||||||
|
|
|
@ -46,7 +46,7 @@
|
||||||
|
|
||||||
/* Current ACPICA subsystem version in YYYYMMDD format */
|
/* Current ACPICA subsystem version in YYYYMMDD format */
|
||||||
|
|
||||||
#define ACPI_CA_VERSION 0x20130927
|
#define ACPI_CA_VERSION 0x20131115
|
||||||
|
|
||||||
#include <acpi/acconfig.h>
|
#include <acpi/acconfig.h>
|
||||||
#include <acpi/actypes.h>
|
#include <acpi/actypes.h>
|
||||||
|
|
Loading…
Reference in New Issue