summaryrefslogtreecommitdiff
path: root/usr/src/uts/i86pc/os/mp_startup.c
diff options
context:
space:
mode:
authorJohn Sonnenschein <johns@joyent.com>2012-05-17 18:26:57 +0000
committerJohn Sonnenschein <johns@joyent.com>2012-05-17 18:26:57 +0000
commit04b244dd661c24b510ac22936decfc0972d202d3 (patch)
tree3ebfef98afc303fddf3415d6fba64e8682f495e8 /usr/src/uts/i86pc/os/mp_startup.c
parenteac250589e41f1b705e1b7427b02b3379aac9f9e (diff)
parenta69187741b83640a90dd8586195456dd50c016a8 (diff)
downloadillumos-joyent-20120517.tar.gz
Merge git.joyent.com:illumos-joyent20120517
Diffstat (limited to 'usr/src/uts/i86pc/os/mp_startup.c')
-rw-r--r--usr/src/uts/i86pc/os/mp_startup.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/usr/src/uts/i86pc/os/mp_startup.c b/usr/src/uts/i86pc/os/mp_startup.c
index 843c5ae73a..588d38bb7a 100644
--- a/usr/src/uts/i86pc/os/mp_startup.c
+++ b/usr/src/uts/i86pc/os/mp_startup.c
@@ -649,6 +649,10 @@ int opteron_workaround_6323525; /* if non-zero -> at least one cpu has it */
int opteron_erratum_298;
#endif
+#if defined(OPTERON_ERRATUM_721)
+int opteron_erratum_721;
+#endif
+
static void
workaround_warning(cpu_t *cp, uint_t erratum)
{
@@ -1177,6 +1181,16 @@ workaround_errata(struct cpu *cpu)
missing += do_erratum_298(cpu);
+ if (cpuid_opteron_erratum(cpu, 721) > 0) {
+#if defined(OPTERON_ERRATUM_721)
+ wrmsr(MSR_AMD_DE_CFG, rdmsr(MSR_AMD_DE_CFG) | AMD_DE_CFG_E721);
+ opteron_erratum_721++;
+#else
+ workaround_warning(cpu, 721);
+ missing++;
+#endif
+ }
+
#ifdef __xpv
return (0);
#else
@@ -1267,6 +1281,10 @@ workaround_errata_end()
" system\noperation may occur.\n");
}
#endif
+#if defined(OPTERON_ERRATUM_721)
+ if (opteron_erratum_721)
+ workaround_applied(721);
+#endif
}
/*