Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

sfc: trace_xdp_exception on XDP failure

The sfc driver can drop packets processed with XDP, notably when running
out of buffer space on XDP_TX, or returning an unknown XDP action.
This increments the rx_xdp_bad_drops ethtool counter.

Call trace_xdp_exception everywhere rx_xdp_bad_drops is incremented,
except for fragmented RX packets as the XDP program hasn't run yet.
This allows it to easily be monitored from userspace.

This mirrors the behavior of other drivers.

Signed-off-by: Arthur Fabre <afabre@cloudflare.com>
Acked-by: Edward Cree <ecree@solarflare.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Arthur Fabre and committed by
David S. Miller
9440a875 1e86606b

+3
+3
drivers/net/ethernet/sfc/rx.c
··· 724 724 netif_err(efx, rx_err, efx->net_dev, 725 725 "XDP TX failed (%d)\n", err); 726 726 channel->n_rx_xdp_bad_drops++; 727 + trace_xdp_exception(efx->net_dev, xdp_prog, xdp_act); 727 728 } else { 728 729 channel->n_rx_xdp_tx++; 729 730 } ··· 738 737 netif_err(efx, rx_err, efx->net_dev, 739 738 "XDP redirect failed (%d)\n", err); 740 739 channel->n_rx_xdp_bad_drops++; 740 + trace_xdp_exception(efx->net_dev, xdp_prog, xdp_act); 741 741 } else { 742 742 channel->n_rx_xdp_redirect++; 743 743 } ··· 748 746 bpf_warn_invalid_xdp_action(xdp_act); 749 747 efx_free_rx_buffers(rx_queue, rx_buf, 1); 750 748 channel->n_rx_xdp_bad_drops++; 749 + trace_xdp_exception(efx->net_dev, xdp_prog, xdp_act); 751 750 break; 752 751 753 752 case XDP_ABORTED: