mirror of https://gitee.com/openkylin/linux.git
smsc75xx: fix jumbo frame support
This patch enables RX of jumbo frames for LAN7500. Previously the driver would transmit jumbo frames succesfully but would drop received jumbo frames (incrementing the interface errors count). With this patch applied the device can succesfully receive jumbo frames up to MTU 9000 (9014 bytes on the wire including ethernet header). Signed-off-by: Steve Glendinning <steve.glendinning@shawell.net> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
50eab0503a
commit
4c51e53689
|
@ -914,8 +914,12 @@ static int smsc75xx_set_rx_max_frame_length(struct usbnet *dev, int size)
|
|||
static int smsc75xx_change_mtu(struct net_device *netdev, int new_mtu)
|
||||
{
|
||||
struct usbnet *dev = netdev_priv(netdev);
|
||||
int ret;
|
||||
|
||||
int ret = smsc75xx_set_rx_max_frame_length(dev, new_mtu);
|
||||
if (new_mtu > MAX_SINGLE_PACKET_SIZE)
|
||||
return -EINVAL;
|
||||
|
||||
ret = smsc75xx_set_rx_max_frame_length(dev, new_mtu + ETH_HLEN);
|
||||
if (ret < 0) {
|
||||
netdev_warn(dev->net, "Failed to set mac rx frame length\n");
|
||||
return ret;
|
||||
|
@ -1324,7 +1328,7 @@ static int smsc75xx_reset(struct usbnet *dev)
|
|||
|
||||
netif_dbg(dev, ifup, dev->net, "FCT_TX_CTL set to 0x%08x\n", buf);
|
||||
|
||||
ret = smsc75xx_set_rx_max_frame_length(dev, 1514);
|
||||
ret = smsc75xx_set_rx_max_frame_length(dev, dev->net->mtu + ETH_HLEN);
|
||||
if (ret < 0) {
|
||||
netdev_warn(dev->net, "Failed to set max rx frame length\n");
|
||||
return ret;
|
||||
|
@ -2134,8 +2138,8 @@ static int smsc75xx_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
|
|||
else if (rx_cmd_a & (RX_CMD_A_LONG | RX_CMD_A_RUNT))
|
||||
dev->net->stats.rx_frame_errors++;
|
||||
} else {
|
||||
/* ETH_FRAME_LEN + 4(CRC) + 2(COE) + 4(Vlan) */
|
||||
if (unlikely(size > (ETH_FRAME_LEN + 12))) {
|
||||
/* MAX_SINGLE_PACKET_SIZE + 4(CRC) + 2(COE) + 4(Vlan) */
|
||||
if (unlikely(size > (MAX_SINGLE_PACKET_SIZE + ETH_HLEN + 12))) {
|
||||
netif_dbg(dev, rx_err, dev->net,
|
||||
"size err rx_cmd_a=0x%08x\n",
|
||||
rx_cmd_a);
|
||||
|
|
Loading…
Reference in New Issue