diff options
author | Josef 'Jeff' Sipek <josef.sipek@nexenta.com> | 2014-04-25 17:48:44 -0400 |
---|---|---|
committer | Dan McDonald <danmcd@omniti.com> | 2014-04-29 11:19:00 -0400 |
commit | 6eedf6a58bb97d935b764a55719f82a486168fbb (patch) | |
tree | eb949cb50ac95eb345d06f6942b6cf877b26265d | |
parent | 9b1d70f8223c4278acf4ca60eaf5dd285f72eeee (diff) | |
download | illumos-joyent-6eedf6a58bb97d935b764a55719f82a486168fbb.tar.gz |
4806 define x2apic feature flag
4807 pcplusmp & apix should use x2apic feature flag
Reviewed by: Robert Mustacchi <rm@joyent.com>
Approved by: Dan McDonald <danmcd@omniti.com>
-rw-r--r-- | usr/src/uts/i86pc/io/pcplusmp/apic_regops.c | 11 | ||||
-rw-r--r-- | usr/src/uts/i86pc/os/cpuid.c | 7 | ||||
-rw-r--r-- | usr/src/uts/intel/sys/x86_archext.h | 9 |
3 files changed, 16 insertions, 11 deletions
diff --git a/usr/src/uts/i86pc/io/pcplusmp/apic_regops.c b/usr/src/uts/i86pc/io/pcplusmp/apic_regops.c index 03e669b44a..eba22ca090 100644 --- a/usr/src/uts/i86pc/io/pcplusmp/apic_regops.c +++ b/usr/src/uts/i86pc/io/pcplusmp/apic_regops.c @@ -22,6 +22,9 @@ * Copyright 2009 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ +/* + * Copyright 2014 Josef 'Jeff' Sipek <jeffpc@josefsipek.net> + */ #include <sys/cpuvar.h> #include <sys/psm.h> @@ -94,7 +97,6 @@ apic_reg_ops_t *apic_reg_ops = &local_apic_regs_ops; void apic_send_EOI(); void apic_send_directed_EOI(uint32_t irq); -#define X2APIC_CPUID_BIT 21 #define X2APIC_ENABLE_BIT 10 /* @@ -233,15 +235,10 @@ apic_send_directed_EOI(uint32_t irq) int apic_detect_x2apic(void) { - struct cpuid_regs cp; - if (x2apic_enable == 0) return (0); - cp.cp_eax = 1; - (void) __cpuid_insn(&cp); - - return ((cp.cp_ecx & (0x1 << X2APIC_CPUID_BIT)) ? 1 : 0); + return (is_x86_feature(x86_featureset, X86FSET_X2APIC)); } void diff --git a/usr/src/uts/i86pc/os/cpuid.c b/usr/src/uts/i86pc/os/cpuid.c index fce8fd9c23..a9b4428347 100644 --- a/usr/src/uts/i86pc/os/cpuid.c +++ b/usr/src/uts/i86pc/os/cpuid.c @@ -22,6 +22,7 @@ * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2011 by Delphix. All rights reserved. * Copyright 2013 Nexenta Systems, Inc. All rights reserved. + * Copyright 2014 Josef "Jeff" Sipek <jeffpc@josefsipek.net> */ /* * Copyright (c) 2010, Intel Corporation. @@ -163,7 +164,8 @@ static char *x86_feature_names[NUM_X86_FEATURES] = { "svm", "topoext", "f16c", - "rdrand" + "rdrand", + "x2apic", }; boolean_t @@ -1311,6 +1313,9 @@ cpuid_pass1(cpu_t *cpu, uchar_t *featureset) } } } + if (cp->cp_ecx & CPUID_INTC_ECX_X2APIC) { + add_x86_feature(featureset, X86FSET_X2APIC); + } if (cp->cp_edx & CPUID_INTC_EDX_DE) { add_x86_feature(featureset, X86FSET_DE); } diff --git a/usr/src/uts/intel/sys/x86_archext.h b/usr/src/uts/intel/sys/x86_archext.h index 29265387a3..fa3485d69b 100644 --- a/usr/src/uts/intel/sys/x86_archext.h +++ b/usr/src/uts/intel/sys/x86_archext.h @@ -31,6 +31,7 @@ * Copyright (c) 2012, Joyent, Inc. All rights reserved. * Copyright 2012 Jens Elkner <jel+illumos@cs.uni-magdeburg.de> * Copyright 2012 Hans Rosenfeld <rosenfeld@grumpf.hope-2000.org> + * Copyright 2014 Josef 'Jeff' Sipek <jeffpc@josefsipek.net> */ #ifndef _SYS_X86_ARCHEXT_H @@ -116,6 +117,7 @@ extern "C" { #define CPUID_INTC_ECX_DCA 0x00040000 /* direct cache access */ #define CPUID_INTC_ECX_SSE4_1 0x00080000 /* SSE4.1 insns */ #define CPUID_INTC_ECX_SSE4_2 0x00100000 /* SSE4.2 insns */ +#define CPUID_INTC_ECX_X2APIC 0x00200000 /* x2APIC */ #define CPUID_INTC_ECX_MOVBE 0x00400000 /* MOVBE insn */ #define CPUID_INTC_ECX_POPCNT 0x00800000 /* POPCNT insn */ #define CPUID_INTC_ECX_AES 0x02000000 /* AES insns */ @@ -130,7 +132,7 @@ extern "C" { "\20" \ "\37rdrand\36f16c\35avx\34osxsav\33xsave" \ "\32aes" \ - "\30popcnt\27movbe\25sse4.2\24sse4.1\23dca" \ + "\30popcnt\27movbe\26x2apic\25sse4.2\24sse4.1\23dca" \ "\20\17etprd\16cx16\13cid\12ssse3\11tm2" \ "\10est\7smx\6vmx\5dscpl\4mon\2pclmulqdq\1sse3" @@ -346,7 +348,7 @@ extern "C" { #define X86FSET_PGE 4 #define X86FSET_DE 5 #define X86FSET_CMOV 6 -#define X86FSET_MMX 7 +#define X86FSET_MMX 7 #define X86FSET_MCA 8 #define X86FSET_PAE 9 #define X86FSET_CX8 10 @@ -379,6 +381,7 @@ extern "C" { #define X86FSET_TOPOEXT 37 #define X86FSET_F16C 38 #define X86FSET_RDRAND 39 +#define X86FSET_X2APIC 40 /* * flags to patch tsc_read routine. @@ -639,7 +642,7 @@ extern "C" { #if defined(_KERNEL) || defined(_KMEMUSER) -#define NUM_X86_FEATURES 40 +#define NUM_X86_FEATURES 41 extern uchar_t x86_featureset[]; extern void free_x86_featureset(void *featureset); |