mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-01-19 07:26:45 +07:00
ice: Fix for allowing too many MDD events on VF
Disable VF if any malicious device driver (MDD) event is detected by hardware. Track vf->num_mdd_events for information about VF MDD events. Signed-off-by: Michal Swiatkowski <michal.swiatkowski@intel.com> Signed-off-by: Anirudh Venkataramanan <anirudh.venkataramanan@intel.com> Tested-by: Andrew Bowers <andrewx.bowers@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
parent
819d899863
commit
a52db6b260
@ -1185,10 +1185,12 @@ static void ice_handle_mdd_event(struct ice_pf *pf)
|
||||
for (i = 0; i < pf->num_alloc_vfs && mdd_detected; i++) {
|
||||
struct ice_vf *vf = &pf->vf[i];
|
||||
|
||||
mdd_detected = false;
|
||||
|
||||
reg = rd32(hw, VP_MDET_TX_PQM(i));
|
||||
if (reg & VP_MDET_TX_PQM_VALID_M) {
|
||||
wr32(hw, VP_MDET_TX_PQM(i), 0xFFFF);
|
||||
vf->num_mdd_events++;
|
||||
mdd_detected = true;
|
||||
dev_info(&pf->pdev->dev, "TX driver issue detected on VF %d\n",
|
||||
i);
|
||||
}
|
||||
@ -1196,7 +1198,7 @@ static void ice_handle_mdd_event(struct ice_pf *pf)
|
||||
reg = rd32(hw, VP_MDET_TX_TCLAN(i));
|
||||
if (reg & VP_MDET_TX_TCLAN_VALID_M) {
|
||||
wr32(hw, VP_MDET_TX_TCLAN(i), 0xFFFF);
|
||||
vf->num_mdd_events++;
|
||||
mdd_detected = true;
|
||||
dev_info(&pf->pdev->dev, "TX driver issue detected on VF %d\n",
|
||||
i);
|
||||
}
|
||||
@ -1204,7 +1206,7 @@ static void ice_handle_mdd_event(struct ice_pf *pf)
|
||||
reg = rd32(hw, VP_MDET_TX_TDPU(i));
|
||||
if (reg & VP_MDET_TX_TDPU_VALID_M) {
|
||||
wr32(hw, VP_MDET_TX_TDPU(i), 0xFFFF);
|
||||
vf->num_mdd_events++;
|
||||
mdd_detected = true;
|
||||
dev_info(&pf->pdev->dev, "TX driver issue detected on VF %d\n",
|
||||
i);
|
||||
}
|
||||
@ -1212,14 +1214,13 @@ static void ice_handle_mdd_event(struct ice_pf *pf)
|
||||
reg = rd32(hw, VP_MDET_RX(i));
|
||||
if (reg & VP_MDET_RX_VALID_M) {
|
||||
wr32(hw, VP_MDET_RX(i), 0xFFFF);
|
||||
vf->num_mdd_events++;
|
||||
mdd_detected = true;
|
||||
dev_info(&pf->pdev->dev, "RX driver issue detected on VF %d\n",
|
||||
i);
|
||||
}
|
||||
|
||||
if (vf->num_mdd_events > ICE_DFLT_NUM_MDD_EVENTS_ALLOWED) {
|
||||
dev_info(&pf->pdev->dev,
|
||||
"Too many MDD events on VF %d, disabled\n", i);
|
||||
if (mdd_detected) {
|
||||
vf->num_mdd_events++;
|
||||
dev_info(&pf->pdev->dev,
|
||||
"Use PF Control I/F to re-enable the VF\n");
|
||||
set_bit(ICE_VF_STATE_DIS, vf->vf_states);
|
||||
|
Loading…
Reference in New Issue
Block a user