aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/jme.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/drivers/net/jme.c b/drivers/net/jme.c
index b5b174a8c149..19738143aa91 100644
--- a/drivers/net/jme.c
+++ b/drivers/net/jme.c
@@ -753,20 +753,28 @@ jme_make_new_rx_buf(struct jme_adapter *jme, int i)
753 struct jme_ring *rxring = &(jme->rxring[0]); 753 struct jme_ring *rxring = &(jme->rxring[0]);
754 struct jme_buffer_info *rxbi = rxring->bufinf + i; 754 struct jme_buffer_info *rxbi = rxring->bufinf + i;
755 struct sk_buff *skb; 755 struct sk_buff *skb;
756 dma_addr_t mapping;
756 757
757 skb = netdev_alloc_skb(jme->dev, 758 skb = netdev_alloc_skb(jme->dev,
758 jme->dev->mtu + RX_EXTRA_LEN); 759 jme->dev->mtu + RX_EXTRA_LEN);
759 if (unlikely(!skb)) 760 if (unlikely(!skb))
760 return -ENOMEM; 761 return -ENOMEM;
761 762
763 mapping = pci_map_page(jme->pdev, virt_to_page(skb->data),
764 offset_in_page(skb->data), skb_tailroom(skb),
765 PCI_DMA_FROMDEVICE);
766 if (unlikely(pci_dma_mapping_error(jme->pdev, mapping))) {
767 dev_kfree_skb(skb);
768 return -ENOMEM;
769 }
770
771 if (likely(rxbi->mapping))
772 pci_unmap_page(jme->pdev, rxbi->mapping,
773 rxbi->len, PCI_DMA_FROMDEVICE);
774
762 rxbi->skb = skb; 775 rxbi->skb = skb;
763 rxbi->len = skb_tailroom(skb); 776 rxbi->len = skb_tailroom(skb);
764 rxbi->mapping = pci_map_page(jme->pdev, 777 rxbi->mapping = mapping;
765 virt_to_page(skb->data),
766 offset_in_page(skb->data),
767 rxbi->len,
768 PCI_DMA_FROMDEVICE);
769
770 return 0; 778 return 0;
771} 779}
772 780