summaryrefslogtreecommitdiff
path: root/usr/src/uts/i86pc/os/mp_startup.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/uts/i86pc/os/mp_startup.c')
-rw-r--r--usr/src/uts/i86pc/os/mp_startup.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/usr/src/uts/i86pc/os/mp_startup.c b/usr/src/uts/i86pc/os/mp_startup.c
index 425afa7801..99c904404e 100644
--- a/usr/src/uts/i86pc/os/mp_startup.c
+++ b/usr/src/uts/i86pc/os/mp_startup.c
@@ -373,6 +373,11 @@ mp_startup_init(int cpun)
*/
cpuid_alloc_space(cp);
+ /*
+ * alloc space for ucode_info
+ */
+ ucode_alloc_space(cp);
+
hat_cpu_online(cp);
#ifdef TRAPTRACE
@@ -462,6 +467,8 @@ mp_startup_fini(struct cpu *cp, int error)
cpuid_free_space(cp);
+ ucode_free_space(cp);
+
if (cp->cpu_m.mcpu_idt != CPU->cpu_m.mcpu_idt)
kmem_free(cp->cpu_m.mcpu_idt, sizeof (idt0));
cp->cpu_m.mcpu_idt = NULL;
@@ -1187,6 +1194,9 @@ start_other_cpus(int cprboot)
CPUSET_DEL(mp_cpus, who);
}
+ /* Free the space allocated to hold the microcode file */
+ ucode_free();
+
affinity_clear();
if (skipped) {
@@ -1345,6 +1355,11 @@ mp_startup(void)
(*dtrace_cpu_init)(cp->cpu_id);
}
+ /*
+ * Fill out cpu_ucode_info. Update microcode if necessary.
+ */
+ ucode_check(cp);
+
mutex_exit(&cpu_lock);
/*