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 _______________________________________________ svn-src-head@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"