forked from luck/tmp_suning_uos_patched
i40evf: check admin queue error bits
FW can indicate any admin queue error states to the driver via some bits in the length registers. Each time we process an admin queue message, check these bits and log any errors we find. Since the VF really can't do much, we just print the message and depend on the PF driver to clear things up on our behalf. Change-ID: I92bc6c53ce3b4400544e0ca19c5de2d27490bd0d Signed-off-by: Mitch Williams <mitch.a.williams@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
parent
9a173901d9
commit
912257e540
|
@ -1590,6 +1590,7 @@ static void i40evf_adminq_task(struct work_struct *work)
|
|||
struct i40e_arq_event_info event;
|
||||
struct i40e_virtchnl_msg *v_msg;
|
||||
i40e_status ret;
|
||||
u32 val, oldval;
|
||||
u16 pending;
|
||||
|
||||
if (adapter->flags & I40EVF_FLAG_PF_COMMS_FAILED)
|
||||
|
@ -1617,6 +1618,41 @@ static void i40evf_adminq_task(struct work_struct *work)
|
|||
}
|
||||
} while (pending);
|
||||
|
||||
/* check for error indications */
|
||||
val = rd32(hw, hw->aq.arq.len);
|
||||
oldval = val;
|
||||
if (val & I40E_VF_ARQLEN_ARQVFE_MASK) {
|
||||
dev_info(&adapter->pdev->dev, "ARQ VF Error detected\n");
|
||||
val &= ~I40E_VF_ARQLEN_ARQVFE_MASK;
|
||||
}
|
||||
if (val & I40E_VF_ARQLEN_ARQOVFL_MASK) {
|
||||
dev_info(&adapter->pdev->dev, "ARQ Overflow Error detected\n");
|
||||
val &= ~I40E_VF_ARQLEN_ARQOVFL_MASK;
|
||||
}
|
||||
if (val & I40E_VF_ARQLEN_ARQCRIT_MASK) {
|
||||
dev_info(&adapter->pdev->dev, "ARQ Critical Error detected\n");
|
||||
val &= ~I40E_VF_ARQLEN_ARQCRIT_MASK;
|
||||
}
|
||||
if (oldval != val)
|
||||
wr32(hw, hw->aq.arq.len, val);
|
||||
|
||||
val = rd32(hw, hw->aq.asq.len);
|
||||
oldval = val;
|
||||
if (val & I40E_VF_ATQLEN_ATQVFE_MASK) {
|
||||
dev_info(&adapter->pdev->dev, "ASQ VF Error detected\n");
|
||||
val &= ~I40E_VF_ATQLEN_ATQVFE_MASK;
|
||||
}
|
||||
if (val & I40E_VF_ATQLEN_ATQOVFL_MASK) {
|
||||
dev_info(&adapter->pdev->dev, "ASQ Overflow Error detected\n");
|
||||
val &= ~I40E_VF_ATQLEN_ATQOVFL_MASK;
|
||||
}
|
||||
if (val & I40E_VF_ATQLEN_ATQCRIT_MASK) {
|
||||
dev_info(&adapter->pdev->dev, "ASQ Critical Error detected\n");
|
||||
val &= ~I40E_VF_ATQLEN_ATQCRIT_MASK;
|
||||
}
|
||||
if (oldval != val)
|
||||
wr32(hw, hw->aq.asq.len, val);
|
||||
|
||||
/* re-enable Admin queue interrupt cause */
|
||||
i40evf_misc_irq_enable(adapter);
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user