summaryrefslogtreecommitdiff
path: root/usr/src/uts/i86pc/os/microcode.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/uts/i86pc/os/microcode.c')
-rw-r--r--usr/src/uts/i86pc/os/microcode.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/usr/src/uts/i86pc/os/microcode.c b/usr/src/uts/i86pc/os/microcode.c
index 6f32a86c71..90d9585640 100644
--- a/usr/src/uts/i86pc/os/microcode.c
+++ b/usr/src/uts/i86pc/os/microcode.c
@@ -141,6 +141,7 @@ void
ucode_alloc_space(cpu_t *cp)
{
ASSERT(cp->cpu_id != 0);
+ ASSERT(cp->cpu_m.mcpu_ucode_info == NULL);
cp->cpu_m.mcpu_ucode_info =
kmem_zalloc(sizeof (*cp->cpu_m.mcpu_ucode_info), KM_SLEEP);
}
@@ -148,9 +149,11 @@ ucode_alloc_space(cpu_t *cp)
void
ucode_free_space(cpu_t *cp)
{
- ASSERT(cp->cpu_id != 0);
+ ASSERT(cp->cpu_m.mcpu_ucode_info != NULL);
+ ASSERT(cp->cpu_m.mcpu_ucode_info != &cpu_ucode_info0);
kmem_free(cp->cpu_m.mcpu_ucode_info,
sizeof (*cp->cpu_m.mcpu_ucode_info));
+ cp->cpu_m.mcpu_ucode_info = NULL;
}
/*
@@ -1126,7 +1129,10 @@ ucode_check(cpu_t *cp)
uint32_t new_rev = 0;
ASSERT(cp);
- if (cp->cpu_id == 0)
+ /*
+ * Space statically allocated for BSP, ensure pointer is set
+ */
+ if (cp->cpu_id == 0 && cp->cpu_m.mcpu_ucode_info == NULL)
cp->cpu_m.mcpu_ucode_info = &cpu_ucode_info0;
uinfop = cp->cpu_m.mcpu_ucode_info;