diff options
Diffstat (limited to 'drivers/net/e1000/e1000_main.c')
-rw-r--r-- | drivers/net/e1000/e1000_main.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c index 319c2b5281e9..8be6faee43e6 100644 --- a/drivers/net/e1000/e1000_main.c +++ b/drivers/net/e1000/e1000_main.c | |||
@@ -4005,11 +4005,21 @@ check_page: | |||
4005 | } | 4005 | } |
4006 | } | 4006 | } |
4007 | 4007 | ||
4008 | if (!buffer_info->dma) | 4008 | if (!buffer_info->dma) { |
4009 | buffer_info->dma = pci_map_page(pdev, | 4009 | buffer_info->dma = pci_map_page(pdev, |
4010 | buffer_info->page, 0, | 4010 | buffer_info->page, 0, |
4011 | buffer_info->length, | 4011 | buffer_info->length, |
4012 | PCI_DMA_FROMDEVICE); | 4012 | PCI_DMA_FROMDEVICE); |
4013 | if (pci_dma_mapping_error(pdev, buffer_info->dma)) { | ||
4014 | put_page(buffer_info->page); | ||
4015 | dev_kfree_skb(skb); | ||
4016 | buffer_info->page = NULL; | ||
4017 | buffer_info->skb = NULL; | ||
4018 | buffer_info->dma = 0; | ||
4019 | adapter->alloc_rx_buff_failed++; | ||
4020 | break; /* while !buffer_info->skb */ | ||
4021 | } | ||
4022 | } | ||
4013 | 4023 | ||
4014 | rx_desc = E1000_RX_DESC(*rx_ring, i); | 4024 | rx_desc = E1000_RX_DESC(*rx_ring, i); |
4015 | rx_desc->buffer_addr = cpu_to_le64(buffer_info->dma); | 4025 | rx_desc->buffer_addr = cpu_to_le64(buffer_info->dma); |
@@ -4100,6 +4110,13 @@ map_skb: | |||
4100 | skb->data, | 4110 | skb->data, |
4101 | buffer_info->length, | 4111 | buffer_info->length, |
4102 | PCI_DMA_FROMDEVICE); | 4112 | PCI_DMA_FROMDEVICE); |
4113 | if (pci_dma_mapping_error(pdev, buffer_info->dma)) { | ||
4114 | dev_kfree_skb(skb); | ||
4115 | buffer_info->skb = NULL; | ||
4116 | buffer_info->dma = 0; | ||
4117 | adapter->alloc_rx_buff_failed++; | ||
4118 | break; /* while !buffer_info->skb */ | ||
4119 | } | ||
4103 | 4120 | ||
4104 | /* | 4121 | /* |
4105 | * XXX if it was allocated cleanly it will never map to a | 4122 | * XXX if it was allocated cleanly it will never map to a |