ixgbe: add correct exception tracing for XDP
[ Upstream commit 8281356b1cab1cccc71412eb4cf28b99d6bb2c19 ] Add missing exception tracing to XDP when a number of different errors can occur. The support was only partial. Several errors where not logged which would confuse the user quite a lot not knowing where and why the packets disappeared. Fixes:33fdc82f08
("ixgbe: add support for XDP_TX action") Fixes:d0bcacd0a1
("ixgbe: add AF_XDP zero-copy Rx support") Reported-by: Jesper Dangaard Brouer <brouer@redhat.com> Signed-off-by: Magnus Karlsson <magnus.karlsson@intel.com> Tested-by: Vishakha Jambekar <vishakha.jambekar@intel.com> Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
e369db6cde
commit
a1bf16616d
@@ -2218,23 +2218,23 @@ static struct sk_buff *ixgbe_run_xdp(struct ixgbe_adapter *adapter,
|
|||||||
break;
|
break;
|
||||||
case XDP_TX:
|
case XDP_TX:
|
||||||
xdpf = xdp_convert_buff_to_frame(xdp);
|
xdpf = xdp_convert_buff_to_frame(xdp);
|
||||||
if (unlikely(!xdpf)) {
|
if (unlikely(!xdpf))
|
||||||
result = IXGBE_XDP_CONSUMED;
|
goto out_failure;
|
||||||
break;
|
|
||||||
}
|
|
||||||
result = ixgbe_xmit_xdp_ring(adapter, xdpf);
|
result = ixgbe_xmit_xdp_ring(adapter, xdpf);
|
||||||
|
if (result == IXGBE_XDP_CONSUMED)
|
||||||
|
goto out_failure;
|
||||||
break;
|
break;
|
||||||
case XDP_REDIRECT:
|
case XDP_REDIRECT:
|
||||||
err = xdp_do_redirect(adapter->netdev, xdp, xdp_prog);
|
err = xdp_do_redirect(adapter->netdev, xdp, xdp_prog);
|
||||||
if (!err)
|
if (err)
|
||||||
result = IXGBE_XDP_REDIR;
|
goto out_failure;
|
||||||
else
|
result = IXGBE_XDP_REDIR;
|
||||||
result = IXGBE_XDP_CONSUMED;
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
bpf_warn_invalid_xdp_action(act);
|
bpf_warn_invalid_xdp_action(act);
|
||||||
fallthrough;
|
fallthrough;
|
||||||
case XDP_ABORTED:
|
case XDP_ABORTED:
|
||||||
|
out_failure:
|
||||||
trace_xdp_exception(rx_ring->netdev, xdp_prog, act);
|
trace_xdp_exception(rx_ring->netdev, xdp_prog, act);
|
||||||
fallthrough; /* handle aborts by dropping packet */
|
fallthrough; /* handle aborts by dropping packet */
|
||||||
case XDP_DROP:
|
case XDP_DROP:
|
||||||
|
@@ -106,9 +106,10 @@ static int ixgbe_run_xdp_zc(struct ixgbe_adapter *adapter,
|
|||||||
|
|
||||||
if (likely(act == XDP_REDIRECT)) {
|
if (likely(act == XDP_REDIRECT)) {
|
||||||
err = xdp_do_redirect(rx_ring->netdev, xdp, xdp_prog);
|
err = xdp_do_redirect(rx_ring->netdev, xdp, xdp_prog);
|
||||||
result = !err ? IXGBE_XDP_REDIR : IXGBE_XDP_CONSUMED;
|
if (err)
|
||||||
|
goto out_failure;
|
||||||
rcu_read_unlock();
|
rcu_read_unlock();
|
||||||
return result;
|
return IXGBE_XDP_REDIR;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (act) {
|
switch (act) {
|
||||||
@@ -116,16 +117,17 @@ static int ixgbe_run_xdp_zc(struct ixgbe_adapter *adapter,
|
|||||||
break;
|
break;
|
||||||
case XDP_TX:
|
case XDP_TX:
|
||||||
xdpf = xdp_convert_buff_to_frame(xdp);
|
xdpf = xdp_convert_buff_to_frame(xdp);
|
||||||
if (unlikely(!xdpf)) {
|
if (unlikely(!xdpf))
|
||||||
result = IXGBE_XDP_CONSUMED;
|
goto out_failure;
|
||||||
break;
|
|
||||||
}
|
|
||||||
result = ixgbe_xmit_xdp_ring(adapter, xdpf);
|
result = ixgbe_xmit_xdp_ring(adapter, xdpf);
|
||||||
|
if (result == IXGBE_XDP_CONSUMED)
|
||||||
|
goto out_failure;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
bpf_warn_invalid_xdp_action(act);
|
bpf_warn_invalid_xdp_action(act);
|
||||||
fallthrough;
|
fallthrough;
|
||||||
case XDP_ABORTED:
|
case XDP_ABORTED:
|
||||||
|
out_failure:
|
||||||
trace_xdp_exception(rx_ring->netdev, xdp_prog, act);
|
trace_xdp_exception(rx_ring->netdev, xdp_prog, act);
|
||||||
fallthrough; /* handle aborts by dropping packet */
|
fallthrough; /* handle aborts by dropping packet */
|
||||||
case XDP_DROP:
|
case XDP_DROP:
|
||||||
|
Reference in New Issue
Block a user