From: Michal Swiatkowski <[email protected]>

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 <[email protected]>
Signed-off-by: Anirudh Venkataramanan <[email protected]>
Tested-by: Andrew Bowers <[email protected]>
Signed-off-by: Jeff Kirsher <[email protected]>
---
 drivers/net/ethernet/intel/ice/ice_main.c | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/drivers/net/ethernet/intel/ice/ice_main.c 
b/drivers/net/ethernet/intel/ice/ice_main.c
index 6b27be93bdf5..2352b4129a62 100644
--- a/drivers/net/ethernet/intel/ice/ice_main.c
+++ b/drivers/net/ethernet/intel/ice/ice_main.c
@@ -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);
-- 
2.20.1

Reply via email to