Print this page
7813 mpt_sas does not like concurrent HBA resets

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/sys/scsi/adapters/mpt_sas/mptsas_var.h
          +++ new/usr/src/uts/common/sys/scsi/adapters/mpt_sas/mptsas_var.h
↓ open down ↓ 929 lines elided ↑ open up ↑
 930  930           * IR Capable flag
 931  931           */
 932  932          uint8_t                 m_ir_capable;
 933  933  
 934  934          /*
 935  935           * Is HBA processing a diag reset?
 936  936           */
 937  937          uint8_t                 m_in_reset;
 938  938  
 939  939          /*
      940 +         * Task management protection
      941 +         */
      942 +        kmutex_t                m_taskmgmt_mutex;
      943 +
      944 +        /*
 940  945           * per instance cmd data structures for task management cmds
 941  946           */
 942  947          m_event_struct_t        m_event_task_mgmt;      /* must be last */
 943  948                                                          /* ... scsi_pkt_size */
 944  949  } mptsas_t;
 945  950  #define MPTSAS_SIZE     (sizeof (struct mptsas) - \
 946  951                          sizeof (struct scsi_pkt) + scsi_pkt_size())
 947  952  /*
 948  953   * Only one of below two conditions is satisfied, we
 949  954   * think the target is associated to the iport and
↓ open down ↓ 375 lines elided ↑ open up ↑
1325 1330  int mptsas_access_config_page(mptsas_t *mpt, uint8_t action, uint8_t page_type,
1326 1331      uint8_t page_number, uint32_t page_address, int (*callback) (mptsas_t *,
1327 1332      caddr_t, ddi_acc_handle_t, uint16_t, uint32_t, va_list), ...);
1328 1333  
1329 1334  int mptsas_ioc_task_management(mptsas_t *mpt, int task_type,
1330 1335      uint16_t dev_handle, int lun, uint8_t *reply, uint32_t reply_size,
1331 1336      int mode);
1332 1337  int mptsas_send_event_ack(mptsas_t *mpt, uint32_t event, uint32_t eventcntx);
1333 1338  void mptsas_send_pending_event_ack(mptsas_t *mpt);
1334 1339  void mptsas_set_throttle(struct mptsas *mpt, mptsas_target_t *ptgt, int what);
1335      -int mptsas_restart_ioc(mptsas_t *mpt);
     1340 +int mptsas_reset_handler(mptsas_t *mpt);
1336 1341  void mptsas_update_driver_data(struct mptsas *mpt);
1337 1342  uint64_t mptsas_get_sata_guid(mptsas_t *mpt, mptsas_target_t *ptgt, int lun);
1338 1343  
1339 1344  /*
1340 1345   * init functions
1341 1346   */
1342 1347  int mptsas_ioc_get_facts(mptsas_t *mpt);
1343 1348  int mptsas_ioc_get_port_facts(mptsas_t *mpt, int port);
1344 1349  int mptsas_ioc_enable_port(mptsas_t *mpt);
1345 1350  int mptsas_ioc_enable_event_notification(mptsas_t *mpt);
↓ open down ↓ 126 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX