diff options
author | Michal Swiatkowski <michal.swiatkowski@intel.com> | 2019-04-16 13:21:14 -0400 |
---|---|---|
committer | Jeff Kirsher <jeffrey.t.kirsher@intel.com> | 2019-05-04 16:42:53 -0400 |
commit | a52db6b2601f9904ce7fc4b32537823e5c1eb9ef (patch) | |
tree | 550ec91e854bb7a7a20baee39e97f77c75331d2f /drivers/net/ethernet/intel/ice/ice_main.c | |
parent | 819d899863dc019e5e5fff869578b056a93e35db (diff) |
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>
Diffstat (limited to 'drivers/net/ethernet/intel/ice/ice_main.c')
-rw-r--r-- | drivers/net/ethernet/intel/ice/ice_main.c | 15 |
1 files 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) | |||
1185 | for (i = 0; i < pf->num_alloc_vfs && mdd_detected; i++) { | 1185 | for (i = 0; i < pf->num_alloc_vfs && mdd_detected; i++) { |
1186 | struct ice_vf *vf = &pf->vf[i]; | 1186 | struct ice_vf *vf = &pf->vf[i]; |
1187 | 1187 | ||
1188 | mdd_detected = false; | ||
1189 | |||
1188 | reg = rd32(hw, VP_MDET_TX_PQM(i)); | 1190 | reg = rd32(hw, VP_MDET_TX_PQM(i)); |
1189 | if (reg & VP_MDET_TX_PQM_VALID_M) { | 1191 | if (reg & VP_MDET_TX_PQM_VALID_M) { |
1190 | wr32(hw, VP_MDET_TX_PQM(i), 0xFFFF); | 1192 | wr32(hw, VP_MDET_TX_PQM(i), 0xFFFF); |
1191 | vf->num_mdd_events++; | 1193 | mdd_detected = true; |
1192 | dev_info(&pf->pdev->dev, "TX driver issue detected on VF %d\n", | 1194 | dev_info(&pf->pdev->dev, "TX driver issue detected on VF %d\n", |
1193 | i); | 1195 | i); |
1194 | } | 1196 | } |
@@ -1196,7 +1198,7 @@ static void ice_handle_mdd_event(struct ice_pf *pf) | |||
1196 | reg = rd32(hw, VP_MDET_TX_TCLAN(i)); | 1198 | reg = rd32(hw, VP_MDET_TX_TCLAN(i)); |
1197 | if (reg & VP_MDET_TX_TCLAN_VALID_M) { | 1199 | if (reg & VP_MDET_TX_TCLAN_VALID_M) { |
1198 | wr32(hw, VP_MDET_TX_TCLAN(i), 0xFFFF); | 1200 | wr32(hw, VP_MDET_TX_TCLAN(i), 0xFFFF); |
1199 | vf->num_mdd_events++; | 1201 | mdd_detected = true; |
1200 | dev_info(&pf->pdev->dev, "TX driver issue detected on VF %d\n", | 1202 | dev_info(&pf->pdev->dev, "TX driver issue detected on VF %d\n", |
1201 | i); | 1203 | i); |
1202 | } | 1204 | } |
@@ -1204,7 +1206,7 @@ static void ice_handle_mdd_event(struct ice_pf *pf) | |||
1204 | reg = rd32(hw, VP_MDET_TX_TDPU(i)); | 1206 | reg = rd32(hw, VP_MDET_TX_TDPU(i)); |
1205 | if (reg & VP_MDET_TX_TDPU_VALID_M) { | 1207 | if (reg & VP_MDET_TX_TDPU_VALID_M) { |
1206 | wr32(hw, VP_MDET_TX_TDPU(i), 0xFFFF); | 1208 | wr32(hw, VP_MDET_TX_TDPU(i), 0xFFFF); |
1207 | vf->num_mdd_events++; | 1209 | mdd_detected = true; |
1208 | dev_info(&pf->pdev->dev, "TX driver issue detected on VF %d\n", | 1210 | dev_info(&pf->pdev->dev, "TX driver issue detected on VF %d\n", |
1209 | i); | 1211 | i); |
1210 | } | 1212 | } |
@@ -1212,14 +1214,13 @@ static void ice_handle_mdd_event(struct ice_pf *pf) | |||
1212 | reg = rd32(hw, VP_MDET_RX(i)); | 1214 | reg = rd32(hw, VP_MDET_RX(i)); |
1213 | if (reg & VP_MDET_RX_VALID_M) { | 1215 | if (reg & VP_MDET_RX_VALID_M) { |
1214 | wr32(hw, VP_MDET_RX(i), 0xFFFF); | 1216 | wr32(hw, VP_MDET_RX(i), 0xFFFF); |
1215 | vf->num_mdd_events++; | 1217 | mdd_detected = true; |
1216 | dev_info(&pf->pdev->dev, "RX driver issue detected on VF %d\n", | 1218 | dev_info(&pf->pdev->dev, "RX driver issue detected on VF %d\n", |
1217 | i); | 1219 | i); |
1218 | } | 1220 | } |
1219 | 1221 | ||
1220 | if (vf->num_mdd_events > ICE_DFLT_NUM_MDD_EVENTS_ALLOWED) { | 1222 | if (mdd_detected) { |
1221 | dev_info(&pf->pdev->dev, | 1223 | vf->num_mdd_events++; |
1222 | "Too many MDD events on VF %d, disabled\n", i); | ||
1223 | dev_info(&pf->pdev->dev, | 1224 | dev_info(&pf->pdev->dev, |
1224 | "Use PF Control I/F to re-enable the VF\n"); | 1225 | "Use PF Control I/F to re-enable the VF\n"); |
1225 | set_bit(ICE_VF_STATE_DIS, vf->vf_states); | 1226 | set_bit(ICE_VF_STATE_DIS, vf->vf_states); |