svn commit: r209213 - head/sys/dev/acpica
John Baldwin
jhb at FreeBSD.org
Tue Jun 15 19:14:40 UTC 2010
Author: jhb
Date: Tue Jun 15 19:14:39 2010
New Revision: 209213
URL: http://svn.freebsd.org/changeset/base/209213
Log:
When updating individual CPU's lowest Cx state to use, never set it to a
state lower than the lowest one supported by the current CPU. This closes
some races with changes to the hw.acpi.cpu_cx_lowest sysctl while Cx
states for individual CPUs were changing (e.g. unplugging the AC adapter
of a laptop) that could result in panics.
Submitted by: Giovanni Trematerra
Tested by: David Demelier demelier dot david of gmail
MFC after: 3 days
Modified:
head/sys/dev/acpica/acpi_cpu.c
Modified: head/sys/dev/acpica/acpi_cpu.c
==============================================================================
--- head/sys/dev/acpica/acpi_cpu.c Tue Jun 15 18:51:41 2010 (r209212)
+++ head/sys/dev/acpica/acpi_cpu.c Tue Jun 15 19:14:39 2010 (r209213)
@@ -1007,6 +1007,8 @@ acpi_cpu_notify(ACPI_HANDLE h, UINT32 no
if (isc->cpu_cx_count > cpu_cx_count)
cpu_cx_count = isc->cpu_cx_count;
}
+ if (sc->cpu_cx_lowest < cpu_cx_lowest)
+ acpi_cpu_set_cx_lowest(sc, min(cpu_cx_lowest, sc->cpu_cx_count - 1));
ACPI_SERIAL_END(cpu);
}
@@ -1202,7 +1204,7 @@ acpi_cpu_global_cx_lowest_sysctl(SYSCTL_
ACPI_SERIAL_BEGIN(cpu);
for (i = 0; i < cpu_ndevices; i++) {
sc = device_get_softc(cpu_devices[i]);
- acpi_cpu_set_cx_lowest(sc, val);
+ acpi_cpu_set_cx_lowest(sc, min(val, sc->cpu_cx_count - 1));
}
ACPI_SERIAL_END(cpu);
More information about the svn-src-all
mailing list