forked from Minki/linux
tlan: Fix small (< 64 bytes) datagram transmissions
The TLAN chip does not support tranmissions smaller than 64
bytes. Smaller transfers need to be padded up to that size. This was
broken by commit id 41873e9aff
("tlan:
get rid of padding buffer").
<URL:http://bugzilla.kernel.org/show_bug.cgi?id=11754>
Signed-off-by: Sakari Ailus <sakari.ailus@iki.fi>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
092cab7e2c
commit
8953f12827
@ -1098,6 +1098,7 @@ static int TLan_StartTx( struct sk_buff *skb, struct net_device *dev )
|
||||
dma_addr_t tail_list_phys;
|
||||
u8 *tail_buffer;
|
||||
unsigned long flags;
|
||||
unsigned int txlen;
|
||||
|
||||
if ( ! priv->phyOnline ) {
|
||||
TLAN_DBG( TLAN_DEBUG_TX, "TRANSMIT: %s PHY is not ready\n",
|
||||
@ -1108,6 +1109,7 @@ static int TLan_StartTx( struct sk_buff *skb, struct net_device *dev )
|
||||
|
||||
if (skb_padto(skb, TLAN_MIN_FRAME_SIZE))
|
||||
return 0;
|
||||
txlen = max(skb->len, (unsigned int)TLAN_MIN_FRAME_SIZE);
|
||||
|
||||
tail_list = priv->txList + priv->txTail;
|
||||
tail_list_phys = priv->txListDMA + sizeof(TLanList) * priv->txTail;
|
||||
@ -1125,16 +1127,16 @@ static int TLan_StartTx( struct sk_buff *skb, struct net_device *dev )
|
||||
|
||||
if ( bbuf ) {
|
||||
tail_buffer = priv->txBuffer + ( priv->txTail * TLAN_MAX_FRAME_SIZE );
|
||||
skb_copy_from_linear_data(skb, tail_buffer, skb->len);
|
||||
skb_copy_from_linear_data(skb, tail_buffer, txlen);
|
||||
} else {
|
||||
tail_list->buffer[0].address = pci_map_single(priv->pciDev,
|
||||
skb->data, skb->len,
|
||||
skb->data, txlen,
|
||||
PCI_DMA_TODEVICE);
|
||||
TLan_StoreSKB(tail_list, skb);
|
||||
}
|
||||
|
||||
tail_list->frameSize = (u16) skb->len;
|
||||
tail_list->buffer[0].count = TLAN_LAST_BUFFER | (u32) skb->len;
|
||||
tail_list->frameSize = (u16) txlen;
|
||||
tail_list->buffer[0].count = TLAN_LAST_BUFFER | (u32) txlen;
|
||||
tail_list->buffer[1].count = 0;
|
||||
tail_list->buffer[1].address = 0;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user