i40e: Fix XDP redirect failure when queue count < CPU count#19
Open
diegonix wants to merge 1 commit intointel:mainfrom
Open
i40e: Fix XDP redirect failure when queue count < CPU count#19diegonix wants to merge 1 commit intointel:mainfrom
diegonix wants to merge 1 commit intointel:mainfrom
Conversation
This patch fixes XDP redirect operations failing with -ENXIO when the number of configured queues is less than the number of online CPUs. The issue occurs because i40e_xdp_xmit() uses smp_processor_id() directly as a queue index without bounds checking. When users configure fewer queues than CPUs (common in performance-optimized environments), XDP redirect operations from higher-numbered CPUs fail. Changes: - Add i40e_xdp_queue_index() helper using modulo operation to map CPUs to available queues - Add configuration warning when channels < online CPUs with XDP enabled - Improve error messages for better diagnostics - Add safety check for queue index bounds (should never trigger) This fix ensures XDP redirect operations work correctly regardless of the CPU-to-queue ratio, preventing packet loss in optimized configurations.
|
Wouldn't it be simpler to fix it like the following, as other drivers do? For reference, here’s how the ixgbe driver handles it: |
Author
|
I'm sorry, I was working with the i40e, I came across this problem and thought I would fix it right away, I didn't think about doing a degree in Intel network drivers before proposing something. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This patch fixes XDP redirect operations failing with -ENXIO when the number of configured network queues is less than the number of online CPUs.
Problem Description
The i40e_xdp_xmit() function uses smp_processor_id() directly as a queue index without proper bounds checking. In performance-optimized environments where users configure fewer queues than CPUs (e.g., 4 queues on a 6-CPU system), XDP redirect operations from higher-numbered CPUs fail with errno 6 (ENXIO).
Root Cause
src/i40e_txrx.ci40e_xdp_xmit()queue_index = smp_processor_id()can exceedvsi->num_queue_pairsSolution
Implement modulo-based CPU-to-queue mapping to ensure queue index never exceeds available queues:
i40e_xdp_queue_index()helper function using modulo operationTesting
Test Environment
Test Configuration
Additional Notes
Signed-off-by: Diego diegonix@gmail.com