diff options
Diffstat (limited to 'drivers/net/ethernet/intel/e1000/e1000_main.c')
| -rw-r--r-- | drivers/net/ethernet/intel/e1000/e1000_main.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/drivers/net/ethernet/intel/e1000/e1000_main.c b/drivers/net/ethernet/intel/e1000/e1000_main.c index 4a32c15524c9..27f586afcc34 100644 --- a/drivers/net/ethernet/intel/e1000/e1000_main.c +++ b/drivers/net/ethernet/intel/e1000/e1000_main.c | |||
| @@ -2911,9 +2911,10 @@ static int e1000_tx_map(struct e1000_adapter *adapter, | |||
| 2911 | 2911 | ||
| 2912 | frag = &skb_shinfo(skb)->frags[f]; | 2912 | frag = &skb_shinfo(skb)->frags[f]; |
| 2913 | len = frag->size; | 2913 | len = frag->size; |
| 2914 | offset = frag->page_offset; | 2914 | offset = 0; |
| 2915 | 2915 | ||
| 2916 | while (len) { | 2916 | while (len) { |
| 2917 | unsigned long bufend; | ||
| 2917 | i++; | 2918 | i++; |
| 2918 | if (unlikely(i == tx_ring->count)) | 2919 | if (unlikely(i == tx_ring->count)) |
| 2919 | i = 0; | 2920 | i = 0; |
| @@ -2927,18 +2928,19 @@ static int e1000_tx_map(struct e1000_adapter *adapter, | |||
| 2927 | /* Workaround for potential 82544 hang in PCI-X. | 2928 | /* Workaround for potential 82544 hang in PCI-X. |
| 2928 | * Avoid terminating buffers within evenly-aligned | 2929 | * Avoid terminating buffers within evenly-aligned |
| 2929 | * dwords. */ | 2930 | * dwords. */ |
| 2931 | bufend = (unsigned long) | ||
| 2932 | page_to_phys(skb_frag_page(frag)); | ||
| 2933 | bufend += offset + size - 1; | ||
| 2930 | if (unlikely(adapter->pcix_82544 && | 2934 | if (unlikely(adapter->pcix_82544 && |
| 2931 | !((unsigned long)(page_to_phys(frag->page) + offset | 2935 | !(bufend & 4) && |
| 2932 | + size - 1) & 4) && | 2936 | size > 4)) |
| 2933 | size > 4)) | ||
| 2934 | size -= 4; | 2937 | size -= 4; |
| 2935 | 2938 | ||
| 2936 | buffer_info->length = size; | 2939 | buffer_info->length = size; |
| 2937 | buffer_info->time_stamp = jiffies; | 2940 | buffer_info->time_stamp = jiffies; |
| 2938 | buffer_info->mapped_as_page = true; | 2941 | buffer_info->mapped_as_page = true; |
| 2939 | buffer_info->dma = dma_map_page(&pdev->dev, frag->page, | 2942 | buffer_info->dma = skb_frag_dma_map(&pdev->dev, frag, |
| 2940 | offset, size, | 2943 | offset, size, DMA_TO_DEVICE); |
| 2941 | DMA_TO_DEVICE); | ||
| 2942 | if (dma_mapping_error(&pdev->dev, buffer_info->dma)) | 2944 | if (dma_mapping_error(&pdev->dev, buffer_info->dma)) |
| 2943 | goto dma_error; | 2945 | goto dma_error; |
| 2944 | buffer_info->next_to_watch = i; | 2946 | buffer_info->next_to_watch = i; |
