scsi: hisi_sas: Set .phy_attached before notifing phyup event HISI_PHYE_PHY_UP_PM
Currently in directly attached scenario, the phyup event HISI_PHYE_PHY_UP_PM is notified before .phy_attached is set - this may cause the phyup work hisi_sas_bytes_dmaed() execution failed and the attached device will not be found. To fix it, set .phy_attached before notifing phyup event. Signed-off-by: Yihang Li <liyihang9@huawei.com> Signed-off-by: Xiang Chen <chenxiang66@hisilicon.com> Link: https://lore.kernel.org/r/1702525516-51258-2-git-send-email-chenxiang66@hisilicon.com Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
b85ea95d08
commit
ce26497c74
@ -1605,6 +1605,11 @@ static irqreturn_t phy_up_v3_hw(int phy_no, struct hisi_hba *hisi_hba)
|
||||
}
|
||||
|
||||
phy->port_id = port_id;
|
||||
spin_lock(&phy->lock);
|
||||
/* Delete timer and set phy_attached atomically */
|
||||
del_timer(&phy->timer);
|
||||
phy->phy_attached = 1;
|
||||
spin_unlock(&phy->lock);
|
||||
|
||||
/*
|
||||
* Call pm_runtime_get_noresume() which pairs with
|
||||
@ -1618,11 +1623,6 @@ static irqreturn_t phy_up_v3_hw(int phy_no, struct hisi_hba *hisi_hba)
|
||||
|
||||
res = IRQ_HANDLED;
|
||||
|
||||
spin_lock(&phy->lock);
|
||||
/* Delete timer and set phy_attached atomically */
|
||||
del_timer(&phy->timer);
|
||||
phy->phy_attached = 1;
|
||||
spin_unlock(&phy->lock);
|
||||
end:
|
||||
if (phy->reset_completion)
|
||||
complete(phy->reset_completion);
|
||||
|
Loading…
x
Reference in New Issue
Block a user