aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/mpt2sas/mpt2sas_base.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi/mpt2sas/mpt2sas_base.c')
-rw-r--r--drivers/scsi/mpt2sas/mpt2sas_base.c24
1 files changed, 19 insertions, 5 deletions
diff --git a/drivers/scsi/mpt2sas/mpt2sas_base.c b/drivers/scsi/mpt2sas/mpt2sas_base.c
index 57bcd5c9dcff..9e590265a020 100644
--- a/drivers/scsi/mpt2sas/mpt2sas_base.c
+++ b/drivers/scsi/mpt2sas/mpt2sas_base.c
@@ -2057,9 +2057,9 @@ _base_allocate_memory_pools(struct MPT2SAS_ADAPTER *ioc, int sleep_flag)
2057 /* adjust hba_queue_depth, reply_free_queue_depth, 2057 /* adjust hba_queue_depth, reply_free_queue_depth,
2058 * and queue_size 2058 * and queue_size
2059 */ 2059 */
2060 ioc->hba_queue_depth -= queue_diff; 2060 ioc->hba_queue_depth -= (queue_diff / 2);
2061 ioc->reply_free_queue_depth -= queue_diff; 2061 ioc->reply_free_queue_depth -= (queue_diff / 2);
2062 queue_size -= queue_diff; 2062 queue_size = facts->MaxReplyDescriptorPostQueueDepth;
2063 } 2063 }
2064 ioc->reply_post_queue_depth = queue_size; 2064 ioc->reply_post_queue_depth = queue_size;
2065 2065
@@ -3662,6 +3662,11 @@ mpt2sas_base_attach(struct MPT2SAS_ADAPTER *ioc)
3662 ioc->scsih_cmds.status = MPT2_CMD_NOT_USED; 3662 ioc->scsih_cmds.status = MPT2_CMD_NOT_USED;
3663 mutex_init(&ioc->scsih_cmds.mutex); 3663 mutex_init(&ioc->scsih_cmds.mutex);
3664 3664
3665 /* scsih internal command bits */
3666 ioc->scsih_cmds.reply = kzalloc(ioc->reply_sz, GFP_KERNEL);
3667 ioc->scsih_cmds.status = MPT2_CMD_NOT_USED;
3668 mutex_init(&ioc->scsih_cmds.mutex);
3669
3665 /* task management internal command bits */ 3670 /* task management internal command bits */
3666 ioc->tm_cmds.reply = kzalloc(ioc->reply_sz, GFP_KERNEL); 3671 ioc->tm_cmds.reply = kzalloc(ioc->reply_sz, GFP_KERNEL);
3667 ioc->tm_cmds.status = MPT2_CMD_NOT_USED; 3672 ioc->tm_cmds.status = MPT2_CMD_NOT_USED;
@@ -3786,6 +3791,8 @@ mpt2sas_base_detach(struct MPT2SAS_ADAPTER *ioc)
3786static void 3791static void
3787_base_reset_handler(struct MPT2SAS_ADAPTER *ioc, int reset_phase) 3792_base_reset_handler(struct MPT2SAS_ADAPTER *ioc, int reset_phase)
3788{ 3793{
3794 mpt2sas_scsih_reset_handler(ioc, reset_phase);
3795 mpt2sas_ctl_reset_handler(ioc, reset_phase);
3789 switch (reset_phase) { 3796 switch (reset_phase) {
3790 case MPT2_IOC_PRE_RESET: 3797 case MPT2_IOC_PRE_RESET:
3791 dtmprintk(ioc, printk(MPT2SAS_INFO_FMT "%s: " 3798 dtmprintk(ioc, printk(MPT2SAS_INFO_FMT "%s: "
@@ -3816,8 +3823,6 @@ _base_reset_handler(struct MPT2SAS_ADAPTER *ioc, int reset_phase)
3816 "MPT2_IOC_DONE_RESET\n", ioc->name, __func__)); 3823 "MPT2_IOC_DONE_RESET\n", ioc->name, __func__));
3817 break; 3824 break;
3818 } 3825 }
3819 mpt2sas_scsih_reset_handler(ioc, reset_phase);
3820 mpt2sas_ctl_reset_handler(ioc, reset_phase);
3821} 3826}
3822 3827
3823/** 3828/**
@@ -3871,6 +3876,7 @@ mpt2sas_base_hard_reset_handler(struct MPT2SAS_ADAPTER *ioc, int sleep_flag,
3871{ 3876{
3872 int r; 3877 int r;
3873 unsigned long flags; 3878 unsigned long flags;
3879 u8 pe_complete = ioc->wait_for_port_enable_to_complete;
3874 3880
3875 dtmprintk(ioc, printk(MPT2SAS_INFO_FMT "%s: enter\n", ioc->name, 3881 dtmprintk(ioc, printk(MPT2SAS_INFO_FMT "%s: enter\n", ioc->name,
3876 __func__)); 3882 __func__));
@@ -3913,6 +3919,14 @@ mpt2sas_base_hard_reset_handler(struct MPT2SAS_ADAPTER *ioc, int sleep_flag,
3913 if (r) 3919 if (r)
3914 goto out; 3920 goto out;
3915 _base_reset_handler(ioc, MPT2_IOC_AFTER_RESET); 3921 _base_reset_handler(ioc, MPT2_IOC_AFTER_RESET);
3922
3923 /* If this hard reset is called while port enable is active, then
3924 * there is no reason to call make_ioc_operational
3925 */
3926 if (pe_complete) {
3927 r = -EFAULT;
3928 goto out;
3929 }
3916 r = _base_make_ioc_operational(ioc, sleep_flag); 3930 r = _base_make_ioc_operational(ioc, sleep_flag);
3917 if (!r) 3931 if (!r)
3918 _base_reset_handler(ioc, MPT2_IOC_DONE_RESET); 3932 _base_reset_handler(ioc, MPT2_IOC_DONE_RESET);