Dana H. Myers <> wrote:
> Bill Holler wrote:
>> Dana H. Myers wrote:
>>
>>> Bill Holler wrote:
>>>
>>>> Hi Aubrey,
>>>>
>>>> I suspect we should raise the interrupt priority level high enough
>>>> for mutex_enter() to treat AcpiGbl_HardwareLock as a spin lock.
>>>>
>> I was thinking of something else.  Raising the spl will not help.
>>
>>
>>
>>>> AcpiGbl_HardwareLock is declared as an ACPI_SPINLOCK.
>>>> AcpiOsCreateLock() initializes AcpiGbl_HardwareLock as a
>>>> MUTEX_DRIVER.  The mutex must be an ADAPTIVE lock.
>>>>
>>>>
>>>> What is the idle code doing with interrupts while it places the
>>>> cpu into deeper c-states with the ACPI interface?
>>>> I assume it will be like the current cpu_halt() function masks
>>>> interrupts before halting the processor?
>>>>
>>>>
>>> I'd like to understand better the exposure here.  It's true
>>> that AcpiOsCreateLock() uses adaptive mutexes; this hasn't
>>> appeared to present a problem in the past and I'd like
>>> to understand the specific cases where a spin mutex
>>> is truly required.  Perhaps the problem is better addressed
>>> at a higher algorithmic level, for example.
>>>
>>
>> The ACPI interfaces need to be used to halt the processor into
>> ACPI C2 and C3.  The idle thread cannot block on a mutex
>> because the idle thread must always be dispatch-able.
>> It would be much simpler if the idle thread can use the ACPI
>> interface instead of alternatives such as creating a new block-able
>> thread to do this.
>>
>> AcpiGbl_HardwareLock is defined as an ACPI_"SPIN"LOCK.  :-)
>> On the other hand, changing AcpiGbl_HardwareLock does
>> sound risky.
>>
>>
> Oh, of course.  The thread in deep C-state will go to sleep holding
> the mutex.  Doh.  How does Linux deal with this?  Is a spinlock
> CPU-local?
>
deep c-state doesn't create another thread. If deep c-state is supported,
current idle thread proc will be replaced by the cpu_acpi_idle.
cpu_acpi_idle can't block on a mutex since as Bill pointed out, the idle
 thread must always be dispatch-able. Linux deal with this as a spinlock
with interrupt masked.

Thanks,
-Aubrey

Reply via email to