Commit c030af87 authored by David S. Miller's avatar David S. Miller

Merge branch 'systemport-padding-and-TSB-insertion'

Florian Fainelli says:

====================
net: systemport: Fix padding vs. TSB insertion

This patch series fixes how we pad the packets submitted to the SYSTEMPORT
adapter, and how the transmit status block (prepended 8 bytes) fits in the
picture. The first patch is not technically a bug fix, but is required for the
second path to be applied and to greatly simplify the skb length calculation.
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents cd7aeb1f 38e5a855
...@@ -1012,15 +1012,6 @@ static netdev_tx_t bcm_sysport_xmit(struct sk_buff *skb, ...@@ -1012,15 +1012,6 @@ static netdev_tx_t bcm_sysport_xmit(struct sk_buff *skb,
goto out; goto out;
} }
/* Insert TSB and checksum infos */
if (priv->tsb_en) {
skb = bcm_sysport_insert_tsb(skb, dev);
if (!skb) {
ret = NETDEV_TX_OK;
goto out;
}
}
/* The Ethernet switch we are interfaced with needs packets to be at /* The Ethernet switch we are interfaced with needs packets to be at
* least 64 bytes (including FCS) otherwise they will be discarded when * least 64 bytes (including FCS) otherwise they will be discarded when
* they enter the switch port logic. When Broadcom tags are enabled, we * they enter the switch port logic. When Broadcom tags are enabled, we
...@@ -1028,13 +1019,21 @@ static netdev_tx_t bcm_sysport_xmit(struct sk_buff *skb, ...@@ -1028,13 +1019,21 @@ static netdev_tx_t bcm_sysport_xmit(struct sk_buff *skb,
* (including FCS and tag) because the length verification is done after * (including FCS and tag) because the length verification is done after
* the Broadcom tag is stripped off the ingress packet. * the Broadcom tag is stripped off the ingress packet.
*/ */
if (skb_padto(skb, ETH_ZLEN + ENET_BRCM_TAG_LEN)) { if (skb_put_padto(skb, ETH_ZLEN + ENET_BRCM_TAG_LEN)) {
ret = NETDEV_TX_OK; ret = NETDEV_TX_OK;
goto out; goto out;
} }
skb_len = skb->len < ETH_ZLEN + ENET_BRCM_TAG_LEN ? /* Insert TSB and checksum infos */
ETH_ZLEN + ENET_BRCM_TAG_LEN : skb->len; if (priv->tsb_en) {
skb = bcm_sysport_insert_tsb(skb, dev);
if (!skb) {
ret = NETDEV_TX_OK;
goto out;
}
}
skb_len = skb->len;
mapping = dma_map_single(kdev, skb->data, skb_len, DMA_TO_DEVICE); mapping = dma_map_single(kdev, skb->data, skb_len, DMA_TO_DEVICE);
if (dma_mapping_error(kdev, mapping)) { if (dma_mapping_error(kdev, mapping)) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment