diff options
Diffstat (limited to 'drivers/net/e100.c')
| -rw-r--r-- | drivers/net/e100.c | 17 | 
1 files changed, 11 insertions, 6 deletions
diff --git a/drivers/net/e100.c b/drivers/net/e100.c index 3c29a20b751..d269a68ce35 100644 --- a/drivers/net/e100.c +++ b/drivers/net/e100.c @@ -157,6 +157,7 @@  #include <linux/init.h>  #include <linux/pci.h>  #include <linux/dma-mapping.h> +#include <linux/dmapool.h>  #include <linux/netdevice.h>  #include <linux/etherdevice.h>  #include <linux/mii.h> @@ -602,6 +603,7 @@ struct nic {  	struct mem *mem;  	dma_addr_t dma_addr; +	struct pci_pool *cbs_pool;  	dma_addr_t cbs_dma_addr;  	u8 adaptive_ifs;  	u8 tx_threshold; @@ -1793,9 +1795,7 @@ static void e100_clean_cbs(struct nic *nic)  			nic->cb_to_clean = nic->cb_to_clean->next;  			nic->cbs_avail++;  		} -		pci_free_consistent(nic->pdev, -			sizeof(struct cb) * nic->params.cbs.count, -			nic->cbs, nic->cbs_dma_addr); +		pci_pool_free(nic->cbs_pool, nic->cbs, nic->cbs_dma_addr);  		nic->cbs = NULL;  		nic->cbs_avail = 0;  	} @@ -1813,8 +1813,8 @@ static int e100_alloc_cbs(struct nic *nic)  	nic->cb_to_use = nic->cb_to_send = nic->cb_to_clean = NULL;  	nic->cbs_avail = 0; -	nic->cbs = pci_alloc_consistent(nic->pdev, -		sizeof(struct cb) * count, &nic->cbs_dma_addr); +	nic->cbs = pci_pool_alloc(nic->cbs_pool, GFP_KERNEL, +				  &nic->cbs_dma_addr);  	if (!nic->cbs)  		return -ENOMEM; @@ -2841,7 +2841,11 @@ static int __devinit e100_probe(struct pci_dev *pdev,  		DPRINTK(PROBE, ERR, "Cannot register net device, aborting.\n");  		goto err_out_free;  	} - +	nic->cbs_pool = pci_pool_create(netdev->name, +			   nic->pdev, +			   nic->params.cbs.count * sizeof(struct cb), +			   sizeof(u32), +			   0);  	DPRINTK(PROBE, INFO, "addr 0x%llx, irq %d, MAC addr %pM\n",  		(unsigned long long)pci_resource_start(pdev, use_io ? 1 : 0),  		pdev->irq, netdev->dev_addr); @@ -2871,6 +2875,7 @@ static void __devexit e100_remove(struct pci_dev *pdev)  		unregister_netdev(netdev);  		e100_free(nic);  		pci_iounmap(pdev, nic->csr); +		pci_pool_destroy(nic->cbs_pool);  		free_netdev(netdev);  		pci_release_regions(pdev);  		pci_disable_device(pdev);  |