Updated from Linux LTS 3.10.25 to 3.10.26
This commit is contained in:
@@ -364,7 +364,12 @@ static int dm9601_bind(struct usbnet *dev, struct usb_interface *intf)
|
||||
dev->net->ethtool_ops = &dm9601_ethtool_ops;
|
||||
dev->net->hard_header_len += DM_TX_OVERHEAD;
|
||||
dev->hard_mtu = dev->net->mtu + dev->net->hard_header_len;
|
||||
dev->rx_urb_size = dev->net->mtu + ETH_HLEN + DM_RX_OVERHEAD;
|
||||
|
||||
/* dm9620/21a require room for 4 byte padding, even in dm9601
|
||||
* mode, so we need +1 to be able to receive full size
|
||||
* ethernet frames.
|
||||
*/
|
||||
dev->rx_urb_size = dev->net->mtu + ETH_HLEN + DM_RX_OVERHEAD + 1;
|
||||
|
||||
dev->mii.dev = dev->net;
|
||||
dev->mii.mdio_read = dm9601_mdio_read;
|
||||
@@ -468,7 +473,7 @@ static int dm9601_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
|
||||
static struct sk_buff *dm9601_tx_fixup(struct usbnet *dev, struct sk_buff *skb,
|
||||
gfp_t flags)
|
||||
{
|
||||
int len;
|
||||
int len, pad;
|
||||
|
||||
/* format:
|
||||
b1: packet length low
|
||||
@@ -476,12 +481,23 @@ static struct sk_buff *dm9601_tx_fixup(struct usbnet *dev, struct sk_buff *skb,
|
||||
b3..n: packet data
|
||||
*/
|
||||
|
||||
len = skb->len;
|
||||
len = skb->len + DM_TX_OVERHEAD;
|
||||
|
||||
if (skb_headroom(skb) < DM_TX_OVERHEAD) {
|
||||
/* workaround for dm962x errata with tx fifo getting out of
|
||||
* sync if a USB bulk transfer retry happens right after a
|
||||
* packet with odd / maxpacket length by adding up to 3 bytes
|
||||
* padding.
|
||||
*/
|
||||
while ((len & 1) || !(len % dev->maxpacket))
|
||||
len++;
|
||||
|
||||
len -= DM_TX_OVERHEAD; /* hw header doesn't count as part of length */
|
||||
pad = len - skb->len;
|
||||
|
||||
if (skb_headroom(skb) < DM_TX_OVERHEAD || skb_tailroom(skb) < pad) {
|
||||
struct sk_buff *skb2;
|
||||
|
||||
skb2 = skb_copy_expand(skb, DM_TX_OVERHEAD, 0, flags);
|
||||
skb2 = skb_copy_expand(skb, DM_TX_OVERHEAD, pad, flags);
|
||||
dev_kfree_skb_any(skb);
|
||||
skb = skb2;
|
||||
if (!skb)
|
||||
@@ -490,10 +506,10 @@ static struct sk_buff *dm9601_tx_fixup(struct usbnet *dev, struct sk_buff *skb,
|
||||
|
||||
__skb_push(skb, DM_TX_OVERHEAD);
|
||||
|
||||
/* usbnet adds padding if length is a multiple of packet size
|
||||
if so, adjust length value in header */
|
||||
if ((skb->len % dev->maxpacket) == 0)
|
||||
len++;
|
||||
if (pad) {
|
||||
memset(skb->data + skb->len, 0, pad);
|
||||
__skb_put(skb, pad);
|
||||
}
|
||||
|
||||
skb->data[0] = len;
|
||||
skb->data[1] = len >> 8;
|
||||
|
||||
Reference in New Issue
Block a user