Adds support for jumbo frame selftest. Works only for mtu size greater than 1500. Signed-off-by: Raju Rangoju --- drivers/net/ethernet/amd/xgbe/xgbe-selftest.c | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-selftest.c b/drivers/net/ethernet/amd/xgbe/xgbe-selftest.c index 6175ea899f68..ff2c8a3b6e8a 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe-selftest.c +++ b/drivers/net/ethernet/amd/xgbe/xgbe-selftest.c @@ -199,10 +199,18 @@ static int xgbe_test_loopback_validate(struct sk_buff *skb, struct iphdr *ih; struct tcphdr *th; struct udphdr *uh; + int eat; skb = skb_unshare(skb, GFP_ATOMIC); if (!skb) - goto out; + return -1; + + eat = (skb->tail + skb->data_len) - skb->end; + if (eat > 0 && skb_shared(skb)) { + skb = skb_share_check(skb, GFP_ATOMIC); + if (!skb) + return -1; + } if (skb_linearize(skb)) goto out; @@ -371,6 +379,17 @@ static int xgbe_test_sph(struct xgbe_prv_data *pdata) return 0; } +static int xgbe_test_jumbo(struct xgbe_prv_data *pdata) +{ + struct xgbe_pkt_attrs attr = {}; + int size = pdata->rx_buf_size; + + attr.dst = pdata->netdev->dev_addr; + attr.max_size = size - ETH_FCS_LEN; + + return __xgbe_test_loopback(pdata, &attr); +} + static const struct xgbe_test xgbe_selftests[] = { { .name = "MAC Loopback ", @@ -384,8 +403,11 @@ static const struct xgbe_test xgbe_selftests[] = { .name = "Split Header ", .lb = XGBE_LOOPBACK_PHY, .fn = xgbe_test_sph, + }, { + .name = "Jumbo Frame ", + .lb = XGBE_LOOPBACK_PHY, + .fn = xgbe_test_jumbo, }, - }; void xgbe_selftest_run(struct net_device *dev, -- 2.34.1