aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/tg3.c26
-rw-r--r--drivers/net/tg3.h1
2 files changed, 27 insertions, 0 deletions
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c
index 3f69f1ace267..90b68a229745 100644
--- a/drivers/net/tg3.c
+++ b/drivers/net/tg3.c
@@ -4840,6 +4840,12 @@ static void tg3_tx(struct tg3_napi *tnapi)
4840 4840
4841 ri->skb = NULL; 4841 ri->skb = NULL;
4842 4842
4843 while (ri->fragmented) {
4844 ri->fragmented = false;
4845 sw_idx = NEXT_TX(sw_idx);
4846 ri = &tnapi->tx_buffers[sw_idx];
4847 }
4848
4843 sw_idx = NEXT_TX(sw_idx); 4849 sw_idx = NEXT_TX(sw_idx);
4844 4850
4845 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) { 4851 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
@@ -4851,6 +4857,13 @@ static void tg3_tx(struct tg3_napi *tnapi)
4851 dma_unmap_addr(ri, mapping), 4857 dma_unmap_addr(ri, mapping),
4852 skb_shinfo(skb)->frags[i].size, 4858 skb_shinfo(skb)->frags[i].size,
4853 PCI_DMA_TODEVICE); 4859 PCI_DMA_TODEVICE);
4860
4861 while (ri->fragmented) {
4862 ri->fragmented = false;
4863 sw_idx = NEXT_TX(sw_idx);
4864 ri = &tnapi->tx_buffers[sw_idx];
4865 }
4866
4854 sw_idx = NEXT_TX(sw_idx); 4867 sw_idx = NEXT_TX(sw_idx);
4855 } 4868 }
4856 4869
@@ -5926,6 +5939,13 @@ static void tg3_tx_skb_unmap(struct tg3_napi *tnapi, u32 entry, int last)
5926 dma_unmap_addr(txb, mapping), 5939 dma_unmap_addr(txb, mapping),
5927 skb_headlen(skb), 5940 skb_headlen(skb),
5928 PCI_DMA_TODEVICE); 5941 PCI_DMA_TODEVICE);
5942
5943 while (txb->fragmented) {
5944 txb->fragmented = false;
5945 entry = NEXT_TX(entry);
5946 txb = &tnapi->tx_buffers[entry];
5947 }
5948
5929 for (i = 0; i < last; i++) { 5949 for (i = 0; i < last; i++) {
5930 skb_frag_t *frag = &skb_shinfo(skb)->frags[i]; 5950 skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
5931 5951
@@ -5935,6 +5955,12 @@ static void tg3_tx_skb_unmap(struct tg3_napi *tnapi, u32 entry, int last)
5935 pci_unmap_page(tnapi->tp->pdev, 5955 pci_unmap_page(tnapi->tp->pdev,
5936 dma_unmap_addr(txb, mapping), 5956 dma_unmap_addr(txb, mapping),
5937 frag->size, PCI_DMA_TODEVICE); 5957 frag->size, PCI_DMA_TODEVICE);
5958
5959 while (txb->fragmented) {
5960 txb->fragmented = false;
5961 entry = NEXT_TX(entry);
5962 txb = &tnapi->tx_buffers[entry];
5963 }
5938 } 5964 }
5939} 5965}
5940 5966
diff --git a/drivers/net/tg3.h b/drivers/net/tg3.h
index f6986ca50d80..466dd7add12b 100644
--- a/drivers/net/tg3.h
+++ b/drivers/net/tg3.h
@@ -2655,6 +2655,7 @@ struct ring_info {
2655struct tg3_tx_ring_info { 2655struct tg3_tx_ring_info {
2656 struct sk_buff *skb; 2656 struct sk_buff *skb;
2657 DEFINE_DMA_UNMAP_ADDR(mapping); 2657 DEFINE_DMA_UNMAP_ADDR(mapping);
2658 bool fragmented;
2658}; 2659};
2659 2660
2660struct tg3_link_config { 2661struct tg3_link_config {