bnxt: XDP multibuffer enablement
authorAndy Gospodarek <gospo@broadcom.com>
Fri, 8 Apr 2022 07:59:06 +0000 (03:59 -0400)
committerDavid S. Miller <davem@davemloft.net>
Fri, 8 Apr 2022 10:52:48 +0000 (11:52 +0100)
Allow aggregation buffers to be in place in the receive path and
allow XDP programs to be attached when using a larger than 4k MTU.

v3: Add a check to sure XDP program supports multipage packets.

Signed-off-by: Andy Gospodarek <gospo@broadcom.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/broadcom/bnxt/bnxt.c
drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c

index 25d74c9..0489c1c 100644 (file)
@@ -1939,8 +1939,7 @@ static int bnxt_rx_pkt(struct bnxt *bp, struct bnxt_cp_ring_info *cpr,
                xdp_active = true;
        }
 
-       /* skip running XDP prog if there are aggregation bufs */
-       if (!agg_bufs && xdp_active) {
+       if (xdp_active) {
                if (bnxt_rx_xdp(bp, rxr, cons, xdp, data, &len, event)) {
                        rc = 1;
                        goto next_rx;
index c2905f0..f02fe90 100644 (file)
@@ -387,8 +387,9 @@ static int bnxt_xdp_set(struct bnxt *bp, struct bpf_prog *prog)
        int tx_xdp = 0, rc, tc;
        struct bpf_prog *old;
 
-       if (prog && bp->dev->mtu > BNXT_MAX_PAGE_MODE_MTU) {
-               netdev_warn(dev, "MTU %d larger than largest XDP supported MTU %d.\n",
+       if (prog && !prog->aux->xdp_has_frags &&
+           bp->dev->mtu > BNXT_MAX_PAGE_MODE_MTU) {
+               netdev_warn(dev, "MTU %d larger than %d without XDP frag support.\n",
                            bp->dev->mtu, BNXT_MAX_PAGE_MODE_MTU);
                return -EOPNOTSUPP;
        }