aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/ethernet/freescale/dpaa/dpaa_eth.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c b/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c
index bdf57feecfd7..9bd0ff03f389 100644
--- a/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c
+++ b/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c
@@ -2055,19 +2055,23 @@ static int dpaa_start_xmit(struct sk_buff *skb, struct net_device *net_dev)
2055 /* MAX_SKB_FRAGS is equal or larger than our dpaa_SGT_MAX_ENTRIES; 2055 /* MAX_SKB_FRAGS is equal or larger than our dpaa_SGT_MAX_ENTRIES;
2056 * make sure we don't feed FMan with more fragments than it supports. 2056 * make sure we don't feed FMan with more fragments than it supports.
2057 */ 2057 */
2058 if (nonlinear && 2058 if (unlikely(nonlinear &&
2059 likely(skb_shinfo(skb)->nr_frags < DPAA_SGT_MAX_ENTRIES)) { 2059 (skb_shinfo(skb)->nr_frags >= DPAA_SGT_MAX_ENTRIES))) {
2060 /* Just create a S/G fd based on the skb */
2061 err = skb_to_sg_fd(priv, skb, &fd);
2062 percpu_priv->tx_frag_skbuffs++;
2063 } else {
2064 /* If the egress skb contains more fragments than we support 2060 /* If the egress skb contains more fragments than we support
2065 * we have no choice but to linearize it ourselves. 2061 * we have no choice but to linearize it ourselves.
2066 */ 2062 */
2067 if (unlikely(nonlinear) && __skb_linearize(skb)) 2063 if (__skb_linearize(skb))
2068 goto enomem; 2064 goto enomem;
2069 2065
2070 /* Finally, create a contig FD from this skb */ 2066 nonlinear = skb_is_nonlinear(skb);
2067 }
2068
2069 if (nonlinear) {
2070 /* Just create a S/G fd based on the skb */
2071 err = skb_to_sg_fd(priv, skb, &fd);
2072 percpu_priv->tx_frag_skbuffs++;
2073 } else {
2074 /* Create a contig FD from this skb */
2071 err = skb_to_contig_fd(priv, skb, &fd, &offset); 2075 err = skb_to_contig_fd(priv, skb, &fd, &offset);
2072 } 2076 }
2073 if (unlikely(err < 0)) 2077 if (unlikely(err < 0))