* [PATCH] scsi: pm80xx: Use dynamic tag numbers for phy start and stop
@ 2024-11-25 21:33 TJ Adams
2024-12-04 19:51 ` Martin K. Petersen
2024-12-10 2:35 ` Martin K. Petersen
0 siblings, 2 replies; 3+ messages in thread
From: TJ Adams @ 2024-11-25 21:33 UTC (permalink / raw)
To: Jack Wang, James E . J . Bottomley, Martin K . Petersen
Cc: linux-scsi, linux-kernel, Jolly Shah, Terrence Adams
From: Jolly Shah <jollys@google.com>
Other commands were not aware if tag 0x01 was in use or not which meant
multiple commands could share the same tag number. This changes prevents
tag 0x01 from being used by multiple commands at the same time.
Signed-off-by: Jolly Shah <jollys@google.com>
Signed-off-by: Terrence Adams <tadamsjr@google.com>
---
drivers/scsi/pm8001/pm80xx_hwi.c | 37 ++++++++++++++++++++++++--------
1 file changed, 28 insertions(+), 9 deletions(-)
diff --git a/drivers/scsi/pm8001/pm80xx_hwi.c b/drivers/scsi/pm8001/pm80xx_hwi.c
index a9869cd8c4c0..57c5970c04d5 100644
--- a/drivers/scsi/pm8001/pm80xx_hwi.c
+++ b/drivers/scsi/pm8001/pm80xx_hwi.c
@@ -3335,10 +3335,11 @@ static int mpi_phy_start_resp(struct pm8001_hba_info *pm8001_ha, void *piomb)
u32 phy_id =
le32_to_cpu(pPayload->phyid) & 0xFF;
struct pm8001_phy *phy = &pm8001_ha->phy[phy_id];
+ u32 tag = le32_to_cpu(pPayload->tag);
pm8001_dbg(pm8001_ha, INIT,
- "phy start resp status:0x%x, phyid:0x%x\n",
- status, phy_id);
+ "phy start resp status:0x%x, phyid:0x%x, tag 0x%x\n",
+ status, phy_id, tag);
if (status == 0)
phy->phy_state = PHY_LINK_DOWN;
@@ -3347,6 +3348,8 @@ static int mpi_phy_start_resp(struct pm8001_hba_info *pm8001_ha, void *piomb)
complete(phy->enable_completion);
phy->enable_completion = NULL;
}
+
+ pm8001_tag_free(pm8001_ha, tag);
return 0;
}
@@ -3627,8 +3630,10 @@ static int mpi_phy_stop_resp(struct pm8001_hba_info *pm8001_ha, void *piomb)
u32 phyid =
le32_to_cpu(pPayload->phyid) & 0xFF;
struct pm8001_phy *phy = &pm8001_ha->phy[phyid];
- pm8001_dbg(pm8001_ha, MSG, "phy:0x%x status:0x%x\n",
- phyid, status);
+ u32 tag = le32_to_cpu(pPayload->tag);
+
+ pm8001_dbg(pm8001_ha, MSG, "phy:0x%x status:0x%x tag 0x%x\n", phyid,
+ status, tag);
if (status == PHY_STOP_SUCCESS ||
status == PHY_STOP_ERR_DEVICE_ATTACHED) {
phy->phy_state = PHY_LINK_DISABLE;
@@ -3636,6 +3641,7 @@ static int mpi_phy_stop_resp(struct pm8001_hba_info *pm8001_ha, void *piomb)
phy->sas_phy.linkrate = SAS_PHY_DISABLED;
}
+ pm8001_tag_free(pm8001_ha, tag);
return 0;
}
@@ -3654,10 +3660,9 @@ static int mpi_set_controller_config_resp(struct pm8001_hba_info *pm8001_ha,
u32 tag = le32_to_cpu(pPayload->tag);
pm8001_dbg(pm8001_ha, MSG,
- "SET CONTROLLER RESP: status 0x%x qlfr_pgcd 0x%x\n",
- status, err_qlfr_pgcd);
+ "SET CONTROLLER RESP: status 0x%x qlfr_pgcd 0x%x tag 0x%x\n",
+ status, err_qlfr_pgcd, tag);
pm8001_tag_free(pm8001_ha, tag);
-
return 0;
}
@@ -4631,9 +4636,16 @@ static int
pm80xx_chip_phy_start_req(struct pm8001_hba_info *pm8001_ha, u8 phy_id)
{
struct phy_start_req payload;
- u32 tag = 0x01;
+ int ret;
+ u32 tag;
u32 opcode = OPC_INB_PHYSTART;
+ ret = pm8001_tag_alloc(pm8001_ha, &tag);
+ if (ret) {
+ pm8001_dbg(pm8001_ha, FAIL, "Tag allocation failed\n");
+ return ret;
+ }
+
memset(&payload, 0, sizeof(payload));
payload.tag = cpu_to_le32(tag);
@@ -4669,9 +4681,16 @@ static int pm80xx_chip_phy_stop_req(struct pm8001_hba_info *pm8001_ha,
u8 phy_id)
{
struct phy_stop_req payload;
- u32 tag = 0x01;
+ int ret;
+ u32 tag;
u32 opcode = OPC_INB_PHYSTOP;
+ ret = pm8001_tag_alloc(pm8001_ha, &tag);
+ if (ret) {
+ pm8001_dbg(pm8001_ha, FAIL, "Tag allocation failed\n");
+ return ret;
+ }
+
memset(&payload, 0, sizeof(payload));
payload.tag = cpu_to_le32(tag);
payload.phy_id = cpu_to_le32(phy_id);
--
2.47.0.338.g60cca15819-goog
^ permalink raw reply related [flat|nested] 3+ messages in thread* Re: [PATCH] scsi: pm80xx: Use dynamic tag numbers for phy start and stop
2024-11-25 21:33 [PATCH] scsi: pm80xx: Use dynamic tag numbers for phy start and stop TJ Adams
@ 2024-12-04 19:51 ` Martin K. Petersen
2024-12-10 2:35 ` Martin K. Petersen
1 sibling, 0 replies; 3+ messages in thread
From: Martin K. Petersen @ 2024-12-04 19:51 UTC (permalink / raw)
To: TJ Adams
Cc: Jack Wang, James E . J . Bottomley, Martin K . Petersen,
linux-scsi, linux-kernel, Jolly Shah
TJ,
> Other commands were not aware if tag 0x01 was in use or not which
> meant multiple commands could share the same tag number. This changes
> prevents tag 0x01 from being used by multiple commands at the same
> time.
Applied to 6.14/scsi-staging, thanks!
--
Martin K. Petersen Oracle Linux Engineering
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] scsi: pm80xx: Use dynamic tag numbers for phy start and stop
2024-11-25 21:33 [PATCH] scsi: pm80xx: Use dynamic tag numbers for phy start and stop TJ Adams
2024-12-04 19:51 ` Martin K. Petersen
@ 2024-12-10 2:35 ` Martin K. Petersen
1 sibling, 0 replies; 3+ messages in thread
From: Martin K. Petersen @ 2024-12-10 2:35 UTC (permalink / raw)
To: Jack Wang, James E . J . Bottomley, TJ Adams
Cc: Martin K . Petersen, linux-scsi, linux-kernel, Jolly Shah
On Mon, 25 Nov 2024 13:33:43 -0800, TJ Adams wrote:
> Other commands were not aware if tag 0x01 was in use or not which meant
> multiple commands could share the same tag number. This changes prevents
> tag 0x01 from being used by multiple commands at the same time.
>
>
Applied to 6.14/scsi-queue, thanks!
[1/1] scsi: pm80xx: Use dynamic tag numbers for phy start and stop
https://git.kernel.org/mkp/scsi/c/4c567a9d0e00
--
Martin K. Petersen Oracle Linux Engineering
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2024-12-10 2:36 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-11-25 21:33 [PATCH] scsi: pm80xx: Use dynamic tag numbers for phy start and stop TJ Adams
2024-12-04 19:51 ` Martin K. Petersen
2024-12-10 2:35 ` Martin K. Petersen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox