On Thu, 28 Apr 2016 08:29:57 + (UTC)
Andriy Gapon wrote:
> Author: avg
> Date: Thu Apr 28 08:29:57 2016
> New Revision: 298736
> URL: https://svnweb.freebsd.org/changeset/base/298736
>
> Log:
> ensure that initial local apic id is sane on AMD 10h systems
>
> Summary:
> The Initial Local APIC ID is returned by CPUID function 1 (in EBX).
> On AMD Family 10h systems the way that ID is built is controlled by
> an MSR bit (InitApicIdCpuIdLo). BKDG instructs BIOS to set it in a
> certain way, but a BIOS can be buggy. In that case the ID can
> confuse tools that use it, e.g. hwloc.
> For example, on a system that I own real Local APIC IDs are
> configured as 0, 1, 2, 3, but IDs reported via CPUID.1 are 0, 0x40,
> 0x80, 0xc0. See: https://github.com/open-mpi/hwloc/issues/183
>
> Reviewed by:kib
> MFC after: 2 weeks
> Differential Revision: https://reviews.freebsd.org/D6060
>
> Modified:
> head/sys/amd64/amd64/initcpu.c
>
> Modified: head/sys/amd64/amd64/initcpu.c
> ==
> --- head/sys/amd64/amd64/initcpu.cThu Apr 28 06:20:43
> 2016 (r298735) +++ head/sys/amd64/amd64/initcpu.cThu
> Apr 28 08:29:57 2016 (r298736) @@ -80,6 +80,19 @@
> init_amd(void) wrmsr(0xc0011029, rdmsr(0xc0011029) | 1);
> break;
> }
> +
> + /*
> + * BIOS may fail to set InitApicIdCpuIdLo to 1 as it should
> per BKDG.
> + * So, do it here or otherwise some tools could be confused
> by
> + * Initial Local APIC ID reported with CPUID Function 1 in
> EBX.
> + */
> + if (CPUID_TO_FAMILY(cpu_id) == 0x10) {
> + if ((cpu_feature2 & CPUID2_HV) == 0) {
> + msr = rdmsr(MSR_NB_CFG1);
> + msr |= (uint64_t)1 << 54;
> + wrmsr(MSR_NB_CFG1, msr);
> + }
> + }
> }
>
> /*
> ___
...
--- initcpu.o ---
/usr/src/sys/amd64/amd64/initcpu.c:91:4: error: use of undeclared
identifier 'msr' msr = rdmsr(MSR_NB_CFG1);
^
/usr/src/sys/amd64/amd64/initcpu.c:92:4: error: use of undeclared
identifier 'msr' msr |= (uint64_t)1 << 54;
^
/usr/src/sys/amd64/amd64/initcpu.c:93:23: error: use of undeclared
identifier 'msr' wrmsr(MSR_NB_CFG1, msr);
^
3 errors generated.
*** [initcpu.o] Error code 1
make[2]: stopped in /media/da0s1/obj/usr/src/sys/mk11
1 error
make[2]: stopped in /media/da0s1/obj/usr/src/sys/mk11
*** [buildkernel] Error code 2
make[1]: stopped in /usr/src
1 error
make[1]: stopped in /usr/src
*** [buildkernel] Error code 2
make: stopped in /usr/src
1 error
make: stopped in /usr/src
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"