diff options
author | Eric Dumazet <eric.dumazet@gmail.com> | 2011-10-18 17:00:24 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-10-19 03:10:46 -0400 |
commit | 9e903e085262ffbf1fc44a17ac06058aca03524a (patch) | |
tree | 4acefc97ba38c1733474d25c0b2053b56af97db1 /drivers/net/ethernet/chelsio/cxgb4 | |
parent | dd767856a36e00b631d65ebc4bb81b19915532d6 (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.c | 26 |
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 | ||
225 | unwind: | 225 | unwind: |
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); |
230 | out_err: | 230 | out_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)) { |