e1000: use DMA API instead of PCI DMA functions
Subsystems (2)
PATCH 1/7 e1000: use DMA API instead of PCI DMA functions
From: Nick Nunley <[email protected]>
---
drivers/net/e1000/e1000_ethtool.c | 46 +++++++++------ drivers/net/e1000/e1000_main.c | 110 +++++++++++++++++++++---------------- 2 files changed, 88 insertions(+), 68 deletions(-)
drivers/net/e1000/e1000_ethtool.c +26 -20
@@ -980,9 +980,10 @@ static void e1000_free_desc_rings(struct e1000_adapter *adapter)if (txdr->desc && txdr->buffer_info) {for (i =0 ; i < txdr->count; i++) {if (txdr->buffer_info[i].dma) -pci_unmap_single (pdev, txdr->buffer_info[i].dma, +dma_unmap_single (&pdev->dev, + txdr->buffer_info[i].dma, txdr->buffer_info[i].length, -PCI_DMA_TODEVICE ); +DMA_TO_DEVICE );if (txdr->buffer_info[i].skb)dev_kfree_skb (txdr->buffer_info[i].skb); }
@@ -991,20 +992,23 @@ static void e1000_free_desc_rings(struct e1000_adapter *adapter)if (rxdr->desc && rxdr->buffer_info) {for (i =0 ; i < rxdr->count; i++) {if (rxdr->buffer_info[i].dma) -pci_unmap_single (pdev, rxdr->buffer_info[i].dma, +dma_unmap_single (&pdev->dev, + rxdr->buffer_info[i].dma, rxdr->buffer_info[i].length, -PCI_DMA_FROMDEVICE ); +DMA_FROM_DEVICE );if (rxdr->buffer_info[i].skb)dev_kfree_skb (rxdr->buffer_info[i].skb); } }if (txdr->desc) { -pci_free_consistent (pdev, txdr->size, txdr->desc, txdr->dma); +dma_free_coherent (&pdev->dev, txdr->size, txdr->desc, + txdr->dma); txdr->desc =NULL ; }if (rxdr->desc) { -pci_free_consistent (pdev, rxdr->size, rxdr->desc, rxdr->dma); +dma_free_coherent (&pdev->dev, rxdr->size, rxdr->desc, + rxdr->dma); rxdr->desc =NULL ; }
@@ -1039,7 +1043,8 @@ static int e1000_setup_desc_rings(struct e1000_adapter *adapter) txdr->size = txdr->count *sizeof (struct e1000_tx_desc ); txdr->size =ALIGN (txdr->size,4096 ); - txdr->desc =pci_alloc_consistent (pdev, txdr->size, &txdr->dma); + txdr->desc =dma_alloc_coherent (&pdev->dev, txdr->size, &txdr->dma, +GFP_KERNEL );if (!txdr->desc) { ret_val =2 ; goto err_nomem;
@@ -1070,8 +1075,8 @@ static int e1000_setup_desc_rings(struct e1000_adapter *adapter) txdr->buffer_info[i].skb = skb; txdr->buffer_info[i].length = skb->len; txdr->buffer_info[i].dma = -pci_map_single (pdev, skb->data, skb->len, -PCI_DMA_TODEVICE ); +dma_map_single (&pdev->dev, skb->data, skb->len, +DMA_TO_DEVICE ); tx_desc->buffer_addr =cpu_to_le64 (txdr->buffer_info[i].dma); tx_desc->lower.data =cpu_to_le32 (skb->len); tx_desc->lower.data |= cpu_to_le32(E1000_TXD_CMD_EOP |
@@ -1093,7 +1098,8 @@ static int e1000_setup_desc_rings(struct e1000_adapter *adapter) } rxdr->size = rxdr->count *sizeof (struct e1000_rx_desc ); - rxdr->desc =pci_alloc_consistent (pdev, rxdr->size, &rxdr->dma); + rxdr->desc =dma_alloc_coherent (&pdev->dev, rxdr->size, &rxdr->dma, +GFP_KERNEL );if (!rxdr->desc) { ret_val =5 ; goto err_nomem;
@@ -1126,8 +1132,8 @@ static int e1000_setup_desc_rings(struct e1000_adapter *adapter) rxdr->buffer_info[i].skb = skb; rxdr->buffer_info[i].length =E1000_RXBUFFER_2048 ; rxdr->buffer_info[i].dma = -pci_map_single (pdev, skb->data,E1000_RXBUFFER_2048 , -PCI_DMA_FROMDEVICE ); +dma_map_single (&pdev->dev, skb->data, +E1000_RXBUFFER_2048 ,DMA_FROM_DEVICE ); rx_desc->buffer_addr =cpu_to_le64 (rxdr->buffer_info[i].dma);memset (skb->data,0x00 , skb->len); }
@@ -1444,10 +1450,10 @@ static int e1000_run_loopback_test(struct e1000_adapter *adapter)for (i =0 ; i <64 ; i++) {/* send the packets */ e1000_create_lbtest_frame (txdr->buffer_info[i].skb,1024 ); -pci_dma_sync_single_for_device (pdev, - txdr->buffer_info[k].dma, - txdr->buffer_info[k].length, -PCI_DMA_TODEVICE ); +dma_sync_single_for_device (&pdev->dev, + txdr->buffer_info[k].dma, + txdr->buffer_info[k].length, +DMA_TO_DEVICE );if (unlikely (++k == txdr->count)) k =0 ; }ew32 (TDT , k);
@@ -1455,10 +1461,10 @@ static int e1000_run_loopback_test(struct e1000_adapter *adapter) time = jiffies;/* set the start time for the receive */ good_cnt =0 ; do { /* receive the sent packets */ - pci_dma_sync_single_for_cpu(pdev, - rxdr->buffer_info[l].dma, - rxdr->buffer_info[l].length, - PCI_DMA_FROMDEVICE); + dma_sync_single_for_cpu(&pdev->dev, + rxdr->buffer_info[l].dma, + rxdr->buffer_info[l].length, + DMA_FROM_DEVICE); ret_val = e1000_check_lbtest_frame( rxdr->buffer_info[l].skb,
drivers/net/e1000/e1000_main.c +62 -48
246 lines not on this page · raw message
PATCH 2/7 e1000e: use DMA API instead of PCI DMA functions
From: Nick Nunley <[email protected]>
---
drivers/net/e1000e/ethtool.c | 30 +++++++------ drivers/net/e1000e/netdev.c | 99 +++++++++++++++++++++--------------------- 2 files changed, 66 insertions(+), 63 deletions(-)
drivers/net/e1000e/ethtool.c +16 -14
@@ -1069,10 +1069,10 @@ static void e1000_free_desc_rings(struct e1000_adapter *adapter)if (tx_ring->desc && tx_ring->buffer_info) {for (i =0 ; i < tx_ring->count; i++) {if (tx_ring->buffer_info[i].dma) -pci_unmap_single (pdev, +dma_unmap_single (&pdev->dev, tx_ring->buffer_info[i].dma, tx_ring->buffer_info[i].length, -PCI_DMA_TODEVICE ); +DMA_TO_DEVICE );if (tx_ring->buffer_info[i].skb)dev_kfree_skb (tx_ring->buffer_info[i].skb); }
@@ -1081,9 +1081,9 @@ static void e1000_free_desc_rings(struct e1000_adapter *adapter)if (rx_ring->desc && rx_ring->buffer_info) {for (i =0 ; i < rx_ring->count; i++) {if (rx_ring->buffer_info[i].dma) -pci_unmap_single (pdev, +dma_unmap_single (&pdev->dev, rx_ring->buffer_info[i].dma, -2048 ,PCI_DMA_FROMDEVICE ); +2048 ,DMA_FROM_DEVICE );if (rx_ring->buffer_info[i].skb)dev_kfree_skb (rx_ring->buffer_info[i].skb); }
@@ -1163,9 +1163,10 @@ static int e1000_setup_desc_rings(struct e1000_adapter *adapter) tx_ring->buffer_info[i].skb = skb; tx_ring->buffer_info[i].length = skb->len; tx_ring->buffer_info[i].dma = -pci_map_single (pdev, skb->data, skb->len, -PCI_DMA_TODEVICE ); -if (pci_dma_mapping_error (pdev, tx_ring->buffer_info[i].dma)) { +dma_map_single (&pdev->dev, skb->data, skb->len, +DMA_TO_DEVICE ); +if (dma_mapping_error (&pdev->dev, + tx_ring->buffer_info[i].dma)) { ret_val =4 ; goto err_nomem; }
@@ -1226,9 +1227,10 @@ static int e1000_setup_desc_rings(struct e1000_adapter *adapter)skb_reserve (skb,NET_IP_ALIGN ); rx_ring->buffer_info[i].skb = skb; rx_ring->buffer_info[i].dma = -pci_map_single (pdev, skb->data,2048 , -PCI_DMA_FROMDEVICE ); -if (pci_dma_mapping_error (pdev, rx_ring->buffer_info[i].dma)) { +dma_map_single (&pdev->dev, skb->data,2048 , +DMA_FROM_DEVICE ); +if (dma_mapping_error (&pdev->dev, + rx_ring->buffer_info[i].dma)) { ret_val =8 ; goto err_nomem; }
@@ -1556,10 +1558,10 @@ static int e1000_run_loopback_test(struct e1000_adapter *adapter)for (i =0 ; i <64 ; i++) {/* send the packets */ e1000_create_lbtest_frame (tx_ring->buffer_info[k].skb,1024 ); -pci_dma_sync_single_for_device (pdev, +dma_sync_single_for_device (&pdev->dev, tx_ring->buffer_info[k].dma, tx_ring->buffer_info[k].length, -PCI_DMA_TODEVICE ); +DMA_TO_DEVICE ); k++;if (k == tx_ring->count) k =0 ;
@@ -1569,9 +1571,9 @@ static int e1000_run_loopback_test(struct e1000_adapter *adapter) time = jiffies;/* set the start time for the receive */ good_cnt =0 ; do { /* receive the sent packets */ - pci_dma_sync_single_for_cpu(pdev, + dma_sync_single_for_cpu(&pdev->dev, rx_ring->buffer_info[l].dma, 2048, - PCI_DMA_FROMDEVICE); + DMA_FROM_DEVICE); ret_val = e1000_check_lbtest_frame( rx_ring->buffer_info[l].skb, 1024);
drivers/net/e1000e/netdev.c +50 -49
213 lines not on this page · raw message
Re: [net-next-2.6 PATCH 2/7] e1000e: use DMA API instead of PCI DMA functions
From: Jeff Kirsher <[email protected]>
Date: Tue, 27 Apr 2010 16:09:05 -0700
Quoted 4 lines
From: Nick Nunley <[email protected]>
Signed-off-by Nicholas Nunley <[email protected]>Signed-off-by Jeff Kirsher <[email protected]>
Applied.
PATCH 3/7 igb: convert igb from using PCI DMA functions to using DMA API functions
In reply to Jeff KirsherFrom: Alexander Duyck <[email protected]>
This patch makes it so that igb now uses the DMA API functions instead of the PCI API functions. To do this the pci_dev pointer that was in the rings has been replaced with a device pointer, and as a result all references to [tr]x_ring->pdev have been replaced with [tr]x_ring->dev.
This patch is based of of work originally done by Nicholas Nunley.
---
drivers/net/igb/igb.h | 2 - drivers/net/igb/igb_ethtool.c | 8 ++- drivers/net/igb/igb_main.c | 109 +++++++++++++++++++++-------------------- 3 files changed, 61 insertions(+), 58 deletions(-)
drivers/net/igb/igb.h +1 -1
@@ -186,7 +186,7 @@ struct igb_q_vector {struct igb_ring {struct igb_q_vector *q_vector;/* backlink to q_vector */ struct net_device *netdev;/* back pointer to net_device */ -struct pci_dev *pdev;/* pci device for dma mapping */ +struct device *dev;/* device pointer for dma mapping */ dma_addr_t dma;/* phys address of the ring */ void *desc;/* descriptor ring memory */ unsigned int size;/* length of desc. ring in bytes */
drivers/net/igb/igb_ethtool.c +4 -4
@@ -1394,7 +1394,7 @@ static int igb_setup_desc_rings(struct igb_adapter *adapter)/* Setup Tx descriptor ring and Tx buffers */ tx_ring->count =IGB_DEFAULT_TXD ; - tx_ring->pdev = adapter->pdev; + tx_ring->dev = &adapter->pdev->dev; tx_ring->netdev = adapter->netdev; tx_ring->reg_idx = adapter->vfs_allocated_count;
@@ -1408,7 +1408,7 @@ static int igb_setup_desc_rings(struct igb_adapter *adapter)/* Setup Rx descriptor ring and Rx buffers */ rx_ring->count =IGB_DEFAULT_RXD ; - rx_ring->pdev = adapter->pdev; + rx_ring->dev = &adapter->pdev->dev; rx_ring->netdev = adapter->netdev; rx_ring->rx_buffer_len =IGB_RXBUFFER_2048 ; rx_ring->reg_idx = adapter->vfs_allocated_count;
@@ -1604,10 +1604,10 @@ static int igb_clean_test_rings(struct igb_ring *rx_ring, buffer_info = &rx_ring->buffer_info[rx_ntc];/* unmap rx buffer, will be remapped by alloc_rx_buffers */ -pci_unmap_single (rx_ring->pdev, +dma_unmap_single (rx_ring->dev, buffer_info->dma, rx_ring->rx_buffer_len, -PCI_DMA_FROMDEVICE ); +DMA_FROM_DEVICE ); buffer_info->dma =0 ;/* verify contents of skb */
drivers/net/igb/igb_main.c +56 -53
293 lines not on this page · raw message
Re: [net-next-2.6 PATCH 3/7] igb: convert igb from using PCI DMA functions to using DMA API functions
From: Jeff Kirsher <[email protected]>
Date: Tue, 27 Apr 2010 16:09:25 -0700
Quoted 10 lines
From: Alexander Duyck <[email protected]>
This patch makes it so that igb now uses the DMA API functions instead of the PCI API functions. To do this the
pci_devpointer that was in the rings has been replaced with a device pointer, and as a result all references to [tr]x_ring->pdev have been replaced with [tr]x_ring->dev.This patch is based of of work originally done by Nicholas Nunley.
Signed-off-by Alexander Duyck <[email protected]>Signed-off-by Jeff Kirsher <[email protected]>
Applied.
PATCH 4/7 igbvf: use DMA API instead of PCI DMA functions
In reply to Jeff KirsherFrom: Nick Nunley <[email protected]>
---
drivers/net/igbvf/netdev.c | 74 +++++++++++++++++++++++--------------------- 1 files changed, 38 insertions(+), 36 deletions(-)
drivers/net/igbvf/netdev.c +38 -36
@@ -164,10 +164,10 @@ static void igbvf_alloc_rx_buffers(struct igbvf_ring *rx_ring, buffer_info->page_offset ^=PAGE_SIZE /2 ; } buffer_info->page_dma = -pci_map_page (pdev, buffer_info->page, +dma_map_page (&pdev->dev, buffer_info->page, buffer_info->page_offset,PAGE_SIZE /2 , -PCI_DMA_FROMDEVICE ); +DMA_FROM_DEVICE ); }if (!buffer_info->skb) {
@@ -178,9 +178,9 @@ static void igbvf_alloc_rx_buffers(struct igbvf_ring *rx_ring, } buffer_info->skb = skb; - buffer_info->dma =pci_map_single (pdev, skb->data, + buffer_info->dma =dma_map_single (&pdev->dev, skb->data, bufsz, -PCI_DMA_FROMDEVICE ); +DMA_FROM_DEVICE ); }/* Refresh the desc even if buffer_addrs didn't change because * each write-back erases this info. */
@@ -268,25 +268,25 @@ static bool igbvf_clean_rx_irq(struct igbvf_adapter *adapter,prefetch (skb->data -NET_IP_ALIGN ); buffer_info->skb =NULL ;if (!adapter->rx_ps_hdr_size) { -pci_unmap_single (pdev, buffer_info->dma, +dma_unmap_single (&pdev->dev, buffer_info->dma, adapter->rx_buffer_len, -PCI_DMA_FROMDEVICE ); +DMA_FROM_DEVICE ); buffer_info->dma =0 ;skb_put (skb, length); goto send_up; }if (!skb_shinfo (skb)->nr_frags) { -pci_unmap_single (pdev, buffer_info->dma, +dma_unmap_single (&pdev->dev, buffer_info->dma, adapter->rx_ps_hdr_size, -PCI_DMA_FROMDEVICE ); +DMA_FROM_DEVICE );skb_put (skb, hlen); }if (length) { -pci_unmap_page (pdev, buffer_info->page_dma, +dma_unmap_page (&pdev->dev, buffer_info->page_dma,PAGE_SIZE /2 , -PCI_DMA_FROMDEVICE ); +DMA_FROM_DEVICE ); buffer_info->page_dma =0 ; skb_fill_page_desc(skb, skb_shinfo(skb)->nr_frags,
@@ -369,15 +369,15 @@ static void igbvf_put_txbuf(struct igbvf_adapter *adapter, {if (buffer_info->dma) {if (buffer_info->mapped_as_page) -pci_unmap_page (adapter->pdev, +dma_unmap_page (&adapter->pdev->dev, buffer_info->dma, buffer_info->length, -PCI_DMA_TODEVICE ); +DMA_TO_DEVICE );else -pci_unmap_single (adapter->pdev, +dma_unmap_single (&adapter->pdev->dev, buffer_info->dma, buffer_info->length, -PCI_DMA_TODEVICE ); +DMA_TO_DEVICE ); buffer_info->dma =0 ; }if (buffer_info->skb) {
@@ -438,8 +438,8 @@ int igbvf_setup_tx_resources(struct igbvf_adapter *adapter, tx_ring->size = tx_ring->count *sizeof (union e1000_adv_tx_desc ); tx_ring->size =ALIGN (tx_ring->size,4096 ); - tx_ring->desc =pci_alloc_consistent (pdev, tx_ring->size, - &tx_ring->dma); + tx_ring->desc =dma_alloc_coherent (&pdev->dev, tx_ring->size, + &tx_ring->dma,GFP_KERNEL );if (!tx_ring->desc) goto err;
@@ -480,8 +480,8 @@ int igbvf_setup_rx_resources(struct igbvf_adapter *adapter, rx_ring->size = rx_ring->count * desc_len; rx_ring->size =ALIGN (rx_ring->size,4096 ); - rx_ring->desc =pci_alloc_consistent (pdev, rx_ring->size, - &rx_ring->dma); + rx_ring->desc =dma_alloc_coherent (&pdev->dev, rx_ring->size, + &rx_ring->dma,GFP_KERNEL );if (!rx_ring->desc) goto err;
@@ -549,7 +549,8 @@ void igbvf_free_tx_resources(struct igbvf_ring *tx_ring)vfree (tx_ring->buffer_info); tx_ring->buffer_info =NULL ; -pci_free_consistent (pdev, tx_ring->size, tx_ring->desc, tx_ring->dma); +dma_free_coherent (&pdev->dev, tx_ring->size, tx_ring->desc, + tx_ring->dma); tx_ring->desc =NULL ; }
@@ -574,13 +575,13 @@ static void igbvf_clean_rx_ring(struct igbvf_ring *rx_ring) buffer_info = &rx_ring->buffer_info[i];if (buffer_info->dma) {if (adapter->rx_ps_hdr_size){ -pci_unmap_single (pdev, buffer_info->dma, +dma_unmap_single (&pdev->dev, buffer_info->dma, adapter->rx_ps_hdr_size, -PCI_DMA_FROMDEVICE ); +DMA_FROM_DEVICE ); }else { -pci_unmap_single (pdev, buffer_info->dma, +dma_unmap_single (&pdev->dev, buffer_info->dma, adapter->rx_buffer_len, -PCI_DMA_FROMDEVICE ); +DMA_FROM_DEVICE ); } buffer_info->dma =0 ; }
@@ -592,9 +593,10 @@ static void igbvf_clean_rx_ring(struct igbvf_ring *rx_ring)if (buffer_info->page) {if (buffer_info->page_dma) -pci_unmap_page (pdev, buffer_info->page_dma, +dma_unmap_page (&pdev->dev, + buffer_info->page_dma,PAGE_SIZE /2 , -PCI_DMA_FROMDEVICE ); +DMA_FROM_DEVICE );put_page (buffer_info->page); buffer_info->page =NULL ; buffer_info->page_dma =0 ;
@@ -2104,9 +2106,9 @@ static inline int igbvf_tx_map_adv(struct igbvf_adapter *adapter, buffer_info->time_stamp = jiffies; buffer_info->next_to_watch = i; buffer_info->mapped_as_page = false; - buffer_info->dma =pci_map_single (pdev, skb->data, len, -PCI_DMA_TODEVICE ); -if (pci_dma_mapping_error (pdev, buffer_info->dma)) + buffer_info->dma =dma_map_single (&pdev->dev, skb->data, len, +DMA_TO_DEVICE ); +if (dma_mapping_error (&pdev->dev, buffer_info->dma)) goto dma_error;
@@ -2127,12 +2129,12 @@ static inline int igbvf_tx_map_adv(struct igbvf_adapter *adapter, buffer_info->time_stamp = jiffies; buffer_info->next_to_watch = i; buffer_info->mapped_as_page = true; - buffer_info->dma =pci_map_page (pdev, + buffer_info->dma =dma_map_page (&pdev->dev, frag->page, frag->page_offset, len, -PCI_DMA_TODEVICE ); -if (pci_dma_mapping_error (pdev, buffer_info->dma)) +DMA_TO_DEVICE ); +if (dma_mapping_error (&pdev->dev, buffer_info->dma)) goto dma_error; }
@@ -2644,16 +2646,16 @@ static int __devinit igbvf_probe(struct pci_dev *pdev,return err; pci_using_dac =0 ; - err =pci_set_dma_mask (pdev,DMA_BIT_MASK (64 )); + err =dma_set_mask (&pdev->dev,DMA_BIT_MASK (64 ));if (!err) { - err =pci_set_consistent_dma_mask (pdev,DMA_BIT_MASK (64 )); + err =dma_set_coherent_mask (&pdev->dev,DMA_BIT_MASK (64 ));if (!err) pci_using_dac =1 ; }else { - err =pci_set_dma_mask (pdev,DMA_BIT_MASK (32 )); + err =dma_set_mask (&pdev->dev,DMA_BIT_MASK (32 ));if (err) { - err =pci_set_consistent_dma_mask (pdev, -DMA_BIT_MASK (32 )); + err =dma_set_coherent_mask (&pdev->dev, +DMA_BIT_MASK (32 ));if (err) {dev_err (&pdev->dev,"No usable DMA " "configuration, aborting\n" );
Re: [net-next-2.6 PATCH 4/7] igbvf: use DMA API instead of PCI DMA functions
From: Jeff Kirsher <[email protected]>
Date: Tue, 27 Apr 2010 16:09:44 -0700
Quoted 4 lines
From: Nick Nunley <[email protected]>
Signed-off-by Nicholas Nunley <[email protected]>Signed-off-by Jeff Kirsher <[email protected]>
Applied.
PATCH 5/7 ixgb: use DMA API instead of PCI DMA functions
In reply to Jeff KirsherFrom: Nick Nunley <[email protected]>
---
drivers/net/ixgb/ixgb_main.c | 70 +++++++++++++++++++++++------------------- 1 files changed, 39 insertions(+), 31 deletions(-)
drivers/net/ixgb/ixgb_main.c +39 -31
@@ -368,16 +368,22 @@ ixgb_probe(struct pci_dev *pdev, const struct pci_device_id *ent)if (err)return err; -if (!(err =pci_set_dma_mask (pdev,DMA_BIT_MASK (64 ))) && - !(err =pci_set_consistent_dma_mask (pdev,DMA_BIT_MASK (64 )))) { - pci_using_dac =1 ; + pci_using_dac =0 ; + err =dma_set_mask (&pdev->dev,DMA_BIT_MASK (64 )); +if (!err) { + err =dma_set_coherent_mask (&pdev->dev,DMA_BIT_MASK (64 )); +if (!err) + pci_using_dac =1 ; }else { -if ((err =pci_set_dma_mask (pdev,DMA_BIT_MASK (32 ))) || - (err =pci_set_consistent_dma_mask (pdev,DMA_BIT_MASK (32 )))) { -pr_err ("No usable DMA configuration, aborting\n" ); - goto err_dma_mask; + err =dma_set_mask (&pdev->dev,DMA_BIT_MASK (32 )); +if (err) { + err =dma_set_coherent_mask (&pdev->dev, +DMA_BIT_MASK (32 )); +if (err) { +pr_err ("No usable DMA configuration, aborting\n" ); + goto err_dma_mask; + } } - pci_using_dac =0 ; } err =pci_request_regions (pdev, ixgb_driver_name);
@@ -673,7 +679,8 @@ ixgb_setup_tx_resources(struct ixgb_adapter *adapter) txdr->size = txdr->count *sizeof (struct ixgb_tx_desc ); txdr->size =ALIGN (txdr->size,4096 ); - txdr->desc =pci_alloc_consistent (pdev, txdr->size, &txdr->dma); + txdr->desc =dma_alloc_coherent (&pdev->dev, txdr->size, &txdr->dma, +GFP_KERNEL );if (!txdr->desc) {vfree (txdr->buffer_info); netif_err(adapter, probe, adapter->netdev,
@@ -762,7 +769,8 @@ ixgb_setup_rx_resources(struct ixgb_adapter *adapter) rxdr->size = rxdr->count *sizeof (struct ixgb_rx_desc ); rxdr->size =ALIGN (rxdr->size,4096 ); - rxdr->desc =pci_alloc_consistent (pdev, rxdr->size, &rxdr->dma); + rxdr->desc =dma_alloc_coherent (&pdev->dev, rxdr->size, &rxdr->dma, +GFP_KERNEL );if (!rxdr->desc) {vfree (rxdr->buffer_info);
@@ -883,8 +891,8 @@ ixgb_free_tx_resources(struct ixgb_adapter *adapter)vfree (adapter->tx_ring.buffer_info); adapter->tx_ring.buffer_info =NULL ; -pci_free_consistent (pdev, adapter->tx_ring.size, - adapter->tx_ring.desc, adapter->tx_ring.dma); +dma_free_coherent (&pdev->dev, adapter->tx_ring.size, + adapter->tx_ring.desc, adapter->tx_ring.dma); adapter->tx_ring.desc =NULL ; }
@@ -895,12 +903,11 @@ ixgb_unmap_and_free_tx_resource(struct ixgb_adapter *adapter, {if (buffer_info->dma) {if (buffer_info->mapped_as_page) -pci_unmap_page (adapter->pdev, buffer_info->dma, - buffer_info->length,PCI_DMA_TODEVICE ); +dma_unmap_page (&adapter->pdev->dev, buffer_info->dma, + buffer_info->length,DMA_TO_DEVICE );else -pci_unmap_single (adapter->pdev, buffer_info->dma, - buffer_info->length, -PCI_DMA_TODEVICE ); +dma_unmap_single (&adapter->pdev->dev, buffer_info->dma, + buffer_info->length,DMA_TO_DEVICE ); buffer_info->dma =0 ; }
@@ -966,7 +973,8 @@ ixgb_free_rx_resources(struct ixgb_adapter *adapter)vfree (rx_ring->buffer_info); rx_ring->buffer_info =NULL ; -pci_free_consistent (pdev, rx_ring->size, rx_ring->desc, rx_ring->dma); +dma_free_coherent (&pdev->dev, rx_ring->size, rx_ring->desc, + rx_ring->dma); rx_ring->desc =NULL ; }
@@ -990,10 +998,10 @@ ixgb_clean_rx_ring(struct ixgb_adapter *adapter)for (i =0 ; i < rx_ring->count; i++) { buffer_info = &rx_ring->buffer_info[i];if (buffer_info->dma) { -pci_unmap_single (pdev, +dma_unmap_single (&pdev->dev, buffer_info->dma, buffer_info->length, -PCI_DMA_FROMDEVICE ); +DMA_FROM_DEVICE ); buffer_info->dma =0 ; buffer_info->length =0 ; }
@@ -1300,9 +1308,10 @@ ixgb_tx_map(struct ixgb_adapter *adapter, struct sk_buff *skb,WARN_ON (buffer_info->dma !=0 ); buffer_info->time_stamp = jiffies; buffer_info->mapped_as_page = false; - buffer_info->dma =pci_map_single (pdev, skb->data + offset, - size,PCI_DMA_TODEVICE ); -if (pci_dma_mapping_error (pdev, buffer_info->dma)) + buffer_info->dma =dma_map_single (&pdev->dev, + skb->data + offset, + size,DMA_TO_DEVICE ); +if (dma_mapping_error (&pdev->dev, buffer_info->dma)) goto dma_error; buffer_info->next_to_watch =0 ;
@@ -1341,10 +1350,9 @@ ixgb_tx_map(struct ixgb_adapter *adapter, struct sk_buff *skb, buffer_info->time_stamp = jiffies; buffer_info->mapped_as_page = true; buffer_info->dma = -pci_map_page (pdev, frag->page, - offset, size, -PCI_DMA_TODEVICE ); -if (pci_dma_mapping_error (pdev, buffer_info->dma)) +dma_map_page (&pdev->dev, frag->page, + offset, size,DMA_TO_DEVICE ); +if (dma_mapping_error (&pdev->dev, buffer_info->dma)) goto dma_error; buffer_info->next_to_watch =0 ;
@@ -1962,10 +1970,10 @@ ixgb_clean_rx_irq(struct ixgb_adapter *adapter, int *work_done, int work_to_do) cleaned = true; cleaned_count++; -pci_unmap_single (pdev, +dma_unmap_single (&pdev->dev, buffer_info->dma, buffer_info->length, -PCI_DMA_FROMDEVICE ); +DMA_FROM_DEVICE ); buffer_info->dma =0 ; length =le16_to_cpu (rx_desc->length);
@@ -2088,10 +2096,10 @@ ixgb_alloc_rx_buffers(struct ixgb_adapter *adapter, int cleaned_count) buffer_info->skb = skb; buffer_info->length = adapter->rx_buffer_len; map_skb: - buffer_info->dma =pci_map_single (pdev, + buffer_info->dma =dma_map_single (&pdev->dev, skb->data, adapter->rx_buffer_len, -PCI_DMA_FROMDEVICE ); +DMA_FROM_DEVICE ); rx_desc =IXGB_RX_DESC (*rx_ring, i); rx_desc->buff_addr =cpu_to_le64 (buffer_info->dma);
Re: [net-next-2.6 PATCH 5/7] ixgb: use DMA API instead of PCI DMA functions
From: Jeff Kirsher <[email protected]>
Date: Tue, 27 Apr 2010 16:10:03 -0700
Quoted 4 lines
From: Nick Nunley <[email protected]>
Signed-off-by Nicholas Nunley <[email protected]>Signed-off-by Jeff Kirsher <[email protected]>
Applied.
PATCH 6/7 ixgbe: use DMA API instead of PCI DMA functions
In reply to Jeff KirsherFrom: Nick Nunley <[email protected]>
---
drivers/net/ixgbe/ixgbe_ethtool.c | 42 +++++++++++--------- drivers/net/ixgbe/ixgbe_main.c | 77 ++++++++++++++++++++----------------- 2 files changed, 64 insertions(+), 55 deletions(-)
drivers/net/ixgbe/ixgbe_ethtool.c +22 -20
@@ -1458,8 +1458,8 @@ static void ixgbe_free_desc_rings(struct ixgbe_adapter *adapter)struct ixgbe_tx_buffer *buf = &(tx_ring->tx_buffer_info[i]);if (buf->dma) -pci_unmap_single (pdev, buf->dma, buf->length, -PCI_DMA_TODEVICE ); +dma_unmap_single (&pdev->dev, buf->dma, + buf->length,DMA_TO_DEVICE );if (buf->skb)dev_kfree_skb (buf->skb); }
@@ -1470,22 +1470,22 @@ static void ixgbe_free_desc_rings(struct ixgbe_adapter *adapter)struct ixgbe_rx_buffer *buf = &(rx_ring->rx_buffer_info[i]);if (buf->dma) -pci_unmap_single (pdev, buf->dma, +dma_unmap_single (&pdev->dev, buf->dma,IXGBE_RXBUFFER_2048 , -PCI_DMA_FROMDEVICE ); +DMA_FROM_DEVICE );if (buf->skb)dev_kfree_skb (buf->skb); } }if (tx_ring->desc) { -pci_free_consistent (pdev, tx_ring->size, tx_ring->desc, - tx_ring->dma); +dma_free_coherent (&pdev->dev, tx_ring->size, tx_ring->desc, + tx_ring->dma); tx_ring->desc =NULL ; }if (rx_ring->desc) { -pci_free_consistent (pdev, rx_ring->size, rx_ring->desc, - rx_ring->dma); +dma_free_coherent (&pdev->dev, rx_ring->size, rx_ring->desc, + rx_ring->dma); rx_ring->desc =NULL ; }
@@ -1520,8 +1520,9 @@ static int ixgbe_setup_desc_rings(struct ixgbe_adapter *adapter) tx_ring->size = tx_ring->count *sizeof (union ixgbe_adv_tx_desc ); tx_ring->size =ALIGN (tx_ring->size,4096 ); -if (!(tx_ring->desc =pci_alloc_consistent (pdev, tx_ring->size, - &tx_ring->dma))) { + tx_ring->desc =dma_alloc_coherent (&pdev->dev, tx_ring->size, + &tx_ring->dma,GFP_KERNEL ); +if (!(tx_ring->desc)) { ret_val =2 ; goto err_nomem; }
@@ -1563,8 +1564,8 @@ static int ixgbe_setup_desc_rings(struct ixgbe_adapter *adapter) tx_ring->tx_buffer_info[i].skb = skb; tx_ring->tx_buffer_info[i].length = skb->len; tx_ring->tx_buffer_info[i].dma = -pci_map_single (pdev, skb->data, skb->len, -PCI_DMA_TODEVICE ); +dma_map_single (&pdev->dev, skb->data, skb->len, +DMA_TO_DEVICE ); desc->read.buffer_addr =cpu_to_le64 (tx_ring->tx_buffer_info[i].dma); desc->read.cmd_type_len =cpu_to_le32 (skb->len);
@@ -1593,8 +1594,9 @@ static int ixgbe_setup_desc_rings(struct ixgbe_adapter *adapter) rx_ring->size = rx_ring->count *sizeof (union ixgbe_adv_rx_desc ); rx_ring->size =ALIGN (rx_ring->size,4096 ); -if (!(rx_ring->desc =pci_alloc_consistent (pdev, rx_ring->size, - &rx_ring->dma))) { + rx_ring->desc =dma_alloc_coherent (&pdev->dev, rx_ring->size, + &rx_ring->dma,GFP_KERNEL ); +if (!(rx_ring->desc)) { ret_val =5 ; goto err_nomem; }
@@ -1661,8 +1663,8 @@ static int ixgbe_setup_desc_rings(struct ixgbe_adapter *adapter)skb_reserve (skb,NET_IP_ALIGN ); rx_ring->rx_buffer_info[i].skb = skb; rx_ring->rx_buffer_info[i].dma = -pci_map_single (pdev, skb->data,IXGBE_RXBUFFER_2048 , -PCI_DMA_FROMDEVICE ); +dma_map_single (&pdev->dev, skb->data, +IXGBE_RXBUFFER_2048 ,DMA_FROM_DEVICE ); rx_desc->read.pkt_addr =cpu_to_le64 (rx_ring->rx_buffer_info[i].dma);memset (skb->data,0x00 , skb->len);
@@ -1775,10 +1777,10 @@ static int ixgbe_run_loopback_test(struct ixgbe_adapter *adapter)ixgbe_create_lbtest_frame ( tx_ring->tx_buffer_info[k].skb,1024 ); -pci_dma_sync_single_for_device (pdev, +dma_sync_single_for_device (&pdev->dev, tx_ring->tx_buffer_info[k].dma, tx_ring->tx_buffer_info[k].length, -PCI_DMA_TODEVICE ); +DMA_TO_DEVICE );if (unlikely (++k == tx_ring->count)) k =0 ; }
@@ -1789,10 +1791,10 @@ static int ixgbe_run_loopback_test(struct ixgbe_adapter *adapter) good_cnt =0 ; do { /* receive the sent packets */ - pci_dma_sync_single_for_cpu(pdev, + dma_sync_single_for_cpu(&pdev->dev, rx_ring->rx_buffer_info[l].dma, IXGBE_RXBUFFER_2048, - PCI_DMA_FROMDEVICE); + DMA_FROM_DEVICE); ret_val = ixgbe_check_lbtest_frame( rx_ring->rx_buffer_info[l].skb, 1024); if (!ret_val)
drivers/net/ixgbe/ixgbe_main.c +42 -35
191 lines not on this page · raw message
Re: [net-next-2.6 PATCH 6/7] ixgbe: use DMA API instead of PCI DMA functions
From: Jeff Kirsher <[email protected]>
Date: Tue, 27 Apr 2010 16:10:27 -0700
Quoted 4 lines
From: Nick Nunley <[email protected]>
Signed-off-by Nicholas Nunley <[email protected]>Signed-off-by Jeff Kirsher <[email protected]>
Applied.
PATCH 7/7 ixgbevf: use DMA API instead of PCI DMA functions
In reply to Jeff KirsherFrom: Nick Nunley <[email protected]>
---
drivers/net/ixgbevf/ixgbevf_main.c | 68 +++++++++++++++++++----------------- 1 files changed, 35 insertions(+), 33 deletions(-)
drivers/net/ixgbevf/ixgbevf_main.c +35 -33
@@ -139,15 +139,15 @@ static void ixgbevf_unmap_and_free_tx_resource(struct ixgbevf_adapter *adapter, {if (tx_buffer_info->dma) {if (tx_buffer_info->mapped_as_page) -pci_unmap_page (adapter->pdev, +dma_unmap_page (&adapter->pdev->dev, tx_buffer_info->dma, tx_buffer_info->length, -PCI_DMA_TODEVICE ); +DMA_TO_DEVICE );else -pci_unmap_single (adapter->pdev, +dma_unmap_single (&adapter->pdev->dev, tx_buffer_info->dma, tx_buffer_info->length, -PCI_DMA_TODEVICE ); +DMA_TO_DEVICE ); tx_buffer_info->dma =0 ; }if (tx_buffer_info->skb) {
@@ -416,10 +416,10 @@ static void ixgbevf_alloc_rx_buffers(struct ixgbevf_adapter *adapter, bi->page_offset ^= (PAGE_SIZE /2 ); } - bi->page_dma =pci_map_page (pdev, bi->page, + bi->page_dma =dma_map_page (&pdev->dev, bi->page, bi->page_offset, (PAGE_SIZE /2 ), -PCI_DMA_FROMDEVICE ); +DMA_FROM_DEVICE ); } skb = bi->skb;
@@ -442,9 +442,9 @@ static void ixgbevf_alloc_rx_buffers(struct ixgbevf_adapter *adapter, bi->skb = skb; }if (!bi->dma) { - bi->dma =pci_map_single (pdev, skb->data, + bi->dma =dma_map_single (&pdev->dev, skb->data, rx_ring->rx_buf_len, -PCI_DMA_FROMDEVICE ); +DMA_FROM_DEVICE ); }/* Refresh the desc even if buffer_addrs didn't change because * each write-back erases this info. */
@@ -536,16 +536,16 @@ static bool ixgbevf_clean_rx_irq(struct ixgbevf_q_vector *q_vector, rx_buffer_info->skb =NULL ;if (rx_buffer_info->dma) { -pci_unmap_single (pdev, rx_buffer_info->dma, +dma_unmap_single (&pdev->dev, rx_buffer_info->dma, rx_ring->rx_buf_len, -PCI_DMA_FROMDEVICE ); +DMA_FROM_DEVICE ); rx_buffer_info->dma =0 ;skb_put (skb, len); }if (upper_len) { -pci_unmap_page (pdev, rx_buffer_info->page_dma, -PAGE_SIZE /2 ,PCI_DMA_FROMDEVICE ); +dma_unmap_page (&pdev->dev, rx_buffer_info->page_dma, +PAGE_SIZE /2 ,DMA_FROM_DEVICE ); rx_buffer_info->page_dma =0 ; skb_fill_page_desc(skb, skb_shinfo(skb)->nr_frags, rx_buffer_info->page,
@@ -1721,9 +1721,9 @@ static void ixgbevf_clean_rx_ring(struct ixgbevf_adapter *adapter, rx_buffer_info = &rx_ring->rx_buffer_info[i];if (rx_buffer_info->dma) { -pci_unmap_single (pdev, rx_buffer_info->dma, +dma_unmap_single (&pdev->dev, rx_buffer_info->dma, rx_ring->rx_buf_len, -PCI_DMA_FROMDEVICE ); +DMA_FROM_DEVICE ); rx_buffer_info->dma =0 ; }if (rx_buffer_info->skb) {
@@ -1737,8 +1737,8 @@ static void ixgbevf_clean_rx_ring(struct ixgbevf_adapter *adapter, }if (!rx_buffer_info->page)continue ; -pci_unmap_page (pdev, rx_buffer_info->page_dma,PAGE_SIZE /2 , -PCI_DMA_FROMDEVICE ); +dma_unmap_page (&pdev->dev, rx_buffer_info->page_dma, +PAGE_SIZE /2 ,DMA_FROM_DEVICE ); rx_buffer_info->page_dma =0 ;put_page (rx_buffer_info->page); rx_buffer_info->page =NULL ;
@@ -2445,7 +2445,8 @@ void ixgbevf_free_tx_resources(struct ixgbevf_adapter *adapter,vfree (tx_ring->tx_buffer_info); tx_ring->tx_buffer_info =NULL ; -pci_free_consistent (pdev, tx_ring->size, tx_ring->desc, tx_ring->dma); +dma_free_coherent (&pdev->dev, tx_ring->size, tx_ring->desc, + tx_ring->dma); tx_ring->desc =NULL ; }
@@ -2490,8 +2491,8 @@ int ixgbevf_setup_tx_resources(struct ixgbevf_adapter *adapter, tx_ring->size = tx_ring->count *sizeof (union ixgbe_adv_tx_desc ); tx_ring->size =ALIGN (tx_ring->size,4096 ); - tx_ring->desc =pci_alloc_consistent (pdev, tx_ring->size, - &tx_ring->dma); + tx_ring->desc =dma_alloc_coherent (&pdev->dev, tx_ring->size, + &tx_ring->dma,GFP_KERNEL );if (!tx_ring->desc) goto err;
@@ -2561,8 +2562,8 @@ int ixgbevf_setup_rx_resources(struct ixgbevf_adapter *adapter, rx_ring->size = rx_ring->count *sizeof (union ixgbe_adv_rx_desc ); rx_ring->size =ALIGN (rx_ring->size,4096 ); - rx_ring->desc =pci_alloc_consistent (pdev, rx_ring->size, - &rx_ring->dma); + rx_ring->desc =dma_alloc_coherent (&pdev->dev, rx_ring->size, + &rx_ring->dma,GFP_KERNEL );if (!rx_ring->desc) { hw_dbg(&adapter->hw,
@@ -2623,7 +2624,8 @@ void ixgbevf_free_rx_resources(struct ixgbevf_adapter *adapter,vfree (rx_ring->rx_buffer_info); rx_ring->rx_buffer_info =NULL ; -pci_free_consistent (pdev, rx_ring->size, rx_ring->desc, rx_ring->dma); +dma_free_coherent (&pdev->dev, rx_ring->size, rx_ring->desc, + rx_ring->dma); rx_ring->desc =NULL ; }
@@ -2935,10 +2937,10 @@ static int ixgbevf_tx_map(struct ixgbevf_adapter *adapter, tx_buffer_info->length = size; tx_buffer_info->mapped_as_page = false; - tx_buffer_info->dma =pci_map_single (adapter->pdev, + tx_buffer_info->dma =dma_map_single (&adapter->pdev->dev, skb->data + offset, - size,PCI_DMA_TODEVICE ); -if (pci_dma_mapping_error (pdev, tx_buffer_info->dma)) + size,DMA_TO_DEVICE ); +if (dma_mapping_error (&pdev->dev, tx_buffer_info->dma)) goto dma_error; tx_buffer_info->time_stamp = jiffies; tx_buffer_info->next_to_watch = i;
@@ -2964,13 +2966,13 @@ static int ixgbevf_tx_map(struct ixgbevf_adapter *adapter, size =min (len, (unsigned int )IXGBE_MAX_DATA_PER_TXD ); tx_buffer_info->length = size; - tx_buffer_info->dma =pci_map_page (adapter->pdev, + tx_buffer_info->dma =dma_map_page (&adapter->pdev->dev, frag->page, offset, size, -PCI_DMA_TODEVICE ); +DMA_TO_DEVICE ); tx_buffer_info->mapped_as_page = true; -if (pci_dma_mapping_error (pdev, tx_buffer_info->dma)) +if (dma_mapping_error (&pdev->dev, tx_buffer_info->dma)) goto dma_error; tx_buffer_info->time_stamp = jiffies; tx_buffer_info->next_to_watch = i;
@@ -3311,14 +3313,14 @@ static int __devinit ixgbevf_probe(struct pci_dev *pdev,if (err)return err; -if (!pci_set_dma_mask (pdev,DMA_BIT_MASK (64 )) && - !pci_set_consistent_dma_mask (pdev,DMA_BIT_MASK (64 ))) { +if (!dma_set_mask (&pdev->dev,DMA_BIT_MASK (64 )) && + !dma_set_coherent_mask (&pdev->dev,DMA_BIT_MASK (64 ))) { pci_using_dac =1 ; }else { - err =pci_set_dma_mask (pdev,DMA_BIT_MASK (32 )); + err =dma_set_mask (&pdev->dev,DMA_BIT_MASK (32 ));if (err) { - err =pci_set_consistent_dma_mask (pdev, -DMA_BIT_MASK (32 )); + err =dma_set_coherent_mask (&pdev->dev, +DMA_BIT_MASK (32 ));if (err) {dev_err (&pdev->dev,"No usable DMA " "configuration, aborting\n" );
Re: [net-next-2.6 PATCH 7/7] ixgbevf: use DMA API instead of PCI DMA functions
From: Jeff Kirsher <[email protected]>
Date: Tue, 27 Apr 2010 16:10:50 -0700
Quoted 4 lines
From: Nick Nunley <[email protected]>
Signed-off-by Nicholas Nunley <[email protected]>Signed-off-by Jeff Kirsher <[email protected]>
Applied.
From: Jeff Kirsher <[email protected]>
Date: Tue, 27 Apr 2010 16:08:45 -0700
Quoted 4 lines
From: Nick Nunley <[email protected]>
Signed-off-by Nicholas Nunley <[email protected]>Signed-off-by Jeff Kirsher <[email protected]>
Applied.