Mutex
Status = AcpiOsCreateMutex (&MutexDesc->Mutex.OsMutex);
MutexDesc->Mutex.SyncLevel = MethodDesc->Method.SyncLevel;
MethodDesc->Method.Mutex = MutexDesc;
if (!ObjDesc->Method.Mutex)
ObjDesc->Method.Mutex->Mutex.SyncLevel))
!ObjDesc->Method.Mutex->Mutex.ThreadId ||
ObjDesc->Method.Mutex->Mutex.ThreadId))
ObjDesc->Method.Mutex->Mutex.OsMutex, ACPI_WAIT_FOREVER);
ObjDesc->Method.Mutex->Mutex.OriginalSyncLevel =
ObjDesc->Method.Mutex->Mutex.ThreadId =
ObjDesc->Method.Mutex->Mutex.OriginalSyncLevel =
ObjDesc->Method.Mutex->Mutex.SyncLevel;
ObjDesc->Method.Mutex->Mutex.ThreadId =
ObjDesc->Method.Mutex->Mutex.AcquisitionDepth++;
if (ObjDesc->Method.Mutex)
AcpiOsReleaseMutex (ObjDesc->Method.Mutex->Mutex.OsMutex);
if (MethodDesc->Method.Mutex)
MethodDesc->Method.Mutex->Mutex.AcquisitionDepth--;
if (!MethodDesc->Method.Mutex->Mutex.AcquisitionDepth)
MethodDesc->Method.Mutex->Mutex.OriginalSyncLevel;
MethodDesc->Method.Mutex->Mutex.OsMutex);
MethodDesc->Method.Mutex->Mutex.ThreadId = 0;
Status = AcpiExSystemWaitMutex (AcpiGbl_GlobalLockMutex->Mutex.OsMutex,
AcpiOsReleaseMutex (AcpiGbl_GlobalLockMutex->Mutex.OsMutex);
Status = AcpiOsCreateMutex (&ObjDesc->Mutex.OsMutex);
ObjDesc->Mutex.SyncLevel = (UINT8) WalkState->Operands[1]->Integer.Value;
ObjDesc->Mutex.Node = (ACPI_NAMESPACE_NODE *) WalkState->Operands[0];
ObjDesc->Mutex.Node, ObjDesc, ACPI_TYPE_MUTEX);
{ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Method.Mutex), "Mutex"},
{ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Mutex.SyncLevel), "Sync Level"},
{ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Mutex.OriginalSyncLevel), "Original Sync Level"},
{ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Mutex.OwnerThread), "Owner Thread"},
{ACPI_EXD_UINT16, ACPI_EXD_OFFSET (Mutex.AcquisitionDepth), "Acquire Depth"},
{ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Mutex.OsMutex), "OsMutex"}
ACPI_THREAD_STATE *Thread = ObjDesc->Mutex.OwnerThread;
if (ObjDesc->Mutex.Next)
(ObjDesc->Mutex.Next)->Mutex.Prev = ObjDesc->Mutex.Prev;
if (ObjDesc->Mutex.Prev)
(ObjDesc->Mutex.Prev)->Mutex.Next = ObjDesc->Mutex.Next;
(ObjDesc->Mutex.Prev)->Mutex.OriginalSyncLevel =
ObjDesc->Mutex.OriginalSyncLevel;
Thread->AcquiredMutexList = ObjDesc->Mutex.Next;
ObjDesc->Mutex.Prev = NULL;
ObjDesc->Mutex.Next = ListHead;
ListHead->Mutex.Prev = ObjDesc;
if (ObjDesc->Mutex.ThreadId == ThreadId)
ObjDesc->Mutex.AcquisitionDepth++;
Status = AcpiExSystemWaitMutex (ObjDesc->Mutex.OsMutex, Timeout);
ObjDesc->Mutex.ThreadId = ThreadId;
ObjDesc->Mutex.AcquisitionDepth = 1;
ObjDesc->Mutex.OriginalSyncLevel = 0;
ObjDesc->Mutex.OwnerThread = NULL; /* Used only for AML Acquire() */
AcpiUtGetNodeName (ObjDesc->Mutex.Node)));
if (WalkState->Thread->CurrentSyncLevel > ObjDesc->Mutex.SyncLevel)
AcpiUtGetNodeName (ObjDesc->Mutex.Node),
ObjDesc->Mutex.SyncLevel, WalkState->Thread->CurrentSyncLevel,
ObjDesc->Mutex.AcquisitionDepth, WalkState->Thread));
if (ACPI_SUCCESS (Status) && ObjDesc->Mutex.AcquisitionDepth == 1)
ObjDesc->Mutex.OwnerThread = WalkState->Thread;
ObjDesc->Mutex.OriginalSyncLevel =
ObjDesc->Mutex.SyncLevel;
ObjDesc->Mutex.SyncLevel, WalkState->Thread->CurrentSyncLevel,
ObjDesc->Mutex.AcquisitionDepth));
if (ObjDesc->Mutex.AcquisitionDepth == 0)
ObjDesc->Mutex.AcquisitionDepth--;
if (ObjDesc->Mutex.AcquisitionDepth != 0)
if (ObjDesc->Mutex.OwnerThread)
ObjDesc->Mutex.OwnerThread = NULL;
AcpiOsReleaseMutex (ObjDesc->Mutex.OsMutex);
ObjDesc->Mutex.ThreadId = 0;
OwnerThread = ObjDesc->Mutex.OwnerThread;
AcpiUtGetNodeName (ObjDesc->Mutex.Node)));
AcpiUtGetNodeName (ObjDesc->Mutex.Node)));
AcpiUtGetNodeName (ObjDesc->Mutex.Node),
if (ObjDesc->Mutex.SyncLevel != OwnerThread->CurrentSyncLevel)
AcpiUtGetNodeName (ObjDesc->Mutex.Node),
ObjDesc->Mutex.SyncLevel, WalkState->Thread->CurrentSyncLevel));
OwnerThread->AcquiredMutexList->Mutex.OriginalSyncLevel;
ObjDesc->Mutex.SyncLevel, WalkState->Thread->CurrentSyncLevel,
PreviousSyncLevel, ObjDesc->Mutex.AcquisitionDepth,
if (ObjDesc->Mutex.AcquisitionDepth == 0)
ObjDesc->Mutex.SyncLevel, WalkState->Thread->CurrentSyncLevel,
PreviousSyncLevel, ObjDesc->Mutex.AcquisitionDepth));
ObjDesc->Mutex.Node->Name.Ascii, ObjDesc->Mutex.SyncLevel,
ObjDesc->Mutex.AcquisitionDepth));
AcpiOsReleaseMutex (ObjDesc->Mutex.OsMutex);
Thread->CurrentSyncLevel = ObjDesc->Mutex.OriginalSyncLevel;
Next = ObjDesc->Mutex.Next;
ObjDesc->Mutex.Prev = NULL;
ObjDesc->Mutex.Next = NULL;
ObjDesc->Mutex.AcquisitionDepth = 0;
ObjDesc->Mutex.OwnerThread = NULL;
ObjDesc->Mutex.ThreadId = 0;
ACPI_MUTEX Mutex,
Status = AcpiOsAcquireMutex (Mutex, ACPI_DO_NOT_WAIT);
Status = AcpiOsAcquireMutex (Mutex, Timeout);
ObjDesc->Mutex.Node = NewNode;
ObjDesc->Mutex.SyncLevel = (UINT8) (ACPI_TO_INTEGER (Val) - 1);
Status = AcpiOsCreateMutex (&ObjDesc->Mutex.OsMutex);
Status = AcpiOsCreateMutex (&DestDesc->Mutex.OsMutex);
Object, Object->Mutex.OsMutex));
AcpiOsDeleteMutex (Object->Mutex.OsMutex);
AcpiOsDeleteMutex (Object->Mutex.OsMutex);
if (Object->Method.Mutex)
AcpiOsDeleteMutex (Object->Method.Mutex->Mutex.OsMutex);
AcpiUtDeleteObjectDesc (Object->Method.Mutex);
Object->Method.Mutex = NULL;
AcpiGbl_MutexInfo[i].Mutex = NULL;
if (!AcpiGbl_MutexInfo[MutexId].Mutex)
Status = AcpiOsCreateMutex (&AcpiGbl_MutexInfo[MutexId].Mutex);
AcpiOsDeleteMutex (AcpiGbl_MutexInfo[MutexId].Mutex);
AcpiGbl_MutexInfo[MutexId].Mutex = NULL;
AcpiGbl_MutexInfo[MutexId].Mutex, ACPI_WAIT_FOREVER);
AcpiOsReleaseMutex (AcpiGbl_MutexInfo[MutexId].Mutex);
Status = AcpiOsAcquireMutex (MutexObj->Mutex.OsMutex, Timeout);
AcpiOsReleaseMutex (MutexObj->Mutex.OsMutex);
ACPI_MUTEX Mutex,
ACPI_MUTEX Mutex;
union acpi_operand_object *Mutex;
ACPI_OBJECT_MUTEX Mutex;
Mutex(): fLock(0) {}