5c5
< * $Revision: 20 $
---
> * $Revision: 21 $
261,263c261
<
< if ((ObjDesc->Mutex.OwnerThread) &&
< (ObjDesc->Mutex.OwnerThread->ThreadId == WalkState->Thread->ThreadId))
---
> if (ObjDesc->Mutex.OwnerThread)
265,270c263,274
< /*
< * The mutex is already owned by this thread,
< * just increment the acquisition depth
< */
< ObjDesc->Mutex.AcquisitionDepth++;
< return_ACPI_STATUS (AE_OK);
---
> /* Special case for Global Lock, allow all threads */
>
> if ((ObjDesc->Mutex.OwnerThread->ThreadId == WalkState->Thread->ThreadId) ||
> (ObjDesc->Mutex.Semaphore == AcpiGbl_GlobalLockSemaphore))
> {
> /*
> * The mutex is already owned by this thread,
> * just increment the acquisition depth
> */
> ObjDesc->Mutex.AcquisitionDepth++;
> return_ACPI_STATUS (AE_OK);
> }
344c348,353
< /* The Mutex is owned, but this thread must be the owner */
---
> /*
> * 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) &&
> (ObjDesc->Mutex.Semaphore != AcpiGbl_GlobalLockSemaphore))
346d354
< if (ObjDesc->Mutex.OwnerThread->ThreadId != WalkState->Thread->ThreadId)
< * $Revision: 20 $
---
> * $Revision: 21 $
261,263c261
<
< if ((ObjDesc->Mutex.OwnerThread) &&
< (ObjDesc->Mutex.OwnerThread->ThreadId == WalkState->Thread->ThreadId))
---
> if (ObjDesc->Mutex.OwnerThread)
265,270c263,274
< /*
< * The mutex is already owned by this thread,
< * just increment the acquisition depth
< */
< ObjDesc->Mutex.AcquisitionDepth++;
< return_ACPI_STATUS (AE_OK);
---
> /* Special case for Global Lock, allow all threads */
>
> if ((ObjDesc->Mutex.OwnerThread->ThreadId == WalkState->Thread->ThreadId) ||
> (ObjDesc->Mutex.Semaphore == AcpiGbl_GlobalLockSemaphore))
> {
> /*
> * The mutex is already owned by this thread,
> * just increment the acquisition depth
> */
> ObjDesc->Mutex.AcquisitionDepth++;
> return_ACPI_STATUS (AE_OK);
> }
344c348,353
< /* The Mutex is owned, but this thread must be the owner */
---
> /*
> * 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) &&
> (ObjDesc->Mutex.Semaphore != AcpiGbl_GlobalLockSemaphore))
346d354
< if (ObjDesc->Mutex.OwnerThread->ThreadId != WalkState->Thread->ThreadId)