Print this page
NEX-17944 HBA drivers don't need the redundant devfs_clean step
Reviewed by: Dan Fields <dan.fields@nexenta.com>
Reviewed by: Rick McNeal <rick.mcneal@nexenta.com>
re #13556, rb4474 LSI Skinny MegaRAID support for mr_sas(7D)
Update mr_sas from illumos-gate (default test)
re #11944 rb3746 need workaround for QEMU bug that induces bad e1000g checksums
re #11242 rb3560 LSI 2208 and 3108 support for mr_sas

*** 42,52 **** */ /* * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2011 Bayard G. Bell. All rights reserved. ! * Copyright 2013 Nexenta Systems, Inc. All rights reserved. * Copyright 2015, 2017 Citrus IT Limited. All rights reserved. * Copyright 2015 Garrett D'Amore <garrett@damore.org> */ #include <sys/types.h> --- 42,52 ---- */ /* * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2011 Bayard G. Bell. All rights reserved. ! * Copyright 2018 Nexenta Systems, Inc. * Copyright 2015, 2017 Citrus IT Limited. All rights reserved. * Copyright 2015 Garrett D'Amore <garrett@damore.org> */ #include <sys/types.h>
*** 68,78 **** #include <sys/sunddi.h> #include <sys/atomic.h> #include <sys/signal.h> #include <sys/byteorder.h> #include <sys/sdt.h> - #include <sys/fs/dv_node.h> /* devfs_clean */ #include "mr_sas.h" /* * FMA header files --- 68,77 ----
*** 7739,7751 **** static void mrsas_issue_evt_taskq(struct mrsas_eventinfo *mrevt) { struct mrsas_instance *instance = mrevt->instance; ! dev_info_t *dip, *pdip; int circ1 = 0; - char *devname; con_log(CL_ANN1, (CE_NOTE, "mrsas_issue_evt_taskq: called for" " tgt %d lun %d event %d", mrevt->tgt, mrevt->lun, mrevt->event)); --- 7738,7749 ---- static void mrsas_issue_evt_taskq(struct mrsas_eventinfo *mrevt) { struct mrsas_instance *instance = mrevt->instance; ! dev_info_t *dip; int circ1 = 0; con_log(CL_ANN1, (CE_NOTE, "mrsas_issue_evt_taskq: called for" " tgt %d lun %d event %d", mrevt->tgt, mrevt->lun, mrevt->event));
*** 7762,7772 **** ndi_devi_enter(instance->dip, &circ1); switch (mrevt->event) { case MRSAS_EVT_CONFIG_TGT: if (dip == NULL) { - if (mrevt->lun == 0) { (void) mrsas_config_ld(instance, mrevt->tgt, 0, NULL); } else if (instance->tbolt || instance->skinny) { (void) mrsas_tbolt_config_pd(instance, --- 7760,7769 ----
*** 7775,7806 **** } con_log(CL_ANN1, (CE_NOTE, "mr_sas: EVT_CONFIG_TGT called:" " for tgt %d lun %d event %d", mrevt->tgt, mrevt->lun, mrevt->event)); - } else { con_log(CL_ANN1, (CE_NOTE, "mr_sas: EVT_CONFIG_TGT dip != NULL:" " for tgt %d lun %d event %d", mrevt->tgt, mrevt->lun, mrevt->event)); } break; case MRSAS_EVT_UNCONFIG_TGT: if (dip) { ! if (i_ddi_devi_attached(dip)) { ! ! pdip = ddi_get_parent(dip); ! ! devname = kmem_zalloc(MAXNAMELEN + 1, KM_SLEEP); ! (void) ddi_deviname(dip, devname); ! ! (void) devfs_clean(pdip, devname + 1, ! DV_CLEAN_FORCE); ! kmem_free(devname, MAXNAMELEN + 1); ! } ! (void) ndi_devi_offline(dip, NDI_DEVI_REMOVE); con_log(CL_ANN1, (CE_NOTE, "mr_sas: EVT_UNCONFIG_TGT called:" " for tgt %d lun %d event %d", mrevt->tgt, mrevt->lun, mrevt->event)); } else { --- 7772,7792 ---- } con_log(CL_ANN1, (CE_NOTE, "mr_sas: EVT_CONFIG_TGT called:" " for tgt %d lun %d event %d", mrevt->tgt, mrevt->lun, mrevt->event)); } else { con_log(CL_ANN1, (CE_NOTE, "mr_sas: EVT_CONFIG_TGT dip != NULL:" " for tgt %d lun %d event %d", mrevt->tgt, mrevt->lun, mrevt->event)); } break; case MRSAS_EVT_UNCONFIG_TGT: if (dip) { ! (void) ndi_devi_offline(dip, ! NDI_DEVFS_CLEAN | NDI_DEVI_REMOVE); con_log(CL_ANN1, (CE_NOTE, "mr_sas: EVT_UNCONFIG_TGT called:" " for tgt %d lun %d event %d", mrevt->tgt, mrevt->lun, mrevt->event)); } else {