diff options
Diffstat (limited to 'drivers/acpi/dispatcher/dsinit.c')
-rw-r--r-- | drivers/acpi/dispatcher/dsinit.c | 24 |
1 files changed, 7 insertions, 17 deletions
diff --git a/drivers/acpi/dispatcher/dsinit.c b/drivers/acpi/dispatcher/dsinit.c index ebc07aab710c..bcd1d472b90f 100644 --- a/drivers/acpi/dispatcher/dsinit.c +++ b/drivers/acpi/dispatcher/dsinit.c | |||
@@ -86,20 +86,20 @@ acpi_ds_init_one_object ( | |||
86 | void *context, | 86 | void *context, |
87 | void **return_value) | 87 | void **return_value) |
88 | { | 88 | { |
89 | struct acpi_init_walk_info *info = (struct acpi_init_walk_info *) context; | ||
90 | struct acpi_namespace_node *node = (struct acpi_namespace_node *) obj_handle; | ||
89 | acpi_object_type type; | 91 | acpi_object_type type; |
90 | acpi_status status; | 92 | acpi_status status; |
91 | struct acpi_init_walk_info *info = (struct acpi_init_walk_info *) context; | ||
92 | 93 | ||
93 | 94 | ||
94 | ACPI_FUNCTION_NAME ("ds_init_one_object"); | 95 | ACPI_FUNCTION_NAME ("ds_init_one_object"); |
95 | 96 | ||
96 | 97 | ||
97 | /* | 98 | /* |
98 | * We are only interested in objects owned by the table that | 99 | * We are only interested in NS nodes owned by the table that |
99 | * was just loaded | 100 | * was just loaded |
100 | */ | 101 | */ |
101 | if (((struct acpi_namespace_node *) obj_handle)->owner_id != | 102 | if (node->owner_id != info->table_desc->owner_id) { |
102 | info->table_desc->owner_id) { | ||
103 | return (AE_OK); | 103 | return (AE_OK); |
104 | } | 104 | } |
105 | 105 | ||
@@ -126,8 +126,6 @@ acpi_ds_init_one_object ( | |||
126 | 126 | ||
127 | case ACPI_TYPE_METHOD: | 127 | case ACPI_TYPE_METHOD: |
128 | 128 | ||
129 | info->method_count++; | ||
130 | |||
131 | /* | 129 | /* |
132 | * Print a dot for each method unless we are going to print | 130 | * Print a dot for each method unless we are going to print |
133 | * the entire pathname | 131 | * the entire pathname |
@@ -143,7 +141,7 @@ acpi_ds_init_one_object ( | |||
143 | * on a per-table basis. Currently, we just use a global for the width. | 141 | * on a per-table basis. Currently, we just use a global for the width. |
144 | */ | 142 | */ |
145 | if (info->table_desc->pointer->revision == 1) { | 143 | if (info->table_desc->pointer->revision == 1) { |
146 | ((struct acpi_namespace_node *) obj_handle)->flags |= ANOBJ_DATA_WIDTH_32; | 144 | node->flags |= ANOBJ_DATA_WIDTH_32; |
147 | } | 145 | } |
148 | 146 | ||
149 | /* | 147 | /* |
@@ -153,22 +151,14 @@ acpi_ds_init_one_object ( | |||
153 | status = acpi_ds_parse_method (obj_handle); | 151 | status = acpi_ds_parse_method (obj_handle); |
154 | if (ACPI_FAILURE (status)) { | 152 | if (ACPI_FAILURE (status)) { |
155 | ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, | 153 | ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, |
156 | "Method %p [%4.4s] - parse failure, %s\n", | 154 | "\n+Method %p [%4.4s] - parse failure, %s\n", |
157 | obj_handle, acpi_ut_get_node_name (obj_handle), | 155 | obj_handle, acpi_ut_get_node_name (obj_handle), |
158 | acpi_format_exception (status))); | 156 | acpi_format_exception (status))); |
159 | 157 | ||
160 | /* This parse failed, but we will continue parsing more methods */ | 158 | /* This parse failed, but we will continue parsing more methods */ |
161 | |||
162 | break; | ||
163 | } | 159 | } |
164 | 160 | ||
165 | /* | 161 | info->method_count++; |
166 | * Delete the parse tree. We simply re-parse the method | ||
167 | * for every execution since there isn't much overhead | ||
168 | */ | ||
169 | acpi_ns_delete_namespace_subtree (obj_handle); | ||
170 | acpi_ns_delete_namespace_by_owner ( | ||
171 | ((struct acpi_namespace_node *) obj_handle)->object->method.owner_id); | ||
172 | break; | 162 | break; |
173 | 163 | ||
174 | 164 | ||