smsx95xx: fix crimes against truesize
authorSteve Glendinning <steve.glendinning@smsc.com>
Thu, 19 Feb 2015 18:47:12 +0000 (18:47 +0000)
committerpopcornmix <popcornmix@gmail.com>
Wed, 27 Jan 2021 19:12:44 +0000 (19:12 +0000)
smsc95xx is adjusting truesize when it shouldn't, and following a recent patch from Eric this is now triggering warnings.

This patch stops smsc95xx from changing truesize.

Signed-off-by: Steve Glendinning <steve.glendinning@smsc.com>
drivers/net/usb/smsc95xx.c

index ea0d5f0..a7591ce 100644 (file)
@@ -67,6 +67,10 @@ static bool turbo_mode = true;
 module_param(turbo_mode, bool, 0644);
 MODULE_PARM_DESC(turbo_mode, "Enable multiple frames per Rx transaction");
 
+static bool truesize_mode = false;
+module_param(truesize_mode, bool, 0644);
+MODULE_PARM_DESC(truesize_mode, "Report larger truesize value");
+
 static int __must_check __smsc95xx_read_reg(struct usbnet *dev, u32 index,
                                            u32 *data, int in_pm)
 {
@@ -1827,7 +1831,8 @@ static int smsc95xx_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
                                if (dev->net->features & NETIF_F_RXCSUM)
                                        smsc95xx_rx_csum_offload(skb);
                                skb_trim(skb, skb->len - 4); /* remove fcs */
-                               skb->truesize = size + sizeof(struct sk_buff);
+                               if (truesize_mode)
+                                       skb->truesize = size + sizeof(struct sk_buff);
 
                                return 1;
                        }
@@ -1845,7 +1850,8 @@ static int smsc95xx_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
                        if (dev->net->features & NETIF_F_RXCSUM)
                                smsc95xx_rx_csum_offload(ax_skb);
                        skb_trim(ax_skb, ax_skb->len - 4); /* remove fcs */
-                       ax_skb->truesize = size + sizeof(struct sk_buff);
+                       if (truesize_mode)
+                               ax_skb->truesize = size + sizeof(struct sk_buff);
 
                        usbnet_skb_return(dev, ax_skb);
                }