diff options
| author | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2008-10-23 18:01:13 +0900 | 
|---|---|---|
| committer | Jeff Garzik <jgarzik@redhat.com> | 2008-10-27 14:49:02 -0400 | 
| commit | 74d5e8acd95ae934194303138a43b60005fcfad6 (patch) | |
| tree | bdc794294ad9915deaf6c8168ec68c730d10924c /drivers/net/tulip/dmfe.c | |
| parent | 2d488c2f514a6c5248a0773c78345626abdc1818 (diff) | |
dmfe: check pci_alloc_consistent errors
We need to check the address that pci_alloc_consistent() returns since
it might fail.
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
Diffstat (limited to 'drivers/net/tulip/dmfe.c')
| -rw-r--r-- | drivers/net/tulip/dmfe.c | 12 | 
1 files changed, 11 insertions, 1 deletions
| diff --git a/drivers/net/tulip/dmfe.c b/drivers/net/tulip/dmfe.c index 8e46a513a252..c91852f49a48 100644 --- a/drivers/net/tulip/dmfe.c +++ b/drivers/net/tulip/dmfe.c @@ -420,9 +420,13 @@ static int __devinit dmfe_init_one (struct pci_dev *pdev,  	/* Allocate Tx/Rx descriptor memory */  	db->desc_pool_ptr = pci_alloc_consistent(pdev, sizeof(struct tx_desc) *  			DESC_ALL_CNT + 0x20, &db->desc_pool_dma_ptr); +	if (!db->desc_pool_ptr) +		goto err_out_res;  	db->buf_pool_ptr = pci_alloc_consistent(pdev, TX_BUF_ALLOC *  			TX_DESC_CNT + 4, &db->buf_pool_dma_ptr); +	if (!db->buf_pool_ptr) +		goto err_out_free_desc;  	db->first_tx_desc = (struct tx_desc *) db->desc_pool_ptr;  	db->first_tx_desc_dma = db->desc_pool_dma_ptr; @@ -469,7 +473,7 @@ static int __devinit dmfe_init_one (struct pci_dev *pdev,  	err = register_netdev (dev);  	if (err) -		goto err_out_res; +		goto err_out_free_buf;  	printk(KERN_INFO "%s: Davicom DM%04lx at pci%s, "  	       "%s, irq %d.\n", @@ -483,6 +487,12 @@ static int __devinit dmfe_init_one (struct pci_dev *pdev,  	return 0; +err_out_free_buf: +	pci_free_consistent(pdev, TX_BUF_ALLOC * TX_DESC_CNT + 4, +			    db->buf_pool_ptr, db->buf_pool_dma_ptr); +err_out_free_desc: +	pci_free_consistent(pdev, sizeof(struct tx_desc) * DESC_ALL_CNT + 0x20, +			    db->desc_pool_ptr, db->desc_pool_dma_ptr);  err_out_res:  	pci_release_regions(pdev);  err_out_disable: | 
