summaryrefslogtreecommitdiffstats
path: root/sys/contrib/dev/acpica/executer/exmutex.c
diff options
context:
space:
mode:
authorjkim <jkim@FreeBSD.org>2010-03-05 21:39:16 +0000
committerjkim <jkim@FreeBSD.org>2010-03-05 21:39:16 +0000
commita2ef6b30075fc20f91a4ebf4cbbd63da1d1bdecf (patch)
treecc29a31c57463a366a828ba9393fc7a03528456a /sys/contrib/dev/acpica/executer/exmutex.c
parent0c340bbf067173091d805c0cc0f514b9d684ce90 (diff)
parent703ec8bd78cb3d32765f74421c806732650c7592 (diff)
downloadFreeBSD-src-a2ef6b30075fc20f91a4ebf4cbbd63da1d1bdecf.zip
FreeBSD-src-a2ef6b30075fc20f91a4ebf4cbbd63da1d1bdecf.tar.gz
Merge ACPICA 20100304.
Diffstat (limited to 'sys/contrib/dev/acpica/executer/exmutex.c')
-rw-r--r--sys/contrib/dev/acpica/executer/exmutex.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/sys/contrib/dev/acpica/executer/exmutex.c b/sys/contrib/dev/acpica/executer/exmutex.c
index 0bd66b3..5787b34 100644
--- a/sys/contrib/dev/acpica/executer/exmutex.c
+++ b/sys/contrib/dev/acpica/executer/exmutex.c
@@ -353,7 +353,7 @@ AcpiExAcquireMutex (
if (WalkState->Thread->CurrentSyncLevel > ObjDesc->Mutex.SyncLevel)
{
ACPI_ERROR ((AE_INFO,
- "Cannot acquire Mutex [%4.4s], current SyncLevel is too large (%d)",
+ "Cannot acquire Mutex [%4.4s], current SyncLevel is too large (%u)",
AcpiUtGetNodeName (ObjDesc->Mutex.Node),
WalkState->Thread->CurrentSyncLevel));
return_ACPI_STATUS (AE_AML_MUTEX_ORDER);
@@ -471,6 +471,7 @@ AcpiExReleaseMutex (
{
ACPI_STATUS Status = AE_OK;
UINT8 PreviousSyncLevel;
+ ACPI_THREAD_STATE *OwnerThread;
ACPI_FUNCTION_TRACE (ExReleaseMutex);
@@ -481,9 +482,11 @@ AcpiExReleaseMutex (
return_ACPI_STATUS (AE_BAD_PARAMETER);
}
+ OwnerThread = ObjDesc->Mutex.OwnerThread;
+
/* The mutex must have been previously acquired in order to release it */
- if (!ObjDesc->Mutex.OwnerThread)
+ if (!OwnerThread)
{
ACPI_ERROR ((AE_INFO, "Cannot release Mutex [%4.4s], not acquired",
AcpiUtGetNodeName (ObjDesc->Mutex.Node)));
@@ -503,14 +506,14 @@ AcpiExReleaseMutex (
* The Mutex is owned, but this thread must be the owner.
* Special case for Global Lock, any thread can release
*/
- if ((ObjDesc->Mutex.OwnerThread->ThreadId != WalkState->Thread->ThreadId) &&
+ if ((OwnerThread->ThreadId != WalkState->Thread->ThreadId) &&
(ObjDesc != AcpiGbl_GlobalLockMutex))
{
ACPI_ERROR ((AE_INFO,
"Thread %p cannot release Mutex [%4.4s] acquired by thread %p",
ACPI_CAST_PTR (void, WalkState->Thread->ThreadId),
AcpiUtGetNodeName (ObjDesc->Mutex.Node),
- ACPI_CAST_PTR (void, ObjDesc->Mutex.OwnerThread->ThreadId)));
+ ACPI_CAST_PTR (void, OwnerThread->ThreadId)));
return_ACPI_STATUS (AE_AML_NOT_OWNER);
}
@@ -521,10 +524,10 @@ AcpiExReleaseMutex (
* different level can only mean that the mutex ordering rule is being
* violated. This behavior is clarified in ACPI 4.0 specification.
*/
- if (ObjDesc->Mutex.SyncLevel != WalkState->Thread->CurrentSyncLevel)
+ if (ObjDesc->Mutex.SyncLevel != OwnerThread->CurrentSyncLevel)
{
ACPI_ERROR ((AE_INFO,
- "Cannot release Mutex [%4.4s], SyncLevel mismatch: mutex %d current %d",
+ "Cannot release Mutex [%4.4s], SyncLevel mismatch: mutex %u current %u",
AcpiUtGetNodeName (ObjDesc->Mutex.Node),
ObjDesc->Mutex.SyncLevel, WalkState->Thread->CurrentSyncLevel));
return_ACPI_STATUS (AE_AML_MUTEX_ORDER);
@@ -536,7 +539,7 @@ AcpiExReleaseMutex (
* acquired, but are not released in reverse order.
*/
PreviousSyncLevel =
- WalkState->Thread->AcquiredMutexList->Mutex.OriginalSyncLevel;
+ OwnerThread->AcquiredMutexList->Mutex.OriginalSyncLevel;
Status = AcpiExReleaseMutexObject (ObjDesc);
if (ACPI_FAILURE (Status))
@@ -548,7 +551,7 @@ AcpiExReleaseMutex (
{
/* Restore the previous SyncLevel */
- WalkState->Thread->CurrentSyncLevel = PreviousSyncLevel;
+ OwnerThread->CurrentSyncLevel = PreviousSyncLevel;
}
return_ACPI_STATUS (Status);
}
OpenPOWER on IntegriCloud