RE: [v6,net-next,06/15] net: fec: add fec_enet_rx_queue_xdp() for XDP path

From: Wei Fang

Date: Thu Feb 05 2026 - 01:16:45 EST


> > +static int fec_enet_rx_queue_xdp(struct fec_enet_private *fep, int queue,
> > + int budget, struct bpf_prog *prog)
> > +{
>
> [ ... ]
>
> > + switch (act) {
> > + case XDP_PASS:
> > + rxq->stats[RX_XDP_PASS]++;
> > + /* The packet length includes FCS, but we don't want to
> > + * include that when passing upstream as it messes up
> > + * bridging applications.
> > + */
> > + skb = fec_build_skb(fep, rxq, bdp, page, pkt_len);
> > + if (!skb)
> > + trace_xdp_exception(ndev, prog, XDP_PASS);
> > + else
> > + napi_gro_receive(&fep->napi, skb);
> > +
> > + break;
> > + case XDP_REDIRECT:
> > + rxq->stats[RX_XDP_REDIRECT]++;
> > + err = xdp_do_redirect(ndev, &xdp, prog);
> > + if (unlikely(err)) {
> > + fec_xdp_drop(rxq, &xdp, sync);
> > + trace_xdp_exception(ndev, prog, XDP_REDIRECT);
> > + } else {
> > + xdp_res |= FEC_ENET_XDP_REDIR;
> > + }
> > + break;
> > + case XDP_TX:
> > + rxq->stats[RX_XDP_TX]++;
> > + err = fec_enet_xdp_tx_xmit(fep, cpu, &xdp, sync);
> > + if (unlikely(err)) {
> > + rxq->stats[RX_XDP_TX_ERRORS]++;
> > + fec_xdp_drop(rxq, &xdp, sync);
> > + trace_xdp_exception(ndev, prog, XDP_TX);
> > + }
> > + break;
> > + default:
> > + bpf_warn_invalid_xdp_action(ndev, prog, act);
> > + fallthrough;
> > + case XDP_ABORTED:
> > + /* handle aborts by dropping packet */
> > + fallthrough;
> > + case XDP_DROP:
> > + rxq->stats[RX_XDP_DROP]++;
> > + fec_xdp_drop(rxq, &xdp, sync);
> > + break;
>
> Are XDP_ABORTED and invalid XDP actions being traced properly? In the

I will fix it, thanks.