|
@@ -4840,6 +4840,12 @@ static void tg3_tx(struct tg3_napi *tnapi)
|
|
|
|
|
|
ri->skb = NULL;
|
|
|
|
|
|
+ while (ri->fragmented) {
|
|
|
+ ri->fragmented = false;
|
|
|
+ sw_idx = NEXT_TX(sw_idx);
|
|
|
+ ri = &tnapi->tx_buffers[sw_idx];
|
|
|
+ }
|
|
|
+
|
|
|
sw_idx = NEXT_TX(sw_idx);
|
|
|
|
|
|
for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
|
|
@@ -4851,6 +4857,13 @@ static void tg3_tx(struct tg3_napi *tnapi)
|
|
|
dma_unmap_addr(ri, mapping),
|
|
|
skb_shinfo(skb)->frags[i].size,
|
|
|
PCI_DMA_TODEVICE);
|
|
|
+
|
|
|
+ while (ri->fragmented) {
|
|
|
+ ri->fragmented = false;
|
|
|
+ sw_idx = NEXT_TX(sw_idx);
|
|
|
+ ri = &tnapi->tx_buffers[sw_idx];
|
|
|
+ }
|
|
|
+
|
|
|
sw_idx = NEXT_TX(sw_idx);
|
|
|
}
|
|
|
|
|
@@ -5926,6 +5939,13 @@ static void tg3_tx_skb_unmap(struct tg3_napi *tnapi, u32 entry, int last)
|
|
|
dma_unmap_addr(txb, mapping),
|
|
|
skb_headlen(skb),
|
|
|
PCI_DMA_TODEVICE);
|
|
|
+
|
|
|
+ while (txb->fragmented) {
|
|
|
+ txb->fragmented = false;
|
|
|
+ entry = NEXT_TX(entry);
|
|
|
+ txb = &tnapi->tx_buffers[entry];
|
|
|
+ }
|
|
|
+
|
|
|
for (i = 0; i < last; i++) {
|
|
|
skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
|
|
|
|
|
@@ -5935,6 +5955,12 @@ static void tg3_tx_skb_unmap(struct tg3_napi *tnapi, u32 entry, int last)
|
|
|
pci_unmap_page(tnapi->tp->pdev,
|
|
|
dma_unmap_addr(txb, mapping),
|
|
|
frag->size, PCI_DMA_TODEVICE);
|
|
|
+
|
|
|
+ while (txb->fragmented) {
|
|
|
+ txb->fragmented = false;
|
|
|
+ entry = NEXT_TX(entry);
|
|
|
+ txb = &tnapi->tx_buffers[entry];
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|