Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 28 Feb 2015 14:08:43 -0800
From:      Adrian Chadd <adrian@freebsd.org>
To:        Konstantin Belousov <kib@freebsd.org>
Cc:        "svn-src-head@freebsd.org" <svn-src-head@freebsd.org>, "svn-src-all@freebsd.org" <svn-src-all@freebsd.org>, "src-committers@freebsd.org" <src-committers@freebsd.org>
Subject:   Re: svn commit: r279406 - in head/sys: amd64/amd64 i386/i386
Message-ID:  <CAJ-Vmokh7J1k3VXH-Zn_01_p92JLAgJZE_pO5ey7b1ivmUcY9A@mail.gmail.com>
In-Reply-To: <201502282037.t1SKbdTI072217@svn.freebsd.org>
References:  <201502282037.t1SKbdTI072217@svn.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Thanks for promptly finding/fixing this!

For the record, the CPU I have in this zenbook:

CPU: Intel(R) Core(TM) i5-2467M CPU @ 1.60GHz (1596.41-MHz K8-class CPU)



On 28 February 2015 at 12:37, Konstantin Belousov <kib@freebsd.org> wrote:
> Author: kib
> Date: Sat Feb 28 20:37:38 2015
> New Revision: 279406
> URL: https://svnweb.freebsd.org/changeset/base/279406
>
> Log:
>   Supposed fix for some SandyBridge mobile CPUs hang on AP startup when
>   x2APIC mode is detected and enabled.  Current theory is that switching
>   the APIC mode while an IPI is in flight might be the issue.
>
>   Postpone switching to x2APIC mode until we are guaranteed that all
>   starting IPIs are already send and aknowledged.  Use aps_ready signal
>   as an indication that the BSP is done with us.
>
>   Tested by:    adrian
>   Sponsored by: The FreeBSD Foundation
>   MFC after:    2 months
>
> Modified:
>   head/sys/amd64/amd64/mp_machdep.c
>   head/sys/i386/i386/mp_machdep.c
>
> Modified: head/sys/amd64/amd64/mp_machdep.c
> ==============================================================================
> --- head/sys/amd64/amd64/mp_machdep.c   Sat Feb 28 20:30:29 2015        (r279405)
> +++ head/sys/amd64/amd64/mp_machdep.c   Sat Feb 28 20:37:38 2015        (r279406)
> @@ -705,12 +705,6 @@ init_secondary(void)
>         wrmsr(MSR_STAR, msr);
>         wrmsr(MSR_SF_MASK, PSL_NT|PSL_T|PSL_I|PSL_C|PSL_D);
>
> -       /*
> -        * On real hardware, switch to x2apic mode if possible.
> -        * Disable local APIC until BSP directed APs to run.
> -        */
> -       lapic_xapic_mode();
> -
>         /* signal our startup to the BSP. */
>         mp_naps++;
>
> @@ -718,6 +712,14 @@ init_secondary(void)
>         while (!aps_ready)
>                 ia32_pause();
>
> +       /*
> +        * On real hardware, switch to x2apic mode if possible.  Do it
> +        * after aps_ready was signalled, to avoid manipulating the
> +        * mode while BSP might still want to send some IPI to us
> +        * (second startup IPI is ignored on modern hardware etc).
> +        */
> +       lapic_xapic_mode();
> +
>         /* Initialize the PAT MSR. */
>         pmap_init_pat();
>
>
> Modified: head/sys/i386/i386/mp_machdep.c
> ==============================================================================
> --- head/sys/i386/i386/mp_machdep.c     Sat Feb 28 20:30:29 2015        (r279405)
> +++ head/sys/i386/i386/mp_machdep.c     Sat Feb 28 20:37:38 2015        (r279406)
> @@ -719,12 +719,6 @@ init_secondary(void)
>         load_cr0(cr0);
>         CHECK_WRITE(0x38, 5);
>
> -       /*
> -        * On real hardware, switch to x2apic mode if possible.
> -        * Disable local APIC until BSP directed APs to run.
> -        */
> -       lapic_xapic_mode();
> -
>         /* signal our startup to the BSP. */
>         mp_naps++;
>         CHECK_WRITE(0x39, 6);
> @@ -742,6 +736,14 @@ init_secondary(void)
>         lidt(&r_idt);
>  #endif
>
> +       /*
> +        * On real hardware, switch to x2apic mode if possible.  Do it
> +        * after aps_ready was signalled, to avoid manipulating the
> +        * mode while BSP might still want to send some IPI to us
> +        * (second startup IPI is ignored on modern hardware etc).
> +        */
> +       lapic_xapic_mode();
> +
>         /* Initialize the PAT MSR if present. */
>         pmap_init_pat();
>
>



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAJ-Vmokh7J1k3VXH-Zn_01_p92JLAgJZE_pO5ey7b1ivmUcY9A>