diff -u -r /usr/src/sys.old/dev/acpica/acpi_ec.c /usr/src/sys/dev/acpica/acpi_ec.c --- /usr/src/sys.old/dev/acpica/acpi_ec.c 2008-05-26 23:47:22.000000000 -0500 +++ /usr/src/sys/dev/acpica/acpi_ec.c 2008-05-26 23:58:22.000000000 -0500 @@ -194,6 +194,10 @@ TUNABLE_INT("debug.acpi.ec.timeout", &ec_timeout); SYSCTL_INT(_debug_acpi_ec, OID_AUTO, timeout, CTLFLAG_RW, &ec_timeout, EC_TIMEOUT, "Total time spent waiting for a response (poll+sleep)"); +static int ec_extradelay = 0; +TUNABLE_INT("debug.acpi.ec.extradelay", &ec_extradelay); +SYSCTL_INT(_debug_acpi_ec, OID_AUTO, extradelay, CTLFLAG_RW, &ec_extradelay, + 0, "Microseconds to delay at the start of EcWaitEvent"); static ACPI_STATUS EcLock(struct acpi_ec_softc *sc) @@ -812,6 +816,8 @@ ACPI_SERIAL_ASSERT(ec); Status = AE_NO_HARDWARE_RESPONSE; + if (ec_extradelay > 0 && ec_extradelay < 2000) + AcpiOsStall(ec_extradelay); int need_poll = cold || rebooting || ec_polled_mode || sc->ec_suspending; /* * The main CPU should be much faster than the EC. So the status should