diff --git a/sys/amd64/amd64/mp_machdep.c b/sys/amd64/amd64/mp_machdep.c index 903163e6edfd..8cce30418ce5 100644 --- a/sys/amd64/amd64/mp_machdep.c +++ b/sys/amd64/amd64/mp_machdep.c @@ -1416,7 +1416,6 @@ cpususpend_handler(void) if (savectx(susppcbs[cpu])) { ctx_fpusave(susppcbs[cpu]->pcb_fpususpend); wbinvd(); - CPU_SET_ATOMIC(cpu, &stopped_cpus); CPU_SET_ATOMIC(cpu, &suspended_cpus); } else { pmap_init_pat(); @@ -1426,6 +1425,8 @@ cpususpend_handler(void) initializecpu(); PCPU_SET(switchtime, 0); PCPU_SET(switchticks, ticks); + + /* Indicate that we are resumed */ CPU_CLR_ATOMIC(cpu, &suspended_cpus); } @@ -1434,7 +1435,6 @@ cpususpend_handler(void) ia32_pause(); CPU_CLR_ATOMIC(cpu, &started_cpus); - CPU_CLR_ATOMIC(cpu, &stopped_cpus); /* Resume MCA and local APIC */ mca_resume(); diff --git a/sys/conf/files.amd64 b/sys/conf/files.amd64 index 1615ce68b21c..9aa61e2adb61 100644 --- a/sys/conf/files.amd64 +++ b/sys/conf/files.amd64 @@ -93,7 +93,6 @@ acpi_wakedata.h optional acpi \ no-obj no-implicit-rule before-depend \ clean "acpi_wakedata.h" # -x86/acpica/acpi_wakeup.c optional acpi amd64/amd64/amd64_mem.c optional mem #amd64/amd64/apic_vector.S standard amd64/amd64/atomic.c standard @@ -453,6 +452,7 @@ contrib/x86emu/x86emu.c optional x86bios | atkbd | dpms | vesa # x86/acpica/OsdEnvironment.c optional acpi x86/acpica/acpi_apm.c optional acpi +x86/acpica/acpi_wakeup.c optional acpi x86/acpica/madt.c optional acpi x86/acpica/srat.c optional acpi x86/bios/smbios.c optional smbios diff --git a/sys/conf/files.i386 b/sys/conf/files.i386 index c9fcfb1291fc..f3de1637242e 100644 --- a/sys/conf/files.i386 +++ b/sys/conf/files.i386 @@ -381,7 +381,6 @@ acpi_wakedata.h optional acpi \ no-obj no-implicit-rule before-depend \ clean "acpi_wakedata.h" # -x86/acpica/acpi_wakeup.c optional acpi i386/bios/apm.c optional apm i386/bios/mca_machdep.c optional mca i386/bios/smapi.c optional smapi @@ -505,6 +504,7 @@ compat/x86bios/x86bios.c optional x86bios | atkbd | dpms | vesa # x86/acpica/OsdEnvironment.c optional acpi x86/acpica/acpi_apm.c optional acpi +x86/acpica/acpi_wakeup.c optional acpi x86/acpica/madt.c optional acpi apic x86/acpica/srat.c optional acpi x86/bios/smbios.c optional smbios diff --git a/sys/i386/i386/mp_machdep.c b/sys/i386/i386/mp_machdep.c index e1f9a70720d6..77cbfc5cacfb 100644 --- a/sys/i386/i386/mp_machdep.c +++ b/sys/i386/i386/mp_machdep.c @@ -1514,12 +1514,13 @@ cpususpend_handler(void) if (savectx(susppcbs[cpu])) { wbinvd(); - CPU_SET_ATOMIC(cpu, &stopped_cpus); CPU_SET_ATOMIC(cpu, &suspended_cpus); } else { pmap_init_pat(); PCPU_SET(switchtime, 0); PCPU_SET(switchticks, ticks); + + /* Indicate that we are resumed */ CPU_CLR_ATOMIC(cpu, &suspended_cpus); } @@ -1528,7 +1529,6 @@ cpususpend_handler(void) ia32_pause(); CPU_CLR_ATOMIC(cpu, &started_cpus); - CPU_CLR_ATOMIC(cpu, &stopped_cpus); /* Resume MCA and local APIC */ mca_resume();