Page MenuHomeFreeBSD

D60375.id188737.diff
No OneTemporary

D60375.id188737.diff

diff --git a/sys/dev/acpica/Osd/OsdSchedule.c b/sys/dev/acpica/Osd/OsdSchedule.c
--- a/sys/dev/acpica/Osd/OsdSchedule.c
+++ b/sys/dev/acpica/Osd/OsdSchedule.c
@@ -156,7 +156,7 @@
acpi_task_enqueue(int priority, ACPI_OSD_EXEC_CALLBACK Function, void *Context)
{
struct acpi_task_ctx *at;
- int i;
+ int hiwater, i;
for (at = NULL, i = 0; i < acpi_max_tasks; i++)
if (atomic_cmpset_int(&acpi_tasks[i].at_flag, ACPI_TASK_FREE,
@@ -166,8 +166,11 @@
break;
}
- if (i > acpi_tasks_hiwater)
- atomic_cmpset_int(&acpi_tasks_hiwater, acpi_tasks_hiwater, i);
+ while (hiwater = atomic_load_int(&acpi_tasks_hiwater), i > hiwater) {
+ if (atomic_cmpset_int(&acpi_tasks_hiwater, hiwater, i))
+ break;
+ cpu_spinwait();
+ }
if (at == NULL) {
printf("AcpiOsExecute: Failed to enqueue task, consider increasing "

File Metadata

Mime Type
text/plain
Expires
Thu, Oct 8, 10:53 AM (9 h, 8 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
40306607
Default Alt Text
D60375.id188737.diff (852 B)

Event Timeline