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"

Reply via email to