Mercurial > illumos > illumos-gate
changeset 9935:41052599accc
6849914 corrupted lock causes panic in nxge
author | Michael Speer <Michael.Speer@Sun.COM> |
---|---|
date | Mon, 22 Jun 2009 13:20:44 -0700 |
parents | a4bd03644408 |
children | c1b18c725b3b |
files | usr/src/uts/common/io/nxge/nxge_main.c |
diffstat | 1 files changed, 17 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/usr/src/uts/common/io/nxge/nxge_main.c Mon Jun 22 16:00:45 2009 -0400 +++ b/usr/src/uts/common/io/nxge/nxge_main.c Mon Jun 22 13:20:44 2009 -0700 @@ -385,9 +385,9 @@ * mutually exclusive access to the list. */ void *nxge_list = NULL; - void *nxge_hw_list = NULL; nxge_os_mutex_t nxge_common_lock; +nxge_os_mutex_t nxgedebuglock; extern uint64_t npi_debug_level; @@ -1786,10 +1786,6 @@ NXGE_NPI_PIO_WRITE64(nxgep->npi_handle, reg, buf[1]); } - -nxge_os_mutex_t nxgedebuglock; -int nxge_debug_init = 0; - /*ARGSUSED*/ /*VARARGS*/ void @@ -1815,11 +1811,6 @@ (level == NXGE_NOTE) || (level == NXGE_ERR_CTL)) { /* do the msg processing */ - if (nxge_debug_init == 0) { - MUTEX_INIT(&nxgedebuglock, NULL, MUTEX_DRIVER, NULL); - nxge_debug_init = 1; - } - MUTEX_ENTER(&nxgedebuglock); if ((level & NXGE_NOTE)) { @@ -5390,14 +5381,19 @@ { int status; + MUTEX_INIT(&nxgedebuglock, NULL, MUTEX_DRIVER, NULL); + NXGE_DEBUG_MSG((NULL, MOD_CTL, "==> _init")); + mac_init_ops(&nxge_dev_ops, "nxge"); + status = ddi_soft_state_init(&nxge_list, sizeof (nxge_t), 0); if (status != 0) { NXGE_ERROR_MSG((NULL, NXGE_ERR_CTL, "failed to init device soft state")); goto _init_exit; } + status = mod_install(&modlinkage); if (status != 0) { ddi_soft_state_fini(&nxge_list); @@ -5407,9 +5403,12 @@ MUTEX_INIT(&nxge_common_lock, NULL, MUTEX_DRIVER, NULL); + NXGE_DEBUG_MSG((NULL, MOD_CTL, "<== _init status = 0x%X", status)); + return (status); + _init_exit: - NXGE_DEBUG_MSG((NULL, MOD_CTL, "_init status = 0x%X", status)); - + NXGE_DEBUG_MSG((NULL, MOD_CTL, "<== _init status = 0x%X", status)); + MUTEX_DESTROY(&nxgedebuglock); return (status); } @@ -5419,7 +5418,6 @@ int status; NXGE_DEBUG_MSG((NULL, MOD_CTL, "==> _fini")); - NXGE_DEBUG_MSG((NULL, MOD_CTL, "==> _fini: mod_remove")); if (nxge_mblks_pending) @@ -5437,10 +5435,14 @@ ddi_soft_state_fini(&nxge_list); + NXGE_DEBUG_MSG((NULL, MOD_CTL, "<== _fini status = 0x%08x", status)); + MUTEX_DESTROY(&nxge_common_lock); + MUTEX_DESTROY(&nxgedebuglock); + return (status); + _fini_exit: - NXGE_DEBUG_MSG((NULL, MOD_CTL, "_fini status = 0x%08x", status)); - + NXGE_DEBUG_MSG((NULL, MOD_CTL, "<== _fini status = 0x%08x", status)); return (status); }