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 {