From: Claudiu Manoil Date: Tue, 23 Feb 2016 09:48:38 +0000 (+0200) Subject: gianfar: Use skb_frag_t pointers inside xmit() X-Git-Tag: v4.9.8~2476^2~193^2~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=42f397adfc0a062a17119c08c82ed710b143a006;p=platform%2Fkernel%2Flinux-rpi3.git gianfar: Use skb_frag_t pointers inside xmit() Signed-off-by: Claudiu Manoil Signed-off-by: David S. Miller --- diff --git a/drivers/net/ethernet/freescale/gianfar.c b/drivers/net/ethernet/freescale/gianfar.c index cb80dba8..7b16ce6 100644 --- a/drivers/net/ethernet/freescale/gianfar.c +++ b/drivers/net/ethernet/freescale/gianfar.c @@ -2322,6 +2322,7 @@ static int gfar_start_xmit(struct sk_buff *skb, struct net_device *dev) struct txfcb *fcb = NULL; struct txbd8 *txbdp, *txbdp_start, *base, *txbdp_tstamp = NULL; u32 lstatus; + skb_frag_t *frag; int i, rq = 0; int do_tstamp, do_csum, do_vlan; u32 bufaddr; @@ -2448,25 +2449,24 @@ static int gfar_start_xmit(struct sk_buff *skb, struct net_device *dev) u32 lstatus_start = lstatus; /* Place the fragment addresses and lengths into the TxBDs */ - for (i = 0; i < nr_frags; i++) { - unsigned int frag_len; + frag = &skb_shinfo(skb)->frags[0]; + for (i = 0; i < nr_frags; i++, frag++) { + unsigned int size; + /* Point at the next BD, wrapping as needed */ txbdp = next_txbd(txbdp, base, tx_queue->tx_ring_size); - frag_len = skb_shinfo(skb)->frags[i].size; + size = skb_frag_size(frag); - lstatus = be32_to_cpu(txbdp->lstatus) | frag_len | + lstatus = be32_to_cpu(txbdp->lstatus) | size | BD_LFLAG(TXBD_READY); /* Handle the last BD specially */ if (i == nr_frags - 1) lstatus |= BD_LFLAG(TXBD_LAST | TXBD_INTERRUPT); - bufaddr = skb_frag_dma_map(priv->dev, - &skb_shinfo(skb)->frags[i], - 0, - frag_len, - DMA_TO_DEVICE); + bufaddr = skb_frag_dma_map(priv->dev, frag, 0, + size, DMA_TO_DEVICE); if (unlikely(dma_mapping_error(priv->dev, bufaddr))) goto dma_map_err;