diff options
Diffstat (limited to 'drivers/net/ethernet/intel/ice/ice_lib.c')
-rw-r--r-- | drivers/net/ethernet/intel/ice/ice_lib.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/drivers/net/ethernet/intel/ice/ice_lib.c b/drivers/net/ethernet/intel/ice/ice_lib.c index 8f7ee77cb70b..98e8b7096e47 100644 --- a/drivers/net/ethernet/intel/ice/ice_lib.c +++ b/drivers/net/ethernet/intel/ice/ice_lib.c | |||
@@ -1223,6 +1223,38 @@ static void ice_vsi_map_rings_to_vectors(struct ice_vsi *vsi) | |||
1223 | } | 1223 | } |
1224 | 1224 | ||
1225 | /** | 1225 | /** |
1226 | * ice_vsi_manage_rss_lut - disable/enable RSS | ||
1227 | * @vsi: the VSI being changed | ||
1228 | * @ena: boolean value indicating if this is an enable or disable request | ||
1229 | * | ||
1230 | * In the event of disable request for RSS, this function will zero out RSS | ||
1231 | * LUT, while in the event of enable request for RSS, it will reconfigure RSS | ||
1232 | * LUT. | ||
1233 | */ | ||
1234 | int ice_vsi_manage_rss_lut(struct ice_vsi *vsi, bool ena) | ||
1235 | { | ||
1236 | int err = 0; | ||
1237 | u8 *lut; | ||
1238 | |||
1239 | lut = devm_kzalloc(&vsi->back->pdev->dev, vsi->rss_table_size, | ||
1240 | GFP_KERNEL); | ||
1241 | if (!lut) | ||
1242 | return -ENOMEM; | ||
1243 | |||
1244 | if (ena) { | ||
1245 | if (vsi->rss_lut_user) | ||
1246 | memcpy(lut, vsi->rss_lut_user, vsi->rss_table_size); | ||
1247 | else | ||
1248 | ice_fill_rss_lut(lut, vsi->rss_table_size, | ||
1249 | vsi->rss_size); | ||
1250 | } | ||
1251 | |||
1252 | err = ice_set_rss(vsi, NULL, lut, vsi->rss_table_size); | ||
1253 | devm_kfree(&vsi->back->pdev->dev, lut); | ||
1254 | return err; | ||
1255 | } | ||
1256 | |||
1257 | /** | ||
1226 | * ice_vsi_cfg_rss_lut_key - Configure RSS params for a VSI | 1258 | * ice_vsi_cfg_rss_lut_key - Configure RSS params for a VSI |
1227 | * @vsi: VSI to be configured | 1259 | * @vsi: VSI to be configured |
1228 | */ | 1260 | */ |