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
f0e5ed7f
Commit
f0e5ed7f
authored
Feb 16, 2007
by
Len Brown
Browse files
Options
Browse Files
Download
Plain Diff
Pull bugzilla-5534 into release branch
parents
8800c0eb
5f7748cf
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
30 additions
and
37 deletions
+30
-37
drivers/acpi/dispatcher/dsmethod.c
drivers/acpi/dispatcher/dsmethod.c
+5
-7
drivers/acpi/events/evmisc.c
drivers/acpi/events/evmisc.c
+5
-6
drivers/acpi/executer/exdump.c
drivers/acpi/executer/exdump.c
+1
-1
drivers/acpi/executer/exmutex.c
drivers/acpi/executer/exmutex.c
+16
-20
drivers/acpi/utilities/utdelete.c
drivers/acpi/utilities/utdelete.c
+0
-1
include/acpi/acinterp.h
include/acpi/acinterp.h
+2
-1
include/acpi/acobject.h
include/acpi/acobject.h
+1
-1
No files found.
drivers/acpi/dispatcher/dsmethod.c
View file @
f0e5ed7f
...
...
@@ -231,10 +231,8 @@ acpi_ds_begin_method_execution(struct acpi_namespace_node *method_node,
* Obtain the method mutex if necessary. Do not acquire mutex for a
* recursive call.
*/
if
(
!
walk_state
||
!
obj_desc
->
method
.
mutex
->
mutex
.
owner_thread
||
(
walk_state
->
thread
!=
obj_desc
->
method
.
mutex
->
mutex
.
owner_thread
))
{
if
(
acpi_os_get_thread_id
()
!=
obj_desc
->
method
.
mutex
->
mutex
.
owner_thread_id
)
{
/*
* Acquire the method mutex. This releases the interpreter if we
* block (and reacquires it before it returns)
...
...
@@ -248,14 +246,14 @@ acpi_ds_begin_method_execution(struct acpi_namespace_node *method_node,
}
/* Update the mutex and walk info and save the original sync_level */
obj_desc
->
method
.
mutex
->
mutex
.
owner_thread_id
=
acpi_os_get_thread_id
();
if
(
walk_state
)
{
obj_desc
->
method
.
mutex
->
mutex
.
original_sync_level
=
walk_state
->
thread
->
current_sync_level
;
obj_desc
->
method
.
mutex
->
mutex
.
owner_thread
=
walk_state
->
thread
;
walk_state
->
thread
->
current_sync_level
=
obj_desc
->
method
.
sync_level
;
}
else
{
...
...
@@ -569,7 +567,7 @@ acpi_ds_terminate_control_method(union acpi_operand_object *method_desc,
acpi_os_release_mutex
(
method_desc
->
method
.
mutex
->
mutex
.
os_mutex
);
method_desc
->
method
.
mutex
->
mutex
.
owner_thread
=
NULL
;
method_desc
->
method
.
mutex
->
mutex
.
owner_thread
_id
=
ACPI_MUTEX_NOT_ACQUIRED
;
}
}
...
...
drivers/acpi/events/evmisc.c
View file @
f0e5ed7f
...
...
@@ -196,12 +196,11 @@ acpi_ev_queue_notify_request(struct acpi_namespace_node * node,
notify_info
->
notify
.
value
=
(
u16
)
notify_value
;
notify_info
->
notify
.
handler_obj
=
handler_obj
;
status
=
acpi_os_execute
(
OSL_NOTIFY_HANDLER
,
acpi_ev_notify_dispatch
,
notify_info
);
if
(
ACPI_FAILURE
(
status
))
{
acpi_ut_delete_generic_state
(
notify_info
);
}
acpi_ex_relinquish_interpreter
();
acpi_ev_notify_dispatch
(
notify_info
);
acpi_ex_reacquire_interpreter
();
}
if
(
!
handler_obj
)
{
...
...
drivers/acpi/executer/exdump.c
View file @
f0e5ed7f
...
...
@@ -134,7 +134,7 @@ static struct acpi_exdump_info acpi_ex_dump_method[8] = {
static
struct
acpi_exdump_info
acpi_ex_dump_mutex
[
5
]
=
{
{
ACPI_EXD_INIT
,
ACPI_EXD_TABLE_SIZE
(
acpi_ex_dump_mutex
),
NULL
},
{
ACPI_EXD_UINT8
,
ACPI_EXD_OFFSET
(
mutex
.
sync_level
),
"Sync Level"
},
{
ACPI_EXD_POINTER
,
ACPI_EXD_OFFSET
(
mutex
.
owner_thread
),
"Owner Thread"
},
{
ACPI_EXD_POINTER
,
ACPI_EXD_OFFSET
(
mutex
.
owner_thread
_id
),
"Owner Thread"
},
{
ACPI_EXD_UINT16
,
ACPI_EXD_OFFSET
(
mutex
.
acquisition_depth
),
"Acquire Depth"
},
{
ACPI_EXD_POINTER
,
ACPI_EXD_OFFSET
(
mutex
.
os_mutex
),
"OsMutex"
}
...
...
drivers/acpi/executer/exmutex.c
View file @
f0e5ed7f
...
...
@@ -66,10 +66,9 @@ acpi_ex_link_mutex(union acpi_operand_object *obj_desc,
*
******************************************************************************/
void
acpi_ex_unlink_mutex
(
union
acpi_operand_object
*
obj_desc
)
void
acpi_ex_unlink_mutex
(
union
acpi_operand_object
*
obj_desc
,
struct
acpi_thread_state
*
thread
)
{
struct
acpi_thread_state
*
thread
=
obj_desc
->
mutex
.
owner_thread
;
if
(
!
thread
)
{
return
;
}
...
...
@@ -174,16 +173,13 @@ acpi_ex_acquire_mutex(union acpi_operand_object *time_desc,
/* Support for multiple acquires by the owning thread */
if
(
obj_desc
->
mutex
.
owner_thread
)
{
if
(
obj_desc
->
mutex
.
owner_thread
->
thread_id
==
walk_state
->
thread
->
thread_id
)
{
/*
* The mutex is already owned by this thread, just increment the
* acquisition depth
*/
obj_desc
->
mutex
.
acquisition_depth
++
;
return_ACPI_STATUS
(
AE_OK
);
}
if
(
obj_desc
->
mutex
.
owner_thread_id
==
acpi_os_get_thread_id
())
{
/*
* The mutex is already owned by this thread, just increment the
* acquisition depth
*/
obj_desc
->
mutex
.
acquisition_depth
++
;
return_ACPI_STATUS
(
AE_OK
);
}
/* Acquire the mutex, wait if necessary. Special case for Global Lock */
...
...
@@ -206,7 +202,7 @@ acpi_ex_acquire_mutex(union acpi_operand_object *time_desc,
/* Have the mutex: update mutex and walk info and save the sync_level */
obj_desc
->
mutex
.
owner_thread
=
walk_state
->
thread
;
obj_desc
->
mutex
.
owner_thread
_id
=
acpi_os_get_thread_id
()
;
obj_desc
->
mutex
.
acquisition_depth
=
1
;
obj_desc
->
mutex
.
original_sync_level
=
walk_state
->
thread
->
current_sync_level
;
...
...
@@ -246,7 +242,7 @@ acpi_ex_release_mutex(union acpi_operand_object *obj_desc,
/* The mutex must have been previously acquired in order to release it */
if
(
!
obj_desc
->
mutex
.
owner_thread
)
{
if
(
!
obj_desc
->
mutex
.
owner_thread
_id
)
{
ACPI_ERROR
((
AE_INFO
,
"Cannot release Mutex [%4.4s], not acquired"
,
acpi_ut_get_node_name
(
obj_desc
->
mutex
.
node
)));
...
...
@@ -266,14 +262,14 @@ acpi_ex_release_mutex(union acpi_operand_object *obj_desc,
* The Mutex is owned, but this thread must be the owner.
* Special case for Global Lock, any thread can release
*/
if
((
obj_desc
->
mutex
.
owner_thread
->
thread
_id
!=
if
((
obj_desc
->
mutex
.
owner_thread_id
!=
walk_state
->
thread
->
thread_id
)
&&
(
obj_desc
->
mutex
.
os_mutex
!=
acpi_gbl_global_lock_mutex
))
{
ACPI_ERROR
((
AE_INFO
,
"Thread %lX cannot release Mutex [%4.4s] acquired by thread %lX"
,
(
unsigned
long
)
walk_state
->
thread
->
thread_id
,
acpi_ut_get_node_name
(
obj_desc
->
mutex
.
node
),
(
unsigned
long
)
obj_desc
->
mutex
.
owner_thread
->
thread
_id
));
(
unsigned
long
)
obj_desc
->
mutex
.
owner_thread_id
));
return_ACPI_STATUS
(
AE_AML_NOT_OWNER
);
}
...
...
@@ -300,7 +296,7 @@ acpi_ex_release_mutex(union acpi_operand_object *obj_desc,
/* Unlink the mutex from the owner's list */
acpi_ex_unlink_mutex
(
obj_desc
);
acpi_ex_unlink_mutex
(
obj_desc
,
walk_state
->
thread
);
/* Release the mutex, special case for Global Lock */
...
...
@@ -312,7 +308,7 @@ acpi_ex_release_mutex(union acpi_operand_object *obj_desc,
/* Update the mutex and restore sync_level */
obj_desc
->
mutex
.
owner_thread
=
NULL
;
obj_desc
->
mutex
.
owner_thread
_id
=
ACPI_MUTEX_NOT_ACQUIRED
;
walk_state
->
thread
->
current_sync_level
=
obj_desc
->
mutex
.
original_sync_level
;
...
...
@@ -367,7 +363,7 @@ void acpi_ex_release_all_mutexes(struct acpi_thread_state *thread)
/* Mark mutex unowned */
obj_desc
->
mutex
.
owner_thread
=
NULL
;
obj_desc
->
mutex
.
owner_thread
_id
=
ACPI_MUTEX_NOT_ACQUIRED
;
/* Update Thread sync_level (Last mutex is the important one) */
...
...
drivers/acpi/utilities/utdelete.c
View file @
f0e5ed7f
...
...
@@ -170,7 +170,6 @@ static void acpi_ut_delete_internal_obj(union acpi_operand_object *object)
acpi_os_delete_mutex
(
object
->
mutex
.
os_mutex
);
acpi_gbl_global_lock_mutex
=
NULL
;
}
else
{
acpi_ex_unlink_mutex
(
object
);
acpi_os_delete_mutex
(
object
->
mutex
.
os_mutex
);
}
break
;
...
...
include/acpi/acinterp.h
View file @
f0e5ed7f
...
...
@@ -253,7 +253,8 @@ acpi_ex_release_mutex(union acpi_operand_object *obj_desc,
void
acpi_ex_release_all_mutexes
(
struct
acpi_thread_state
*
thread
);
void
acpi_ex_unlink_mutex
(
union
acpi_operand_object
*
obj_desc
);
void
acpi_ex_unlink_mutex
(
union
acpi_operand_object
*
obj_desc
,
struct
acpi_thread_state
*
thread
);
/*
* exprep - ACPI AML execution - prep utilities
...
...
include/acpi/acobject.h
View file @
f0e5ed7f
...
...
@@ -155,7 +155,7 @@ struct acpi_object_event {
struct
acpi_object_mutex
{
ACPI_OBJECT_COMMON_HEADER
u8
sync_level
;
/* 0-15, specified in Mutex() call */
u16
acquisition_depth
;
/* Allow multiple Acquires, same thread */
struct
acpi_thread_state
*
owner_threa
d
;
/* Current owner of the mutex */
acpi_thread_id
owner_thread_i
d
;
/* Current owner of the mutex */
acpi_mutex
os_mutex
;
/* Actual OS synchronization object */
union
acpi_operand_object
*
prev
;
/* Link for list of acquired mutexes */
union
acpi_operand_object
*
next
;
/* Link for list of acquired mutexes */
...
...
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