1503
1502
case MPI2_RAID_VOL_TYPE_RAID1E:
1504
1503
qdepth = MPT2SAS_RAID_QUEUE_DEPTH;
1504
if (ioc->manu_pg10.OEMIdentifier &&
1505
(ioc->manu_pg10.GenericFlags0 &
1506
MFG10_GF0_R10_DISPLAY) &&
1507
!(raid_device->num_pds % 2))
1507
1512
case MPI2_RAID_VOL_TYPE_RAID1:
1508
1513
qdepth = MPT2SAS_RAID_QUEUE_DEPTH;
1787
1792
unsigned long timeleft;
1789
unsigned long flags;
1791
spin_lock_irqsave(&ioc->ioc_reset_in_progress_lock, flags);
1792
if (ioc->tm_cmds.status != MPT2_CMD_NOT_USED ||
1793
ioc->shost_recovery) {
1794
spin_unlock_irqrestore(&ioc->ioc_reset_in_progress_lock, flags);
1795
if (ioc->tm_cmds.status != MPT2_CMD_NOT_USED) {
1796
printk(MPT2SAS_INFO_FMT "%s: tm_cmd busy!!!\n",
1797
__func__, ioc->name);
1801
if (ioc->shost_recovery) {
1795
1802
printk(MPT2SAS_INFO_FMT "%s: host reset in progress!\n",
1796
1803
__func__, ioc->name);
1799
spin_unlock_irqrestore(&ioc->ioc_reset_in_progress_lock, flags);
1801
1807
ioc_state = mpt2sas_base_get_iocstate(ioc, 0);
1802
1808
if (ioc_state & MPI2_DOORBELL_USED) {
2337
2344
MPI2_EVENT_SAS_TOPO_RC_MASK;
2338
2345
if (reason_code == MPI2_EVENT_SAS_TOPO_RC_DELAY_NOT_RESPONDING)
2339
2346
_scsih_block_io_device(ioc, handle);
2347
if (reason_code == MPI2_EVENT_SAS_TOPO_RC_PHY_CHANGED) {
2348
link_rate = event_data->PHY[i].LinkRate >> 4;
2349
if (link_rate >= MPI2_SAS_NEG_LINK_RATE_1_5)
2350
_scsih_ublock_io_device(ioc, handle);
2408
* _scsih_queue_rescan - queue a topology rescan from user context
2409
* @ioc: per adapter object
2414
_scsih_queue_rescan(struct MPT2SAS_ADAPTER *ioc)
2416
struct fw_event_work *fw_event;
2418
if (ioc->wait_for_port_enable_to_complete)
2420
fw_event = kzalloc(sizeof(struct fw_event_work), GFP_ATOMIC);
2423
fw_event->event = MPT2SAS_RESCAN_AFTER_HOST_RESET;
2424
fw_event->ioc = ioc;
2425
_scsih_fw_event_add(ioc, fw_event);
2429
2420
* _scsih_flush_running_cmds - completing outstanding commands.
2430
2421
* @ioc: per adapter object
2459
* mpt2sas_scsih_reset_handler - reset callback handler (for scsih)
2460
* @ioc: per adapter object
2461
* @reset_phase: phase
2463
* The handler for doing any required cleanup or initialization.
2465
* The reset phase can be MPT2_IOC_PRE_RESET, MPT2_IOC_AFTER_RESET,
2466
* MPT2_IOC_DONE_RESET
2471
mpt2sas_scsih_reset_handler(struct MPT2SAS_ADAPTER *ioc, int reset_phase)
2473
switch (reset_phase) {
2474
case MPT2_IOC_PRE_RESET:
2475
dtmprintk(ioc, printk(MPT2SAS_DEBUG_FMT "%s: "
2476
"MPT2_IOC_PRE_RESET\n", ioc->name, __func__));
2477
_scsih_fw_event_off(ioc);
2479
case MPT2_IOC_AFTER_RESET:
2480
dtmprintk(ioc, printk(MPT2SAS_DEBUG_FMT "%s: "
2481
"MPT2_IOC_AFTER_RESET\n", ioc->name, __func__));
2482
if (ioc->tm_cmds.status & MPT2_CMD_PENDING) {
2483
ioc->tm_cmds.status |= MPT2_CMD_RESET;
2484
mpt2sas_base_free_smid(ioc, ioc->tm_cmds.smid);
2485
complete(&ioc->tm_cmds.done);
2487
_scsih_fw_event_on(ioc);
2488
_scsih_flush_running_cmds(ioc);
2490
case MPT2_IOC_DONE_RESET:
2491
dtmprintk(ioc, printk(MPT2SAS_DEBUG_FMT "%s: "
2492
"MPT2_IOC_DONE_RESET\n", ioc->name, __func__));
2493
_scsih_queue_rescan(ioc);
2499
2450
* _scsih_setup_eedp - setup MPI request for EEDP transfer
2500
2451
* @scmd: pointer to scsi command object
2501
2452
* @mpi_request: pointer to the SCSI_IO reqest message frame
2636
2586
/* see if we are busy with task managment stuff */
2637
spin_lock_irqsave(&ioc->ioc_reset_in_progress_lock, flags);
2638
if (sas_target_priv_data->tm_busy ||
2639
ioc->shost_recovery || ioc->ioc_link_reset_in_progress) {
2640
spin_unlock_irqrestore(&ioc->ioc_reset_in_progress_lock, flags);
2587
if (sas_target_priv_data->tm_busy)
2588
return SCSI_MLQUEUE_DEVICE_BUSY;
2589
else if (ioc->shost_recovery || ioc->ioc_link_reset_in_progress)
2641
2590
return SCSI_MLQUEUE_HOST_BUSY;
2643
spin_unlock_irqrestore(&ioc->ioc_reset_in_progress_lock, flags);
2645
2592
if (scmd->sc_data_direction == DMA_FROM_DEVICE)
2646
2593
mpi_control = MPI2_SCSIIO_CONTROL_READ;
5156
5112
_scsih_remove_unresponding_devices(struct MPT2SAS_ADAPTER *ioc)
5158
5114
struct _sas_device *sas_device, *sas_device_next;
5159
struct _sas_node *sas_expander, *sas_expander_next;
5115
struct _sas_node *sas_expander;
5160
5116
struct _raid_device *raid_device, *raid_device_next;
5161
unsigned long flags;
5163
_scsih_search_responding_sas_devices(ioc);
5164
_scsih_search_responding_raid_devices(ioc);
5165
_scsih_search_responding_expanders(ioc);
5167
spin_lock_irqsave(&ioc->ioc_reset_in_progress_lock, flags);
5168
ioc->shost_recovery = 0;
5169
if (ioc->shost->shost_state == SHOST_RECOVERY) {
5170
printk(MPT2SAS_INFO_FMT "putting controller into "
5171
"SHOST_RUNNING\n", ioc->name);
5172
scsi_host_set_state(ioc->shost, SHOST_RUNNING);
5174
spin_unlock_irqrestore(&ioc->ioc_reset_in_progress_lock, flags);
5176
5119
list_for_each_entry_safe(sas_device, sas_device_next,
5177
5120
&ioc->sas_device_list, list) {
5207
5150
_scsih_raid_device_remove(ioc, raid_device);
5210
list_for_each_entry_safe(sas_expander, sas_expander_next,
5211
&ioc->sas_expander_list, list) {
5153
retry_expander_search:
5154
sas_expander = NULL;
5155
list_for_each_entry(sas_expander, &ioc->sas_expander_list, list) {
5212
5156
if (sas_expander->responding) {
5213
5157
sas_expander->responding = 0;
5216
printk("\tremoving expander: handle(0x%04x), "
5217
" sas_addr(0x%016llx)\n", sas_expander->handle,
5218
(unsigned long long)sas_expander->sas_address);
5219
5160
_scsih_expander_remove(ioc, sas_expander->handle);
5161
goto retry_expander_search;
5166
* mpt2sas_scsih_reset_handler - reset callback handler (for scsih)
5167
* @ioc: per adapter object
5168
* @reset_phase: phase
5170
* The handler for doing any required cleanup or initialization.
5172
* The reset phase can be MPT2_IOC_PRE_RESET, MPT2_IOC_AFTER_RESET,
5173
* MPT2_IOC_DONE_RESET
5178
mpt2sas_scsih_reset_handler(struct MPT2SAS_ADAPTER *ioc, int reset_phase)
5180
switch (reset_phase) {
5181
case MPT2_IOC_PRE_RESET:
5182
dtmprintk(ioc, printk(MPT2SAS_DEBUG_FMT "%s: "
5183
"MPT2_IOC_PRE_RESET\n", ioc->name, __func__));
5184
_scsih_fw_event_off(ioc);
5186
case MPT2_IOC_AFTER_RESET:
5187
dtmprintk(ioc, printk(MPT2SAS_DEBUG_FMT "%s: "
5188
"MPT2_IOC_AFTER_RESET\n", ioc->name, __func__));
5189
if (ioc->tm_cmds.status & MPT2_CMD_PENDING) {
5190
ioc->tm_cmds.status |= MPT2_CMD_RESET;
5191
mpt2sas_base_free_smid(ioc, ioc->tm_cmds.smid);
5192
complete(&ioc->tm_cmds.done);
5194
_scsih_fw_event_on(ioc);
5195
_scsih_flush_running_cmds(ioc);
5197
case MPT2_IOC_DONE_RESET:
5198
dtmprintk(ioc, printk(MPT2SAS_DEBUG_FMT "%s: "
5199
"MPT2_IOC_DONE_RESET\n", ioc->name, __func__));
5200
_scsih_sas_host_refresh(ioc, 0);
5201
_scsih_search_responding_sas_devices(ioc);
5202
_scsih_search_responding_raid_devices(ioc);
5203
_scsih_search_responding_expanders(ioc);
5205
case MPT2_IOC_RUNNING:
5206
dtmprintk(ioc, printk(MPT2SAS_DEBUG_FMT "%s: "
5207
"MPT2_IOC_RUNNING\n", ioc->name, __func__));
5208
_scsih_remove_unresponding_devices(ioc);
5236
5226
unsigned long flags;
5237
5227
struct MPT2SAS_ADAPTER *ioc = fw_event->ioc;
5239
/* This is invoked by calling _scsih_queue_rescan(). */
5240
if (fw_event->event == MPT2SAS_RESCAN_AFTER_HOST_RESET) {
5241
_scsih_fw_event_free(ioc, fw_event);
5242
_scsih_sas_host_refresh(ioc, 1);
5243
_scsih_remove_unresponding_devices(ioc);
5247
5229
/* the queue is being flushed so ignore this event */
5248
5230
spin_lock_irqsave(&ioc->fw_event_lock, flags);
5249
5231
if (ioc->fw_events_off || ioc->remove_host) {
5254
5236
spin_unlock_irqrestore(&ioc->fw_event_lock, flags);
5256
spin_lock_irqsave(&ioc->ioc_reset_in_progress_lock, flags);
5257
5238
if (ioc->shost_recovery) {
5258
spin_unlock_irqrestore(&ioc->ioc_reset_in_progress_lock, flags);
5259
5239
_scsih_fw_event_requeue(ioc, fw_event, 1000);
5262
spin_unlock_irqrestore(&ioc->ioc_reset_in_progress_lock, flags);
5264
5243
switch (fw_event->event) {
5265
5244
case MPI2_EVENT_SAS_TOPOLOGY_CHANGE_LIST: