|
@@ -3941,6 +3941,8 @@ mpt2sas_base_detach(struct MPT2SAS_ADAPTER *ioc)
|
|
|
static void
|
|
|
_base_reset_handler(struct MPT2SAS_ADAPTER *ioc, int reset_phase)
|
|
|
{
|
|
|
+ mpt2sas_scsih_reset_handler(ioc, reset_phase);
|
|
|
+ mpt2sas_ctl_reset_handler(ioc, reset_phase);
|
|
|
switch (reset_phase) {
|
|
|
case MPT2_IOC_PRE_RESET:
|
|
|
dtmprintk(ioc, printk(MPT2SAS_INFO_FMT "%s: "
|
|
@@ -3971,8 +3973,6 @@ _base_reset_handler(struct MPT2SAS_ADAPTER *ioc, int reset_phase)
|
|
|
"MPT2_IOC_DONE_RESET\n", ioc->name, __func__));
|
|
|
break;
|
|
|
}
|
|
|
- mpt2sas_scsih_reset_handler(ioc, reset_phase);
|
|
|
- mpt2sas_ctl_reset_handler(ioc, reset_phase);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -4026,6 +4026,7 @@ mpt2sas_base_hard_reset_handler(struct MPT2SAS_ADAPTER *ioc, int sleep_flag,
|
|
|
{
|
|
|
int r;
|
|
|
unsigned long flags;
|
|
|
+ u8 pe_complete = ioc->wait_for_port_enable_to_complete;
|
|
|
|
|
|
dtmprintk(ioc, printk(MPT2SAS_INFO_FMT "%s: enter\n", ioc->name,
|
|
|
__func__));
|
|
@@ -4068,6 +4069,14 @@ mpt2sas_base_hard_reset_handler(struct MPT2SAS_ADAPTER *ioc, int sleep_flag,
|
|
|
if (r)
|
|
|
goto out;
|
|
|
_base_reset_handler(ioc, MPT2_IOC_AFTER_RESET);
|
|
|
+
|
|
|
+ /* If this hard reset is called while port enable is active, then
|
|
|
+ * there is no reason to call make_ioc_operational
|
|
|
+ */
|
|
|
+ if (pe_complete) {
|
|
|
+ r = -EFAULT;
|
|
|
+ goto out;
|
|
|
+ }
|
|
|
r = _base_make_ioc_operational(ioc, sleep_flag);
|
|
|
if (!r)
|
|
|
_base_reset_handler(ioc, MPT2_IOC_DONE_RESET);
|