diff options
| -rw-r--r-- | drivers/scsi/mpt2sas/mpt2sas_base.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/drivers/scsi/mpt2sas/mpt2sas_base.c b/drivers/scsi/mpt2sas/mpt2sas_base.c index a11ac6701043..9ead0399808a 100644 --- a/drivers/scsi/mpt2sas/mpt2sas_base.c +++ b/drivers/scsi/mpt2sas/mpt2sas_base.c | |||
| @@ -3941,6 +3941,8 @@ mpt2sas_base_detach(struct MPT2SAS_ADAPTER *ioc) | |||
| 3941 | static void | 3941 | static void |
| 3942 | _base_reset_handler(struct MPT2SAS_ADAPTER *ioc, int reset_phase) | 3942 | _base_reset_handler(struct MPT2SAS_ADAPTER *ioc, int reset_phase) |
| 3943 | { | 3943 | { |
| 3944 | mpt2sas_scsih_reset_handler(ioc, reset_phase); | ||
| 3945 | mpt2sas_ctl_reset_handler(ioc, reset_phase); | ||
| 3944 | switch (reset_phase) { | 3946 | switch (reset_phase) { |
| 3945 | case MPT2_IOC_PRE_RESET: | 3947 | case MPT2_IOC_PRE_RESET: |
| 3946 | dtmprintk(ioc, printk(MPT2SAS_INFO_FMT "%s: " | 3948 | dtmprintk(ioc, printk(MPT2SAS_INFO_FMT "%s: " |
| @@ -3971,8 +3973,6 @@ _base_reset_handler(struct MPT2SAS_ADAPTER *ioc, int reset_phase) | |||
| 3971 | "MPT2_IOC_DONE_RESET\n", ioc->name, __func__)); | 3973 | "MPT2_IOC_DONE_RESET\n", ioc->name, __func__)); |
| 3972 | break; | 3974 | break; |
| 3973 | } | 3975 | } |
| 3974 | mpt2sas_scsih_reset_handler(ioc, reset_phase); | ||
| 3975 | mpt2sas_ctl_reset_handler(ioc, reset_phase); | ||
| 3976 | } | 3976 | } |
| 3977 | 3977 | ||
| 3978 | /** | 3978 | /** |
| @@ -4026,6 +4026,7 @@ mpt2sas_base_hard_reset_handler(struct MPT2SAS_ADAPTER *ioc, int sleep_flag, | |||
| 4026 | { | 4026 | { |
| 4027 | int r; | 4027 | int r; |
| 4028 | unsigned long flags; | 4028 | unsigned long flags; |
| 4029 | u8 pe_complete = ioc->wait_for_port_enable_to_complete; | ||
| 4029 | 4030 | ||
| 4030 | dtmprintk(ioc, printk(MPT2SAS_INFO_FMT "%s: enter\n", ioc->name, | 4031 | dtmprintk(ioc, printk(MPT2SAS_INFO_FMT "%s: enter\n", ioc->name, |
| 4031 | __func__)); | 4032 | __func__)); |
| @@ -4068,6 +4069,14 @@ mpt2sas_base_hard_reset_handler(struct MPT2SAS_ADAPTER *ioc, int sleep_flag, | |||
| 4068 | if (r) | 4069 | if (r) |
| 4069 | goto out; | 4070 | goto out; |
| 4070 | _base_reset_handler(ioc, MPT2_IOC_AFTER_RESET); | 4071 | _base_reset_handler(ioc, MPT2_IOC_AFTER_RESET); |
| 4072 | |||
| 4073 | /* If this hard reset is called while port enable is active, then | ||
| 4074 | * there is no reason to call make_ioc_operational | ||
| 4075 | */ | ||
| 4076 | if (pe_complete) { | ||
| 4077 | r = -EFAULT; | ||
| 4078 | goto out; | ||
| 4079 | } | ||
| 4071 | r = _base_make_ioc_operational(ioc, sleep_flag); | 4080 | r = _base_make_ioc_operational(ioc, sleep_flag); |
| 4072 | if (!r) | 4081 | if (!r) |
| 4073 | _base_reset_handler(ioc, MPT2_IOC_DONE_RESET); | 4082 | _base_reset_handler(ioc, MPT2_IOC_DONE_RESET); |
