aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi
diff options
context:
space:
mode:
authorJung-uk Kim <jkim@FreeBSD.org>2013-04-11 20:24:34 -0400
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2013-04-12 07:29:46 -0400
commit388a9902074c3cfe57d2425d766c491d072d2948 (patch)
treef4cb5406cf6d65eaf3a78146934dd0ad1fc8917d /drivers/acpi
parentc34c82bc9634a099a2652889806c5997f2a3d56f (diff)
ACPICA: _OSI Support: handle any errors from acpi_os_acquire_mutex()
Check for any errors. Handles possible timeout case if ACPI_WAIT_FOREVER is changed to be less than "forever". Jung-uk Kim. Signed-off-by: Jung-uk Kim <jkim@FreeBSD.org> Signed-off-by: Bob Moore <robert.moore@intel.com> Signed-off-by: Lv Zheng <lv.zheng@intel.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Diffstat (limited to 'drivers/acpi')
-rw-r--r--drivers/acpi/acpica/acutils.h2
-rw-r--r--drivers/acpi/acpica/utosi.c26
-rw-r--r--drivers/acpi/acpica/utxface.c17
3 files changed, 34 insertions, 11 deletions
diff --git a/drivers/acpi/acpica/acutils.h b/drivers/acpi/acpica/acutils.h
index 8c25bb05bb59..bbeb961d3a91 100644
--- a/drivers/acpi/acpica/acutils.h
+++ b/drivers/acpi/acpica/acutils.h
@@ -421,7 +421,7 @@ acpi_ut_get_object_size(union acpi_operand_object *obj, acpi_size * obj_length);
421 */ 421 */
422acpi_status acpi_ut_initialize_interfaces(void); 422acpi_status acpi_ut_initialize_interfaces(void);
423 423
424void acpi_ut_interface_terminate(void); 424acpi_status acpi_ut_interface_terminate(void);
425 425
426acpi_status acpi_ut_install_interface(acpi_string interface_name); 426acpi_status acpi_ut_install_interface(acpi_string interface_name);
427 427
diff --git a/drivers/acpi/acpica/utosi.c b/drivers/acpi/acpica/utosi.c
index 36a7d361d7cb..b15acebb96a1 100644
--- a/drivers/acpi/acpica/utosi.c
+++ b/drivers/acpi/acpica/utosi.c
@@ -108,9 +108,14 @@ static struct acpi_interface_info acpi_default_supported_interfaces[] = {
108 108
109acpi_status acpi_ut_initialize_interfaces(void) 109acpi_status acpi_ut_initialize_interfaces(void)
110{ 110{
111 acpi_status status;
111 u32 i; 112 u32 i;
112 113
113 (void)acpi_os_acquire_mutex(acpi_gbl_osi_mutex, ACPI_WAIT_FOREVER); 114 status = acpi_os_acquire_mutex(acpi_gbl_osi_mutex, ACPI_WAIT_FOREVER);
115 if (ACPI_FAILURE(status)) {
116 return (status);
117 }
118
114 acpi_gbl_supported_interfaces = acpi_default_supported_interfaces; 119 acpi_gbl_supported_interfaces = acpi_default_supported_interfaces;
115 120
116 /* Link the static list of supported interfaces */ 121 /* Link the static list of supported interfaces */
@@ -132,20 +137,24 @@ acpi_status acpi_ut_initialize_interfaces(void)
132 * 137 *
133 * PARAMETERS: None 138 * PARAMETERS: None
134 * 139 *
135 * RETURN: None 140 * RETURN: Status
136 * 141 *
137 * DESCRIPTION: Delete all interfaces in the global list. Sets 142 * DESCRIPTION: Delete all interfaces in the global list. Sets
138 * acpi_gbl_supported_interfaces to NULL. 143 * acpi_gbl_supported_interfaces to NULL.
139 * 144 *
140 ******************************************************************************/ 145 ******************************************************************************/
141 146
142void acpi_ut_interface_terminate(void) 147acpi_status acpi_ut_interface_terminate(void)
143{ 148{
149 acpi_status status;
144 struct acpi_interface_info *next_interface; 150 struct acpi_interface_info *next_interface;
145 151
146 (void)acpi_os_acquire_mutex(acpi_gbl_osi_mutex, ACPI_WAIT_FOREVER); 152 status = acpi_os_acquire_mutex(acpi_gbl_osi_mutex, ACPI_WAIT_FOREVER);
147 next_interface = acpi_gbl_supported_interfaces; 153 if (ACPI_FAILURE(status)) {
154 return (status);
155 }
148 156
157 next_interface = acpi_gbl_supported_interfaces;
149 while (next_interface) { 158 while (next_interface) {
150 acpi_gbl_supported_interfaces = next_interface->next; 159 acpi_gbl_supported_interfaces = next_interface->next;
151 160
@@ -160,6 +169,7 @@ void acpi_ut_interface_terminate(void)
160 } 169 }
161 170
162 acpi_os_release_mutex(acpi_gbl_osi_mutex); 171 acpi_os_release_mutex(acpi_gbl_osi_mutex);
172 return (AE_OK);
163} 173}
164 174
165/******************************************************************************* 175/*******************************************************************************
@@ -315,6 +325,7 @@ acpi_status acpi_ut_osi_implementation(struct acpi_walk_state * walk_state)
315 union acpi_operand_object *return_desc; 325 union acpi_operand_object *return_desc;
316 struct acpi_interface_info *interface_info; 326 struct acpi_interface_info *interface_info;
317 acpi_interface_handler interface_handler; 327 acpi_interface_handler interface_handler;
328 acpi_status status;
318 u32 return_value; 329 u32 return_value;
319 330
320 ACPI_FUNCTION_TRACE(ut_osi_implementation); 331 ACPI_FUNCTION_TRACE(ut_osi_implementation);
@@ -336,7 +347,10 @@ acpi_status acpi_ut_osi_implementation(struct acpi_walk_state * walk_state)
336 /* Default return value is 0, NOT SUPPORTED */ 347 /* Default return value is 0, NOT SUPPORTED */
337 348
338 return_value = 0; 349 return_value = 0;
339 (void)acpi_os_acquire_mutex(acpi_gbl_osi_mutex, ACPI_WAIT_FOREVER); 350 status = acpi_os_acquire_mutex(acpi_gbl_osi_mutex, ACPI_WAIT_FOREVER);
351 if (ACPI_FAILURE(status)) {
352 return (status);
353 }
340 354
341 /* Lookup the interface in the global _OSI list */ 355 /* Lookup the interface in the global _OSI list */
342 356
diff --git a/drivers/acpi/acpica/utxface.c b/drivers/acpi/acpica/utxface.c
index 48efb446258c..6505774f223e 100644
--- a/drivers/acpi/acpica/utxface.c
+++ b/drivers/acpi/acpica/utxface.c
@@ -287,7 +287,10 @@ acpi_status acpi_install_interface(acpi_string interface_name)
287 return (AE_BAD_PARAMETER); 287 return (AE_BAD_PARAMETER);
288 } 288 }
289 289
290 (void)acpi_os_acquire_mutex(acpi_gbl_osi_mutex, ACPI_WAIT_FOREVER); 290 status = acpi_os_acquire_mutex(acpi_gbl_osi_mutex, ACPI_WAIT_FOREVER);
291 if (ACPI_FAILURE(status)) {
292 return (status);
293 }
291 294
292 /* Check if the interface name is already in the global list */ 295 /* Check if the interface name is already in the global list */
293 296
@@ -336,7 +339,10 @@ acpi_status acpi_remove_interface(acpi_string interface_name)
336 return (AE_BAD_PARAMETER); 339 return (AE_BAD_PARAMETER);
337 } 340 }
338 341
339 (void)acpi_os_acquire_mutex(acpi_gbl_osi_mutex, ACPI_WAIT_FOREVER); 342 status = acpi_os_acquire_mutex(acpi_gbl_osi_mutex, ACPI_WAIT_FOREVER);
343 if (ACPI_FAILURE(status)) {
344 return (status);
345 }
340 346
341 status = acpi_ut_remove_interface(interface_name); 347 status = acpi_ut_remove_interface(interface_name);
342 348
@@ -362,9 +368,12 @@ ACPI_EXPORT_SYMBOL(acpi_remove_interface)
362 ****************************************************************************/ 368 ****************************************************************************/
363acpi_status acpi_install_interface_handler(acpi_interface_handler handler) 369acpi_status acpi_install_interface_handler(acpi_interface_handler handler)
364{ 370{
365 acpi_status status = AE_OK; 371 acpi_status status;
366 372
367 (void)acpi_os_acquire_mutex(acpi_gbl_osi_mutex, ACPI_WAIT_FOREVER); 373 status = acpi_os_acquire_mutex(acpi_gbl_osi_mutex, ACPI_WAIT_FOREVER);
374 if (ACPI_FAILURE(status)) {
375 return (status);
376 }
368 377
369 if (handler && acpi_gbl_interface_handler) { 378 if (handler && acpi_gbl_interface_handler) {
370 status = AE_ALREADY_EXISTS; 379 status = AE_ALREADY_EXISTS;