Skip to content

Commit c63646d

Browse files
cloftusbruce-richardson
authored andcommitted
net/intel: ensure correct Rx path is selected
The common rx path selection logic iterates through an array of candidate paths and selects the best fit for the requested features. Currently, in the event that two potential candidates are identified, the one with the fewer offloads (and thus less complex path) is selected. However this is not correct, because if the path with more offloads has a greater SIMD width, that should be chosen. This commit reworks the logic so that the number of offloads is only taken into consideration when choosing between two paths with the same SIMD width. Since the paths arrays are ordered from lowest SIMD width to highest, and vector paths tend to have fewer offloads enabled than scalar paths, "new" candidate paths with greater SIMDs widths tended to have fewer or equal offloads than the "current" candidate paths and thus were correctly accepted as the best candidate. For this reason the incorrect logic did not cause any incorrect path selections in practise. Fixes: 9d99641 ("net/intel: introduce infrastructure for Rx path selection") Signed-off-by: Ciara Loftus <[email protected]> Acked-by: Bruce Richardson <[email protected]>
1 parent ce9316b commit c63646d

File tree

1 file changed

+5
-2
lines changed
  • drivers/net/intel/common

1 file changed

+5
-2
lines changed

drivers/net/intel/common/rx.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -300,8 +300,11 @@ ci_rx_path_select(struct ci_rx_path_features req_features,
300300
/* Do not select paths with lower SIMD width than the current path. */
301301
if (path_features->simd_width < current_features->simd_width)
302302
continue;
303-
/* Do not select paths with more offloads enabled than the current path. */
304-
if (rte_popcount32(path_features->rx_offloads) >
303+
/* Do not select paths with more offloads enabled than the current path if
304+
* the SIMD widths are the same.
305+
*/
306+
if (path_features->simd_width == current_features->simd_width &&
307+
rte_popcount32(path_features->rx_offloads) >
305308
rte_popcount32(current_features->rx_offloads))
306309
continue;
307310
/* Do not select paths without bulk alloc support if requested and the

0 commit comments

Comments
 (0)