Ticket #478 (closed defect: fixed)
AcpiExecSingleCPU: Spinlock is not released
| Reported by: | erdmann | Owned by: | erdmann |
|---|---|---|---|
| Priority: | major | Milestone: | |
| Component: | ACPI PSD | Version: | 3.17 |
| Keywords: | Cc: |
Description
src\acpi\psd\acpicpu.c, routine "AcpiExecSingleCPU":
around line: 802
if (ExeFlag? & SMPEXEC_IPITIME), a CPU spinlock is aquired, then the user function executed but the CPU spinlock is not released thereafter.
I believe the code should be corrected to read:
if (ExeFlag & SMPEXEC_IPITIME)
{
while ( __lxchg((volatile int*)&CPULock, 1) ); // Wait if we are here
CPUMask &= (~(1 << pPSDPLMA->procnum)); // Clear bit, this CPU was execute
Status = Execute ( (void *)Context ); // call function
__lxchg((volatile int*)&CPULock, 0) ; // give way to next CPU -> ADD THIS !
return Status;
}
Change History
Note: See
TracTickets for help on using
tickets.
