svn commit: r279406 - in head/sys: amd64/amd64 i386/i386

Adrian Chadd adrian at freebsd.org
Sat Mar 7 16:17:20 UTC 2015


Ugh, sorry to bring this up again, but I just updated to -HEAD and it
started hanging again at the same spot. :(



-adrian


On 28 February 2015 at 14:08, Adrian Chadd <adrian at freebsd.org> wrote:
> 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 at 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();
>>
>>


More information about the svn-src-head mailing list