aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/chelsio/cxgb4
diff options
context:
space:
mode:
authorEric Dumazet <eric.dumazet@gmail.com>2011-10-18 17:00:24 -0400
committerDavid S. Miller <davem@davemloft.net>2011-10-19 03:10:46 -0400
commit9e903e085262ffbf1fc44a17ac06058aca03524a (patch)
tree4acefc97ba38c1733474d25c0b2053b56af97db1 /drivers/net/ethernet/chelsio/cxgb4
parentdd767856a36e00b631d65ebc4bb81b19915532d6 (diff)
net: add skb frag size accessors
To ease skb->truesize sanitization, its better to be able to localize all references to skb frags size. Define accessors : skb_frag_size() to fetch frag size, and skb_frag_size_{set|add|sub}() to manipulate it. Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/chelsio/cxgb4')
-rw-r--r--drivers/net/ethernet/chelsio/cxgb4/sge.c26
1 files changed, 13 insertions, 13 deletions
diff --git a/drivers/net/ethernet/chelsio/cxgb4/sge.c b/drivers/net/ethernet/chelsio/cxgb4/sge.c
index 56adf448b9fe..14f31d3a18d7 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/sge.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/sge.c
@@ -215,8 +215,8 @@ static int map_skb(struct device *dev, const struct sk_buff *skb,
215 end = &si->frags[si->nr_frags]; 215 end = &si->frags[si->nr_frags];
216 216
217 for (fp = si->frags; fp < end; fp++) { 217 for (fp = si->frags; fp < end; fp++) {
218 *++addr = dma_map_page(dev, fp->page, fp->page_offset, fp->size, 218 *++addr = dma_map_page(dev, fp->page, fp->page_offset,
219 DMA_TO_DEVICE); 219 skb_frag_size(fp), DMA_TO_DEVICE);
220 if (dma_mapping_error(dev, *addr)) 220 if (dma_mapping_error(dev, *addr))
221 goto unwind; 221 goto unwind;
222 } 222 }
@@ -224,7 +224,7 @@ static int map_skb(struct device *dev, const struct sk_buff *skb,
224 224
225unwind: 225unwind:
226 while (fp-- > si->frags) 226 while (fp-- > si->frags)
227 dma_unmap_page(dev, *--addr, fp->size, DMA_TO_DEVICE); 227 dma_unmap_page(dev, *--addr, skb_frag_size(fp), DMA_TO_DEVICE);
228 228
229 dma_unmap_single(dev, addr[-1], skb_headlen(skb), DMA_TO_DEVICE); 229 dma_unmap_single(dev, addr[-1], skb_headlen(skb), DMA_TO_DEVICE);
230out_err: 230out_err:
@@ -243,7 +243,7 @@ static void unmap_skb(struct device *dev, const struct sk_buff *skb,
243 si = skb_shinfo(skb); 243 si = skb_shinfo(skb);
244 end = &si->frags[si->nr_frags]; 244 end = &si->frags[si->nr_frags];
245 for (fp = si->frags; fp < end; fp++) 245 for (fp = si->frags; fp < end; fp++)
246 dma_unmap_page(dev, *addr++, fp->size, DMA_TO_DEVICE); 246 dma_unmap_page(dev, *addr++, skb_frag_size(fp), DMA_TO_DEVICE);
247} 247}
248 248
249/** 249/**
@@ -717,7 +717,7 @@ static void write_sgl(const struct sk_buff *skb, struct sge_txq *q,
717 sgl->addr0 = cpu_to_be64(addr[0] + start); 717 sgl->addr0 = cpu_to_be64(addr[0] + start);
718 nfrags++; 718 nfrags++;
719 } else { 719 } else {
720 sgl->len0 = htonl(si->frags[0].size); 720 sgl->len0 = htonl(skb_frag_size(&si->frags[0]));
721 sgl->addr0 = cpu_to_be64(addr[1]); 721 sgl->addr0 = cpu_to_be64(addr[1]);
722 } 722 }
723 723
@@ -732,13 +732,13 @@ static void write_sgl(const struct sk_buff *skb, struct sge_txq *q,
732 to = (u8 *)end > (u8 *)q->stat ? buf : sgl->sge; 732 to = (u8 *)end > (u8 *)q->stat ? buf : sgl->sge;
733 733
734 for (i = (nfrags != si->nr_frags); nfrags >= 2; nfrags -= 2, to++) { 734 for (i = (nfrags != si->nr_frags); nfrags >= 2; nfrags -= 2, to++) {
735 to->len[0] = cpu_to_be32(si->frags[i].size); 735 to->len[0] = cpu_to_be32(skb_frag_size(&si->frags[i]));
736 to->len[1] = cpu_to_be32(si->frags[++i].size); 736 to->len[1] = cpu_to_be32(skb_frag_size(&si->frags[++i]));
737 to->addr[0] = cpu_to_be64(addr[i]); 737 to->addr[0] = cpu_to_be64(addr[i]);
738 to->addr[1] = cpu_to_be64(addr[++i]); 738 to->addr[1] = cpu_to_be64(addr[++i]);
739 } 739 }
740 if (nfrags) { 740 if (nfrags) {
741 to->len[0] = cpu_to_be32(si->frags[i].size); 741 to->len[0] = cpu_to_be32(skb_frag_size(&si->frags[i]));
742 to->len[1] = cpu_to_be32(0); 742 to->len[1] = cpu_to_be32(0);
743 to->addr[0] = cpu_to_be64(addr[i + 1]); 743 to->addr[0] = cpu_to_be64(addr[i + 1]);
744 } 744 }
@@ -1417,7 +1417,7 @@ static inline void copy_frags(struct skb_shared_info *ssi,
1417 /* usually there's just one frag */ 1417 /* usually there's just one frag */
1418 ssi->frags[0].page = gl->frags[0].page; 1418 ssi->frags[0].page = gl->frags[0].page;
1419 ssi->frags[0].page_offset = gl->frags[0].page_offset + offset; 1419 ssi->frags[0].page_offset = gl->frags[0].page_offset + offset;
1420 ssi->frags[0].size = gl->frags[0].size - offset; 1420 skb_frag_size_set(&ssi->frags[0], skb_frag_size(&gl->frags[0]) - offset);
1421 ssi->nr_frags = gl->nfrags; 1421 ssi->nr_frags = gl->nfrags;
1422 n = gl->nfrags - 1; 1422 n = gl->nfrags - 1;
1423 if (n) 1423 if (n)
@@ -1718,8 +1718,8 @@ static int process_responses(struct sge_rspq *q, int budget)
1718 bufsz = get_buf_size(rsd); 1718 bufsz = get_buf_size(rsd);
1719 fp->page = rsd->page; 1719 fp->page = rsd->page;
1720 fp->page_offset = q->offset; 1720 fp->page_offset = q->offset;
1721 fp->size = min(bufsz, len); 1721 skb_frag_size_set(fp, min(bufsz, len));
1722 len -= fp->size; 1722 len -= skb_frag_size(fp);
1723 if (!len) 1723 if (!len)
1724 break; 1724 break;
1725 unmap_rx_buf(q->adap, &rxq->fl); 1725 unmap_rx_buf(q->adap, &rxq->fl);
@@ -1731,7 +1731,7 @@ static int process_responses(struct sge_rspq *q, int budget)
1731 */ 1731 */
1732 dma_sync_single_for_cpu(q->adap->pdev_dev, 1732 dma_sync_single_for_cpu(q->adap->pdev_dev,
1733 get_buf_addr(rsd), 1733 get_buf_addr(rsd),
1734 fp->size, DMA_FROM_DEVICE); 1734 skb_frag_size(fp), DMA_FROM_DEVICE);
1735 1735
1736 si.va = page_address(si.frags[0].page) + 1736 si.va = page_address(si.frags[0].page) +
1737 si.frags[0].page_offset; 1737 si.frags[0].page_offset;
@@ -1740,7 +1740,7 @@ static int process_responses(struct sge_rspq *q, int budget)
1740 si.nfrags = frags + 1; 1740 si.nfrags = frags + 1;
1741 ret = q->handler(q, q->cur_desc, &si); 1741 ret = q->handler(q, q->cur_desc, &si);
1742 if (likely(ret == 0)) 1742 if (likely(ret == 0))
1743 q->offset += ALIGN(fp->size, FL_ALIGN); 1743 q->offset += ALIGN(skb_frag_size(fp), FL_ALIGN);
1744 else 1744 else
1745 restore_rx_bufs(&si, &rxq->fl, frags); 1745 restore_rx_bufs(&si, &rxq->fl, frags);
1746 } else if (likely(rsp_type == RSP_TYPE_CPL)) { 1746 } else if (likely(rsp_type == RSP_TYPE_CPL)) {