Print this page
4403 mpt_sas panic when pulling a drive

*** 2019,2028 **** --- 2019,2029 ---- static int mptsas_alloc_handshake_msg(mptsas_t *mpt, size_t alloc_size) { ddi_dma_attr_t task_dma_attrs; + mpt->m_hshk_dma_size = 0; task_dma_attrs = mpt->m_msg_dma_attr; task_dma_attrs.dma_attr_sgllen = 1; task_dma_attrs.dma_attr_granular = (uint32_t)(alloc_size); /* allocate Task Management ddi_dma resources */
*** 2037,2046 **** --- 2038,2049 ---- } static void mptsas_free_handshake_msg(mptsas_t *mpt) { + if (mpt->m_hshk_dma_size == 0) + return; mptsas_dma_addr_destroy(&mpt->m_hshk_dma_hdl, &mpt->m_hshk_acc_hdl); mpt->m_hshk_dma_size = 0; } static int
*** 15442,15469 **** if (cookiep == NULL) cookiep = &new_cookie; if (ddi_dma_alloc_handle(mpt->m_dip, &dma_attr, DDI_DMA_SLEEP, NULL, dma_hdp) != DDI_SUCCESS) { - dma_hdp = NULL; return (FALSE); } if (ddi_dma_mem_alloc(*dma_hdp, alloc_size, &mpt->m_dev_acc_attr, DDI_DMA_CONSISTENT, DDI_DMA_SLEEP, NULL, dma_memp, &alloc_len, acc_hdp) != DDI_SUCCESS) { ddi_dma_free_handle(dma_hdp); - dma_hdp = NULL; return (FALSE); } if (ddi_dma_addr_bind_handle(*dma_hdp, NULL, *dma_memp, alloc_len, (DDI_DMA_RDWR | DDI_DMA_CONSISTENT), DDI_DMA_SLEEP, NULL, cookiep, &ncookie) != DDI_DMA_MAPPED) { (void) ddi_dma_mem_free(acc_hdp); ddi_dma_free_handle(dma_hdp); - dma_hdp = NULL; return (FALSE); } return (TRUE); } --- 15445,15469 ----
*** 15475,15481 **** return; (void) ddi_dma_unbind_handle(*dma_hdp); (void) ddi_dma_mem_free(acc_hdp); ddi_dma_free_handle(dma_hdp); - dma_hdp = NULL; } --- 15475,15480 ----