diff options
author | mb158278 <none@none> | 2008-03-21 14:04:03 -0700 |
---|---|---|
committer | mb158278 <none@none> | 2008-03-21 14:04:03 -0700 |
commit | b9a675d4c12d7767d04d2537f6e3b1083f56f291 (patch) | |
tree | b5e637214e64a990b8d87cf5ac774bfdd46269c2 /usr/src | |
parent | 8bd1bae7b80c19127d25a15440e161140bcaacea (diff) | |
download | illumos-gate-b9a675d4c12d7767d04d2537f6e3b1083f56f291.tar.gz |
6663570 DR panic during addboard
Diffstat (limited to 'usr/src')
-rw-r--r-- | usr/src/uts/sun4u/cpu/opl_olympus.c | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/usr/src/uts/sun4u/cpu/opl_olympus.c b/usr/src/uts/sun4u/cpu/opl_olympus.c index 3a76531e82..6c3614d4cb 100644 --- a/usr/src/uts/sun4u/cpu/opl_olympus.c +++ b/usr/src/uts/sun4u/cpu/opl_olympus.c @@ -118,6 +118,7 @@ static uint_t priv_hcl_8; * Olympus error log */ static opl_errlog_t *opl_err_log; +static int opl_cpu0_log_setup; /* * OPL ta 3 save area. @@ -558,6 +559,7 @@ cpu_setup(void) cpu0_log = va_to_pa(&opl_cpu0_err_log); opl_error_setup(cpu0_log); + opl_cpu0_log_setup = 1; /* * Enable MMU translating multiple page sizes for @@ -1735,14 +1737,19 @@ opl_cpu_reg_init() { uint64_t this_cpu_log; - /* - * We do not need to re-initialize cpu0 registers. - */ - if (cpu[getprocessorid()] == &cpu0) { + if (cpu[getprocessorid()] == &cpu0 && opl_cpu0_log_setup == 1) { /* * Support for "ta 3" */ opl_ta3(); + + /* + * If we are being called at boot time on cpu0 the error + * log is already set up in cpu_setup. Clear the + * opl_cpu0_log_setup flag so that a subsequent DR of cpu0 will + * do the proper initialization. + */ + opl_cpu0_log_setup = 0; return; } @@ -2219,7 +2226,12 @@ typedef struct win_regs { static void opl_ta3(void) { - opl_ta3_save = (char *)kmem_alloc(NCPU * sizeof (win_regs_t), KM_SLEEP); + /* + * opl_ta3 should only be called once at boot time. + */ + if (opl_ta3_save == NULL) + opl_ta3_save = (char *)kmem_alloc(NCPU * sizeof (win_regs_t), + KM_SLEEP); } /* |