mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-02-12 03:15:08 +07:00
Merge branch 'cxgb4-mbox'
Hariprasad Shenai says: ==================== cxgb4: mbox enhancements for cxgb4 This patch series checks for firmware errors when we are waiting for mbox response in a loop and breaks out. When negative timeout is passed to mailbox code, don't sleep. Negative timeout is passed only from interrupt context. This patch series has been created against net-next tree and includes patches on cxgb4 driver. We have included all the maintainers of respective drivers. Kindly review the change and let us know in case of any review comments. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
27540247c5
@ -293,6 +293,7 @@ int t4_wr_mbox_meat_timeout(struct adapter *adap, int mbox, const void *cmd,
|
||||
u32 data_reg = PF_REG(mbox, CIM_PF_MAILBOX_DATA_A);
|
||||
u32 ctl_reg = PF_REG(mbox, CIM_PF_MAILBOX_CTRL_A);
|
||||
__be64 cmd_rpl[MBOX_LEN / 8];
|
||||
u32 pcie_fw;
|
||||
|
||||
if ((size & 15) || size > MBOX_LEN)
|
||||
return -EINVAL;
|
||||
@ -304,6 +305,12 @@ int t4_wr_mbox_meat_timeout(struct adapter *adap, int mbox, const void *cmd,
|
||||
if (adap->pdev->error_state != pci_channel_io_normal)
|
||||
return -EIO;
|
||||
|
||||
/* If we have a negative timeout, that implies that we can't sleep. */
|
||||
if (timeout < 0) {
|
||||
sleep_ok = false;
|
||||
timeout = -timeout;
|
||||
}
|
||||
|
||||
v = MBOWNER_G(t4_read_reg(adap, ctl_reg));
|
||||
for (i = 0; v == MBOX_OWNER_NONE && i < 3; i++)
|
||||
v = MBOWNER_G(t4_read_reg(adap, ctl_reg));
|
||||
@ -325,7 +332,10 @@ int t4_wr_mbox_meat_timeout(struct adapter *adap, int mbox, const void *cmd,
|
||||
delay_idx = 0;
|
||||
ms = delay[0];
|
||||
|
||||
for (i = 0; i < timeout; i += ms) {
|
||||
for (i = 0;
|
||||
!((pcie_fw = t4_read_reg(adap, PCIE_FW_A)) & PCIE_FW_ERR_F) &&
|
||||
i < timeout;
|
||||
i += ms) {
|
||||
if (sleep_ok) {
|
||||
ms = delay[delay_idx]; /* last element may repeat */
|
||||
if (delay_idx < ARRAY_SIZE(delay) - 1)
|
||||
@ -360,7 +370,7 @@ int t4_wr_mbox_meat_timeout(struct adapter *adap, int mbox, const void *cmd,
|
||||
}
|
||||
}
|
||||
|
||||
ret = -ETIMEDOUT;
|
||||
ret = (pcie_fw & PCIE_FW_ERR_F) ? -ENXIO : -ETIMEDOUT;
|
||||
t4_record_mbox(adap, cmd, MBOX_LEN, access, ret);
|
||||
dev_err(adap->pdev_dev, "command %#x in mailbox %d timed out\n",
|
||||
*(const u8 *)cmd, mbox);
|
||||
|
Loading…
Reference in New Issue
Block a user