mirror of https://gitee.com/openkylin/linux.git
asix: Fix tx transfer padding for full-speed USB
The asix.c USB Ethernet driver avoids ending a tx transfer with a zero- length packet by appending a four-byte padding to transfers whose length is a multiple of maxpacket. However, the hard-coded 512 byte maxpacket length is valid for high-speed USB only; full-speed USB uses 64 byte packets. Signed-off-by: Ingo van Lil <inguin@gmx.de> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
1ab8be4a14
commit
2a5809499e
|
@ -355,7 +355,7 @@ static struct sk_buff *asix_tx_fixup(struct usbnet *dev, struct sk_buff *skb,
|
|||
u32 packet_len;
|
||||
u32 padbytes = 0xffff0000;
|
||||
|
||||
padlen = ((skb->len + 4) % 512) ? 0 : 4;
|
||||
padlen = ((skb->len + 4) & (dev->maxpacket - 1)) ? 0 : 4;
|
||||
|
||||
if ((!skb_cloned(skb)) &&
|
||||
((headroom + tailroom) >= (4 + padlen))) {
|
||||
|
@ -377,7 +377,7 @@ static struct sk_buff *asix_tx_fixup(struct usbnet *dev, struct sk_buff *skb,
|
|||
cpu_to_le32s(&packet_len);
|
||||
skb_copy_to_linear_data(skb, &packet_len, sizeof(packet_len));
|
||||
|
||||
if ((skb->len % 512) == 0) {
|
||||
if (padlen) {
|
||||
cpu_to_le32s(&padbytes);
|
||||
memcpy(skb_tail_pointer(skb), &padbytes, sizeof(padbytes));
|
||||
skb_put(skb, sizeof(padbytes));
|
||||
|
|
Loading…
Reference in New Issue