diff options
author | Jung-uk Kim <jkim@FreeBSD.org> | 2013-04-11 20:24:34 -0400 |
---|---|---|
committer | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2013-04-12 07:29:46 -0400 |
commit | 388a9902074c3cfe57d2425d766c491d072d2948 (patch) | |
tree | f4cb5406cf6d65eaf3a78146934dd0ad1fc8917d /drivers/acpi | |
parent | c34c82bc9634a099a2652889806c5997f2a3d56f (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.h | 2 | ||||
-rw-r--r-- | drivers/acpi/acpica/utosi.c | 26 | ||||
-rw-r--r-- | drivers/acpi/acpica/utxface.c | 17 |
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 | */ |
422 | acpi_status acpi_ut_initialize_interfaces(void); | 422 | acpi_status acpi_ut_initialize_interfaces(void); |
423 | 423 | ||
424 | void acpi_ut_interface_terminate(void); | 424 | acpi_status acpi_ut_interface_terminate(void); |
425 | 425 | ||
426 | acpi_status acpi_ut_install_interface(acpi_string interface_name); | 426 | acpi_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 | ||
109 | acpi_status acpi_ut_initialize_interfaces(void) | 109 | acpi_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 | ||
142 | void acpi_ut_interface_terminate(void) | 147 | acpi_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 | ****************************************************************************/ |
363 | acpi_status acpi_install_interface_handler(acpi_interface_handler handler) | 369 | acpi_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; |