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
nexedi
linux
Commits
a94f1881
Commit
a94f1881
authored
Sep 03, 2005
by
Len Brown
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[ACPI] revert owner-id-3.patch
Signed-off-by:
Len Brown
<
len.brown@intel.com
>
parent
8813dfbf
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
55 additions
and
35 deletions
+55
-35
drivers/acpi/dispatcher/dsmethod.c
drivers/acpi/dispatcher/dsmethod.c
+26
-26
drivers/acpi/parser/psparse.c
drivers/acpi/parser/psparse.c
+15
-6
drivers/acpi/parser/psxface.c
drivers/acpi/parser/psxface.c
+13
-0
drivers/acpi/utilities/utmisc.c
drivers/acpi/utilities/utmisc.c
+0
-2
include/acpi/acdispat.h
include/acpi/acdispat.h
+1
-1
No files found.
drivers/acpi/dispatcher/dsmethod.c
View file @
a94f1881
...
...
@@ -235,16 +235,6 @@ acpi_ds_begin_method_execution(struct acpi_namespace_node *method_node,
acpi_ex_system_wait_semaphore
(
obj_desc
->
method
.
semaphore
,
ACPI_WAIT_FOREVER
);
}
/*
* allocate owner id for this method
*/
if
(
!
obj_desc
->
method
.
thread_count
)
{
status
=
acpi_ut_allocate_owner_id
(
&
obj_desc
->
method
.
owner_id
);
if
(
ACPI_FAILURE
(
status
))
{
return_ACPI_STATUS
(
status
);
}
}
/*
* Increment the method parse tree thread count since it has been
...
...
@@ -299,6 +289,11 @@ acpi_ds_call_control_method(struct acpi_thread_state *thread,
return_ACPI_STATUS
(
AE_NULL_OBJECT
);
}
status
=
acpi_ut_allocate_owner_id
(
&
obj_desc
->
method
.
owner_id
);
if
(
ACPI_FAILURE
(
status
))
{
return_ACPI_STATUS
(
status
);
}
/* Init for new method, wait on concurrency semaphore */
status
=
acpi_ds_begin_method_execution
(
method_node
,
obj_desc
,
...
...
@@ -385,18 +380,22 @@ acpi_ds_call_control_method(struct acpi_thread_state *thread,
if
(
obj_desc
->
method
.
method_flags
&
AML_METHOD_INTERNAL_ONLY
)
{
status
=
obj_desc
->
method
.
implementation
(
next_walk_state
);
return_ACPI_STATUS
(
status
);
}
goto
end
;
cleanup:
/* Decrement the thread count on the method parse tree */
return_ACPI_STATUS
(
AE_OK
);
/* On error, we must delete the new walk state */
cleanup:
acpi_ut_release_owner_id
(
&
obj_desc
->
method
.
owner_id
);
if
(
next_walk_state
&&
(
next_walk_state
->
method_desc
))
{
/* Decrement the thread count on the method parse tree */
next_walk_state
->
method_desc
->
method
.
thread_count
--
;
}
/* On error, we must delete the new walk state */
acpi_ds_terminate_control_method
(
next_walk_state
);
acpi_ds_delete_walk_state
(
next_walk_state
);
end:
(
void
)
acpi_ds_terminate_control_method
(
next_walk_state
);
acpi_ds_delete_walk_state
(
next_walk_state
);
return_ACPI_STATUS
(
status
);
}
...
...
@@ -480,7 +479,7 @@ acpi_ds_restart_control_method(struct acpi_walk_state *walk_state,
*
* PARAMETERS: walk_state - State of the method
*
* RETURN:
None
* RETURN:
Status
*
* DESCRIPTION: Terminate a control method. Delete everything that the method
* created, delete all locals and arguments, and delete the parse
...
...
@@ -488,7 +487,7 @@ acpi_ds_restart_control_method(struct acpi_walk_state *walk_state,
*
******************************************************************************/
void
acpi_ds_terminate_control_method
(
struct
acpi_walk_state
*
walk_state
)
acpi_status
acpi_ds_terminate_control_method
(
struct
acpi_walk_state
*
walk_state
)
{
union
acpi_operand_object
*
obj_desc
;
struct
acpi_namespace_node
*
method_node
;
...
...
@@ -497,14 +496,14 @@ void acpi_ds_terminate_control_method(struct acpi_walk_state *walk_state)
ACPI_FUNCTION_TRACE_PTR
(
"ds_terminate_control_method"
,
walk_state
);
if
(
!
walk_state
)
{
return
_VOID
;
return
(
AE_BAD_PARAMETER
)
;
}
/* The current method object was saved in the walk state */
obj_desc
=
walk_state
->
method_desc
;
if
(
!
obj_desc
)
{
return_
VOID
;
return_
ACPI_STATUS
(
AE_OK
)
;
}
/* Delete all arguments and locals */
...
...
@@ -518,7 +517,7 @@ void acpi_ds_terminate_control_method(struct acpi_walk_state *walk_state)
*/
status
=
acpi_ut_acquire_mutex
(
ACPI_MTX_PARSER
);
if
(
ACPI_FAILURE
(
status
))
{
return_
VOID
;
return_
ACPI_STATUS
(
status
)
;
}
/* Signal completion of the execution of this method if necessary */
...
...
@@ -575,7 +574,7 @@ void acpi_ds_terminate_control_method(struct acpi_walk_state *walk_state)
*/
status
=
acpi_ut_acquire_mutex
(
ACPI_MTX_NAMESPACE
);
if
(
ACPI_FAILURE
(
status
))
{
goto
cleanup
;
return_ACPI_STATUS
(
status
)
;
}
if
(
method_node
->
child
)
{
...
...
@@ -593,9 +592,10 @@ void acpi_ds_terminate_control_method(struct acpi_walk_state *walk_state)
owner_id
);
if
(
ACPI_FAILURE
(
status
))
{
goto
cleanup
;
return_ACPI_STATUS
(
status
)
;
}
}
cleanup:
acpi_ut_release_mutex
(
ACPI_MTX_PARSER
);
status
=
acpi_ut_release_mutex
(
ACPI_MTX_PARSER
);
return_ACPI_STATUS
(
status
);
}
drivers/acpi/parser/psparse.c
View file @
a94f1881
...
...
@@ -438,6 +438,7 @@ acpi_ps_next_parse_state(struct acpi_walk_state *walk_state,
acpi_status
acpi_ps_parse_aml
(
struct
acpi_walk_state
*
walk_state
)
{
acpi_status
status
;
acpi_status
terminate_status
;
struct
acpi_thread_state
*
thread
;
struct
acpi_thread_state
*
prev_walk_list
=
acpi_gbl_current_walk_list
;
struct
acpi_walk_state
*
previous_walk_state
;
...
...
@@ -507,9 +508,6 @@ acpi_status acpi_ps_parse_aml(struct acpi_walk_state *walk_state)
walk_state
->
method_node
,
NULL
,
status
);
/* Make sure that failed method will be cleaned as if it was executed */
walk_state
->
parse_flags
|=
ACPI_PARSE_EXECUTE
;
/* Check for possible multi-thread reentrancy problem */
if
((
status
==
AE_ALREADY_EXISTS
)
&&
...
...
@@ -526,6 +524,14 @@ acpi_status acpi_ps_parse_aml(struct acpi_walk_state *walk_state)
}
}
if
(
walk_state
->
method_desc
)
{
/* Decrement the thread count on the method parse tree */
if
(
walk_state
->
method_desc
->
method
.
thread_count
)
{
walk_state
->
method_desc
->
method
.
thread_count
--
;
}
}
/* We are done with this walk, move on to the parent if any */
walk_state
=
acpi_ds_pop_walk_state
(
thread
);
...
...
@@ -540,10 +546,13 @@ acpi_status acpi_ps_parse_aml(struct acpi_walk_state *walk_state)
*/
if
((
walk_state
->
parse_flags
&
ACPI_PARSE_MODE_MASK
)
==
ACPI_PARSE_EXECUTE
)
{
if
(
walk_state
->
method_desc
)
{
walk_state
->
method_desc
->
method
.
thread_count
--
;
terminate_status
=
acpi_ds_terminate_control_method
(
walk_state
);
if
(
ACPI_FAILURE
(
terminate_status
))
{
ACPI_REPORT_ERROR
((
"Could not terminate control method properly
\n
"
));
/* Ignore error and continue */
}
acpi_ds_terminate_control_method
(
walk_state
);
}
/* Delete this walk state and all linked control states */
...
...
drivers/acpi/parser/psxface.c
View file @
a94f1881
...
...
@@ -98,6 +98,16 @@ acpi_status acpi_ps_execute_method(struct acpi_parameter_info *info)
return_ACPI_STATUS
(
status
);
}
/*
* Get a new owner_id for objects created by this method. Namespace
* objects (such as Operation Regions) can be created during the
* first pass parse.
*/
status
=
acpi_ut_allocate_owner_id
(
&
info
->
obj_desc
->
method
.
owner_id
);
if
(
ACPI_FAILURE
(
status
))
{
return_ACPI_STATUS
(
status
);
}
/*
* The caller "owns" the parameters, so give each one an extra
* reference
...
...
@@ -129,6 +139,9 @@ acpi_status acpi_ps_execute_method(struct acpi_parameter_info *info)
status
=
acpi_ps_execute_pass
(
info
);
cleanup:
if
(
info
->
obj_desc
->
method
.
owner_id
)
{
acpi_ut_release_owner_id
(
&
info
->
obj_desc
->
method
.
owner_id
);
}
/* Take away the extra reference that we gave the parameters above */
...
...
drivers/acpi/utilities/utmisc.c
View file @
a94f1881
...
...
@@ -67,8 +67,6 @@ acpi_status acpi_ut_allocate_owner_id(acpi_owner_id * owner_id)
ACPI_FUNCTION_TRACE
(
"ut_allocate_owner_id"
);
WARN_ON
(
*
owner_id
);
/* Mutex for the global ID mask */
status
=
acpi_ut_acquire_mutex
(
ACPI_MTX_CACHES
);
...
...
include/acpi/acdispat.h
View file @
a94f1881
...
...
@@ -194,7 +194,7 @@ acpi_status
acpi_ds_restart_control_method
(
struct
acpi_walk_state
*
walk_state
,
union
acpi_operand_object
*
return_desc
);
void
acpi_status
acpi_ds_terminate_control_method
(
struct
acpi_walk_state
*
walk_state
);
acpi_status
...
...
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