summaryrefslogtreecommitdiffstats
path: root/sys/i386/i386
diff options
context:
space:
mode:
authorjkim <jkim@FreeBSD.org>2013-08-15 21:09:05 +0000
committerjkim <jkim@FreeBSD.org>2013-08-15 21:09:05 +0000
commitde579b60c166fa1a5f73083d4910751927cbb45a (patch)
tree1609aea018515d5bb03b9e1dacf85b7778ce5e80 /sys/i386/i386
parent8544609e649a9e074023f253de79d42b4d7d11e6 (diff)
downloadFreeBSD-src-de579b60c166fa1a5f73083d4910751927cbb45a.zip
FreeBSD-src-de579b60c166fa1a5f73083d4910751927cbb45a.tar.gz
Simplify check for CMPXCHG8B instruction. Note CMPXCHG8B instruction is
always available for Rise mP6 processors although it is not set by CPUID.
Diffstat (limited to 'sys/i386/i386')
-rw-r--r--sys/i386/i386/initcpu.c16
-rw-r--r--sys/i386/i386/machdep.c3
2 files changed, 17 insertions, 2 deletions
diff --git a/sys/i386/i386/initcpu.c b/sys/i386/i386/initcpu.c
index 5f33897..71c57b2 100644
--- a/sys/i386/i386/initcpu.c
+++ b/sys/i386/i386/initcpu.c
@@ -424,6 +424,19 @@ init_6x86(void)
#ifdef I586_CPU
/*
+ * Rise mP6
+ */
+static void
+init_rise(void)
+{
+
+ /*
+ * The CMPXCHG8B instruction is always available but hidden.
+ */
+ cpu_feature |= CPUID_CX8;
+}
+
+/*
* IDT WinChip C6/2/2A/2B/3
*
* http://www.centtech.com/winchip_bios_writers_guide_v4_0.pdf
@@ -690,6 +703,9 @@ initializecpu(void)
case CPU_VENDOR_TRANSMETA:
init_transmeta();
break;
+ case CPU_VENDOR_RISE:
+ init_rise();
+ break;
}
break;
#endif
diff --git a/sys/i386/i386/machdep.c b/sys/i386/i386/machdep.c
index be391b6..f62854b 100644
--- a/sys/i386/i386/machdep.c
+++ b/sys/i386/i386/machdep.c
@@ -1557,8 +1557,7 @@ static void
cpu_probe_cmpxchg8b(void)
{
- if ((cpu_feature & CPUID_CX8) != 0 ||
- cpu_vendor_id == CPU_VENDOR_RISE) {
+ if ((cpu_feature & CPUID_CX8) != 0) {
atomic_load_acq_64 = atomic_load_acq_64_i586;
atomic_store_rel_64 = atomic_store_rel_64_i586;
}
OpenPOWER on IntegriCloud