提交 5dc3e196 编写于 作者: I Ian Campbell 提交者: David S. Miller

myri10ge: convert to SKB paged frag API.

Signed-off-by: NIan Campbell <ian.campbell@citrix.com>
Cc: Jon Mason <mason@myri.com>
Cc: Andrew Gallatin <gallatin@myri.com>
Cc: netdev@vger.kernel.org
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 6caaf90b
...@@ -1342,7 +1342,7 @@ myri10ge_rx_done(struct myri10ge_slice_state *ss, int len, __wsum csum, ...@@ -1342,7 +1342,7 @@ myri10ge_rx_done(struct myri10ge_slice_state *ss, int len, __wsum csum,
/* Fill skb_frag_struct(s) with data from our receive */ /* Fill skb_frag_struct(s) with data from our receive */
for (i = 0, remainder = len; remainder > 0; i++) { for (i = 0, remainder = len; remainder > 0; i++) {
myri10ge_unmap_rx_page(pdev, &rx->info[idx], bytes); myri10ge_unmap_rx_page(pdev, &rx->info[idx], bytes);
rx_frags[i].page = rx->info[idx].page; __skb_frag_set_page(&rx_frags[i], rx->info[idx].page);
rx_frags[i].page_offset = rx->info[idx].page_offset; rx_frags[i].page_offset = rx->info[idx].page_offset;
if (remainder < MYRI10GE_ALLOC_SIZE) if (remainder < MYRI10GE_ALLOC_SIZE)
rx_frags[i].size = remainder; rx_frags[i].size = remainder;
...@@ -1375,7 +1375,7 @@ myri10ge_rx_done(struct myri10ge_slice_state *ss, int len, __wsum csum, ...@@ -1375,7 +1375,7 @@ myri10ge_rx_done(struct myri10ge_slice_state *ss, int len, __wsum csum,
ss->stats.rx_dropped++; ss->stats.rx_dropped++;
do { do {
i--; i--;
put_page(rx_frags[i].page); __skb_frag_unref(&rx_frags[i]);
} while (i != 0); } while (i != 0);
return 0; return 0;
} }
...@@ -1383,7 +1383,7 @@ myri10ge_rx_done(struct myri10ge_slice_state *ss, int len, __wsum csum, ...@@ -1383,7 +1383,7 @@ myri10ge_rx_done(struct myri10ge_slice_state *ss, int len, __wsum csum,
/* Attach the pages to the skb, and trim off any padding */ /* Attach the pages to the skb, and trim off any padding */
myri10ge_rx_skb_build(skb, va, rx_frags, len, hlen); myri10ge_rx_skb_build(skb, va, rx_frags, len, hlen);
if (skb_shinfo(skb)->frags[0].size <= 0) { if (skb_shinfo(skb)->frags[0].size <= 0) {
put_page(skb_shinfo(skb)->frags[0].page); skb_frag_unref(skb, 0);
skb_shinfo(skb)->nr_frags = 0; skb_shinfo(skb)->nr_frags = 0;
} }
skb->protocol = eth_type_trans(skb, dev); skb->protocol = eth_type_trans(skb, dev);
...@@ -2284,7 +2284,7 @@ myri10ge_get_frag_header(struct skb_frag_struct *frag, void **mac_hdr, ...@@ -2284,7 +2284,7 @@ myri10ge_get_frag_header(struct skb_frag_struct *frag, void **mac_hdr,
struct ethhdr *eh; struct ethhdr *eh;
struct vlan_ethhdr *veh; struct vlan_ethhdr *veh;
struct iphdr *iph; struct iphdr *iph;
u8 *va = page_address(frag->page) + frag->page_offset; u8 *va = skb_frag_address(frag);
unsigned long ll_hlen; unsigned long ll_hlen;
/* passed opaque through lro_receive_frags() */ /* passed opaque through lro_receive_frags() */
__wsum csum = (__force __wsum) (unsigned long)priv; __wsum csum = (__force __wsum) (unsigned long)priv;
...@@ -2927,8 +2927,8 @@ static netdev_tx_t myri10ge_xmit(struct sk_buff *skb, ...@@ -2927,8 +2927,8 @@ static netdev_tx_t myri10ge_xmit(struct sk_buff *skb,
frag = &skb_shinfo(skb)->frags[frag_idx]; frag = &skb_shinfo(skb)->frags[frag_idx];
frag_idx++; frag_idx++;
len = frag->size; len = frag->size;
bus = pci_map_page(mgp->pdev, frag->page, frag->page_offset, bus = skb_frag_dma_map(&mgp->pdev->dev, frag, 0, len,
len, PCI_DMA_TODEVICE); PCI_DMA_TODEVICE);
dma_unmap_addr_set(&tx->info[idx], bus, bus); dma_unmap_addr_set(&tx->info[idx], bus, bus);
dma_unmap_len_set(&tx->info[idx], len, len); dma_unmap_len_set(&tx->info[idx], len, len);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册