Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
f5ea908c
Commit
f5ea908c
authored
Mar 20, 2007
by
Len Brown
Browse files
Options
Browse Files
Download
Plain Diff
Pull bugzilla-8171 into release branch
parents
54b8c39f
a8f4af6d
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
90 additions
and
113 deletions
+90
-113
drivers/acpi/events/evmisc.c
drivers/acpi/events/evmisc.c
+6
-2
drivers/acpi/events/evregion.c
drivers/acpi/events/evregion.c
+11
-4
drivers/acpi/events/evxface.c
drivers/acpi/events/evxface.c
+4
-2
drivers/acpi/executer/excreate.c
drivers/acpi/executer/excreate.c
+4
-1
drivers/acpi/executer/exsystem.c
drivers/acpi/executer/exsystem.c
+23
-7
drivers/acpi/executer/exutils.c
drivers/acpi/executer/exutils.c
+20
-84
drivers/acpi/namespace/nseval.c
drivers/acpi/namespace/nseval.c
+9
-2
drivers/acpi/namespace/nsinit.c
drivers/acpi/namespace/nsinit.c
+5
-2
drivers/acpi/namespace/nsxfeval.c
drivers/acpi/namespace/nsxfeval.c
+7
-4
include/acpi/acinterp.h
include/acpi/acinterp.h
+1
-5
No files found.
drivers/acpi/events/evmisc.c
View file @
f5ea908c
...
...
@@ -196,11 +196,15 @@ acpi_ev_queue_notify_request(struct acpi_namespace_node * node,
notify_info
->
notify
.
value
=
(
u16
)
notify_value
;
notify_info
->
notify
.
handler_obj
=
handler_obj
;
acpi_ex_
relinquish
_interpreter
();
acpi_ex_
exit
_interpreter
();
acpi_ev_notify_dispatch
(
notify_info
);
acpi_ex_reacquire_interpreter
();
status
=
acpi_ex_enter_interpreter
();
if
(
ACPI_FAILURE
(
status
))
{
return_ACPI_STATUS
(
status
);
}
}
if
(
!
handler_obj
)
{
...
...
drivers/acpi/events/evregion.c
View file @
f5ea908c
...
...
@@ -291,6 +291,7 @@ acpi_ev_address_space_dispatch(union acpi_operand_object *region_obj,
u32
bit_width
,
acpi_integer
*
value
)
{
acpi_status
status
;
acpi_status
status2
;
acpi_adr_space_handler
handler
;
acpi_adr_space_setup
region_setup
;
union
acpi_operand_object
*
handler_desc
;
...
...
@@ -344,7 +345,7 @@ acpi_ev_address_space_dispatch(union acpi_operand_object *region_obj,
* setup will potentially execute control methods
* (e.g., _REG method for this region)
*/
acpi_ex_
relinquish
_interpreter
();
acpi_ex_
exit
_interpreter
();
status
=
region_setup
(
region_obj
,
ACPI_REGION_ACTIVATE
,
handler_desc
->
address_space
.
context
,
...
...
@@ -352,7 +353,10 @@ acpi_ev_address_space_dispatch(union acpi_operand_object *region_obj,
/* Re-enter the interpreter */
acpi_ex_reacquire_interpreter
();
status2
=
acpi_ex_enter_interpreter
();
if
(
ACPI_FAILURE
(
status2
))
{
return_ACPI_STATUS
(
status2
);
}
/* Check for failure of the Region Setup */
...
...
@@ -405,7 +409,7 @@ acpi_ev_address_space_dispatch(union acpi_operand_object *region_obj,
* exit the interpreter because the handler *might* block -- we don't
* know what it will do, so we can't hold the lock on the intepreter.
*/
acpi_ex_
relinquish
_interpreter
();
acpi_ex_
exit
_interpreter
();
}
/* Call the handler */
...
...
@@ -426,7 +430,10 @@ acpi_ev_address_space_dispatch(union acpi_operand_object *region_obj,
* We just returned from a non-default handler, we must re-enter the
* interpreter
*/
acpi_ex_reacquire_interpreter
();
status2
=
acpi_ex_enter_interpreter
();
if
(
ACPI_FAILURE
(
status2
))
{
return_ACPI_STATUS
(
status2
);
}
}
return_ACPI_STATUS
(
status
);
...
...
drivers/acpi/events/evxface.c
View file @
f5ea908c
...
...
@@ -768,9 +768,11 @@ acpi_status acpi_acquire_global_lock(u16 timeout, u32 * handle)
return
(
AE_BAD_PARAMETER
);
}
/* Must lock interpreter to prevent race conditions */
status
=
acpi_ex_enter_interpreter
();
if
(
ACPI_FAILURE
(
status
))
{
return
(
status
);
}
acpi_ex_enter_interpreter
();
status
=
acpi_ev_acquire_global_lock
(
timeout
);
acpi_ex_exit_interpreter
();
...
...
drivers/acpi/executer/excreate.c
View file @
f5ea908c
...
...
@@ -583,7 +583,10 @@ acpi_ex_create_method(u8 * aml_start,
* Get the sync_level. If method is serialized, a mutex will be
* created for this method when it is parsed.
*/
if
(
method_flags
&
AML_METHOD_SERIALIZED
)
{
if
(
acpi_gbl_all_methods_serialized
)
{
obj_desc
->
method
.
sync_level
=
0
;
obj_desc
->
method
.
method_flags
|=
AML_METHOD_SERIALIZED
;
}
else
if
(
method_flags
&
AML_METHOD_SERIALIZED
)
{
/*
* ACPI 1.0: sync_level = 0
* ACPI 2.0: sync_level = sync_level in method declaration
...
...
drivers/acpi/executer/exsystem.c
View file @
f5ea908c
...
...
@@ -66,6 +66,7 @@ ACPI_MODULE_NAME("exsystem")
acpi_status
acpi_ex_system_wait_semaphore
(
acpi_semaphore
semaphore
,
u16
timeout
)
{
acpi_status
status
;
acpi_status
status2
;
ACPI_FUNCTION_TRACE
(
ex_system_wait_semaphore
);
...
...
@@ -78,7 +79,7 @@ acpi_status acpi_ex_system_wait_semaphore(acpi_semaphore semaphore, u16 timeout)
/* We must wait, so unlock the interpreter */
acpi_ex_
relinquish
_interpreter
();
acpi_ex_
exit
_interpreter
();
status
=
acpi_os_wait_semaphore
(
semaphore
,
1
,
timeout
);
...
...
@@ -88,7 +89,13 @@ acpi_status acpi_ex_system_wait_semaphore(acpi_semaphore semaphore, u16 timeout)
/* Reacquire the interpreter */
acpi_ex_reacquire_interpreter
();
status2
=
acpi_ex_enter_interpreter
();
if
(
ACPI_FAILURE
(
status2
))
{
/* Report fatal error, could not acquire interpreter */
return_ACPI_STATUS
(
status2
);
}
}
return_ACPI_STATUS
(
status
);
...
...
@@ -112,6 +119,7 @@ acpi_status acpi_ex_system_wait_semaphore(acpi_semaphore semaphore, u16 timeout)
acpi_status
acpi_ex_system_wait_mutex
(
acpi_mutex
mutex
,
u16
timeout
)
{
acpi_status
status
;
acpi_status
status2
;
ACPI_FUNCTION_TRACE
(
ex_system_wait_mutex
);
...
...
@@ -124,7 +132,7 @@ acpi_status acpi_ex_system_wait_mutex(acpi_mutex mutex, u16 timeout)
/* We must wait, so unlock the interpreter */
acpi_ex_
relinquish
_interpreter
();
acpi_ex_
exit
_interpreter
();
status
=
acpi_os_acquire_mutex
(
mutex
,
timeout
);
...
...
@@ -134,7 +142,13 @@ acpi_status acpi_ex_system_wait_mutex(acpi_mutex mutex, u16 timeout)
/* Reacquire the interpreter */
acpi_ex_reacquire_interpreter
();
status2
=
acpi_ex_enter_interpreter
();
if
(
ACPI_FAILURE
(
status2
))
{
/* Report fatal error, could not acquire interpreter */
return_ACPI_STATUS
(
status2
);
}
}
return_ACPI_STATUS
(
status
);
...
...
@@ -195,18 +209,20 @@ acpi_status acpi_ex_system_do_stall(u32 how_long)
acpi_status
acpi_ex_system_do_suspend
(
acpi_integer
how_long
)
{
acpi_status
status
;
ACPI_FUNCTION_ENTRY
();
/* Since this thread will sleep, we must release the interpreter */
acpi_ex_
relinquish
_interpreter
();
acpi_ex_
exit
_interpreter
();
acpi_os_sleep
(
how_long
);
/* And now we must get the interpreter again */
acpi_ex_reacquire
_interpreter
();
return
(
AE_OK
);
status
=
acpi_ex_enter
_interpreter
();
return
(
status
);
}
/*******************************************************************************
...
...
drivers/acpi/executer/exutils.c
View file @
f5ea908c
...
...
@@ -76,15 +76,14 @@ static u32 acpi_ex_digits_needed(acpi_integer value, u32 base);
*
* PARAMETERS: None
*
* RETURN:
None
* RETURN:
Status
*
* DESCRIPTION: Enter the interpreter execution region. Failure to enter
* the interpreter region is a fatal system error. Used in
* conjunction with exit_interpreter.
* DESCRIPTION: Enter the interpreter execution region. Failure to enter
* the interpreter region is a fatal system error
*
******************************************************************************/
void
acpi_ex_enter_interpreter
(
void
)
acpi_status
acpi_ex_enter_interpreter
(
void
)
{
acpi_status
status
;
...
...
@@ -92,42 +91,10 @@ void acpi_ex_enter_interpreter(void)
status
=
acpi_ut_acquire_mutex
(
ACPI_MTX_INTERPRETER
);
if
(
ACPI_FAILURE
(
status
))
{
ACPI_ERROR
((
AE_INFO
,
"Could not acquire AML Interpreter mutex"
));
ACPI_ERROR
((
AE_INFO
,
"Could not acquire interpreter mutex"
));
}
return_VOID
;
}
/*******************************************************************************
*
* FUNCTION: acpi_ex_reacquire_interpreter
*
* PARAMETERS: None
*
* RETURN: None
*
* DESCRIPTION: Reacquire the interpreter execution region from within the
* interpreter code. Failure to enter the interpreter region is a
* fatal system error. Used in conjuction with
* relinquish_interpreter
*
******************************************************************************/
void
acpi_ex_reacquire_interpreter
(
void
)
{
ACPI_FUNCTION_TRACE
(
ex_reacquire_interpreter
);
/*
* If the global serialized flag is set, do not release the interpreter,
* since it was not actually released by acpi_ex_relinquish_interpreter.
* This forces the interpreter to be single threaded.
*/
if
(
!
acpi_gbl_all_methods_serialized
)
{
acpi_ex_enter_interpreter
();
}
return_VOID
;
return_ACPI_STATUS
(
status
);
}
/*******************************************************************************
...
...
@@ -138,9 +105,17 @@ void acpi_ex_reacquire_interpreter(void)
*
* RETURN: None
*
* DESCRIPTION: Exit the interpreter execution region. This is the top level
* routine used to exit the interpreter when all processing has
* been completed.
* DESCRIPTION: Exit the interpreter execution region
*
* Cases where the interpreter is unlocked:
* 1) Completion of the execution of a control method
* 2) Method blocked on a Sleep() AML opcode
* 3) Method blocked on an Acquire() AML opcode
* 4) Method blocked on a Wait() AML opcode
* 5) Method blocked to acquire the global lock
* 6) Method blocked to execute a serialized control method that is
* already executing
* 7) About to invoke a user-installed opregion handler
*
******************************************************************************/
...
...
@@ -152,46 +127,7 @@ void acpi_ex_exit_interpreter(void)
status
=
acpi_ut_release_mutex
(
ACPI_MTX_INTERPRETER
);
if
(
ACPI_FAILURE
(
status
))
{
ACPI_ERROR
((
AE_INFO
,
"Could not release AML Interpreter mutex"
));
}
return_VOID
;
}
/*******************************************************************************
*
* FUNCTION: acpi_ex_relinquish_interpreter
*
* PARAMETERS: None
*
* RETURN: None
*
* DESCRIPTION: Exit the interpreter execution region, from within the
* interpreter - before attempting an operation that will possibly
* block the running thread.
*
* Cases where the interpreter is unlocked internally
* 1) Method to be blocked on a Sleep() AML opcode
* 2) Method to be blocked on an Acquire() AML opcode
* 3) Method to be blocked on a Wait() AML opcode
* 4) Method to be blocked to acquire the global lock
* 5) Method to be blocked waiting to execute a serialized control method
* that is currently executing
* 6) About to invoke a user-installed opregion handler
*
******************************************************************************/
void
acpi_ex_relinquish_interpreter
(
void
)
{
ACPI_FUNCTION_TRACE
(
ex_relinquish_interpreter
);
/*
* If the global serialized flag is set, do not release the interpreter.
* This forces the interpreter to be single threaded.
*/
if
(
!
acpi_gbl_all_methods_serialized
)
{
acpi_ex_exit_interpreter
();
ACPI_ERROR
((
AE_INFO
,
"Could not release interpreter mutex"
));
}
return_VOID
;
...
...
@@ -205,8 +141,8 @@ void acpi_ex_relinquish_interpreter(void)
*
* RETURN: none
*
* DESCRIPTION: Truncate a
n ACPI Integer to 32 bits if the execution mode is
*
32-bit, as determined by the revision of the DSDT
.
* DESCRIPTION: Truncate a
number to 32-bits if the currently executing method
*
belongs to a 32-bit ACPI table
.
*
******************************************************************************/
...
...
drivers/acpi/namespace/nseval.c
View file @
f5ea908c
...
...
@@ -154,7 +154,11 @@ acpi_status acpi_ns_evaluate(struct acpi_evaluate_info *info)
* Execute the method via the interpreter. The interpreter is locked
* here before calling into the AML parser
*/
acpi_ex_enter_interpreter
();
status
=
acpi_ex_enter_interpreter
();
if
(
ACPI_FAILURE
(
status
))
{
return_ACPI_STATUS
(
status
);
}
status
=
acpi_ps_execute_method
(
info
);
acpi_ex_exit_interpreter
();
}
else
{
...
...
@@ -178,7 +182,10 @@ acpi_status acpi_ns_evaluate(struct acpi_evaluate_info *info)
* resolution, we must lock it because we could access an opregion.
* The opregion access code assumes that the interpreter is locked.
*/
acpi_ex_enter_interpreter
();
status
=
acpi_ex_enter_interpreter
();
if
(
ACPI_FAILURE
(
status
))
{
return_ACPI_STATUS
(
status
);
}
/* Function has a strange interface */
...
...
drivers/acpi/namespace/nsinit.c
View file @
f5ea908c
...
...
@@ -214,7 +214,7 @@ acpi_ns_init_one_object(acpi_handle obj_handle,
u32
level
,
void
*
context
,
void
**
return_value
)
{
acpi_object_type
type
;
acpi_status
status
=
AE_OK
;
acpi_status
status
;
struct
acpi_init_walk_info
*
info
=
(
struct
acpi_init_walk_info
*
)
context
;
struct
acpi_namespace_node
*
node
=
...
...
@@ -268,7 +268,10 @@ acpi_ns_init_one_object(acpi_handle obj_handle,
/*
* Must lock the interpreter before executing AML code
*/
acpi_ex_enter_interpreter
();
status
=
acpi_ex_enter_interpreter
();
if
(
ACPI_FAILURE
(
status
))
{
return
(
status
);
}
/*
* Each of these types can contain executable AML code within the
...
...
drivers/acpi/namespace/nsxfeval.c
View file @
f5ea908c
...
...
@@ -170,6 +170,7 @@ acpi_evaluate_object(acpi_handle handle,
struct
acpi_buffer
*
return_buffer
)
{
acpi_status
status
;
acpi_status
status2
;
struct
acpi_evaluate_info
*
info
;
acpi_size
buffer_space_needed
;
u32
i
;
...
...
@@ -328,12 +329,14 @@ acpi_evaluate_object(acpi_handle handle,
* Delete the internal return object. NOTE: Interpreter must be
* locked to avoid race condition.
*/
acpi_ex_enter_interpreter
();
status2
=
acpi_ex_enter_interpreter
();
if
(
ACPI_SUCCESS
(
status2
))
{
/* Remove one reference on the return object (should delete it) */
/* Remove one reference on the return object (should delete it) */
acpi_ut_remove_reference
(
info
->
return_object
);
acpi_ex_exit_interpreter
();
acpi_ut_remove_reference
(
info
->
return_object
);
acpi_ex_exit_interpreter
();
}
}
cleanup:
...
...
include/acpi/acinterp.h
View file @
f5ea908c
...
...
@@ -446,14 +446,10 @@ acpi_ex_copy_integer_to_buffer_field(union acpi_operand_object *source_desc,
/*
* exutils - interpreter/scanner utilities
*/
void
acpi_ex_enter_interpreter
(
void
);
acpi_status
acpi_ex_enter_interpreter
(
void
);
void
acpi_ex_exit_interpreter
(
void
);
void
acpi_ex_reacquire_interpreter
(
void
);
void
acpi_ex_relinquish_interpreter
(
void
);
void
acpi_ex_truncate_for32bit_table
(
union
acpi_operand_object
*
obj_desc
);
u8
acpi_ex_acquire_global_lock
(
u32
rule
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment