diff options
Diffstat (limited to 'usr/src/uts/i86pc/os/mp_startup.c')
-rw-r--r-- | usr/src/uts/i86pc/os/mp_startup.c | 15 |
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); /* |