svn commit: r283109 - head/sys/x86/x86
Andriy Gapon
avg at FreeBSD.org
Fri May 22 10:44:32 UTC 2015
On 19/05/2015 17:21, Konstantin Belousov wrote:
> Author: kib
> Date: Tue May 19 14:21:00 2015
> New Revision: 283109
> URL: https://svnweb.freebsd.org/changeset/base/283109
>
> Log:
> When sleeping in Sx state using MWAIT instruction, accept fast wakeup
> requests from writes to the monitored line.
>
> Submitted by: avg
Thanks!
> Modified:
> head/sys/x86/x86/cpu_machdep.c
>
> Modified: head/sys/x86/x86/cpu_machdep.c
> ==============================================================================
> --- head/sys/x86/x86/cpu_machdep.c Tue May 19 14:05:15 2015 (r283108)
> +++ head/sys/x86/x86/cpu_machdep.c Tue May 19 14:21:00 2015 (r283109)
> @@ -101,6 +101,10 @@ __FBSDID("$FreeBSD$");
> #include <vm/vm_pager.h>
> #include <vm/vm_param.h>
>
> +#define STATE_RUNNING 0x0
> +#define STATE_MWAIT 0x1
> +#define STATE_SLEEPING 0x2
> +
> /*
> * Machine dependent boot() routine
> *
> @@ -134,13 +138,24 @@ acpi_cpu_idle_mwait(uint32_t mwait_hint)
> {
> int *state;
>
> - state = (int *)PCPU_PTR(monitorbuf);
> /*
> * XXXKIB. Software coordination mode should be supported,
> * but all Intel CPUs provide hardware coordination.
> */
> +
> + state = (int *)PCPU_PTR(monitorbuf);
> + KASSERT(*state == STATE_SLEEPING,
> + ("cpu_mwait_cx: wrong monitorbuf state"));
> + *state = STATE_MWAIT;
> cpu_monitor(state, 0, 0);
> - cpu_mwait(MWAIT_INTRBREAK, mwait_hint);
> + if (*state == STATE_MWAIT)
> + cpu_mwait(MWAIT_INTRBREAK, mwait_hint);
> +
> + /*
> + * We should exit on any event that interrupts mwait, because
> + * that event might be a wanted interrupt.
> + */
> + *state = STATE_RUNNING;
> }
>
> /* Get current clock frequency for the given cpu id. */
> @@ -231,10 +246,6 @@ static int idle_mwait = 1; /* Use MONIT
> SYSCTL_INT(_machdep, OID_AUTO, idle_mwait, CTLFLAG_RWTUN, &idle_mwait,
> 0, "Use MONITOR/MWAIT for short idle");
>
> -#define STATE_RUNNING 0x0
> -#define STATE_MWAIT 0x1
> -#define STATE_SLEEPING 0x2
> -
> #ifndef PC98
> static void
> cpu_idle_acpi(sbintime_t sbt)
>
--
Andriy Gapon
More information about the svn-src-head
mailing list