diff options
author | Stephen Hemminger <shemminger@osdl.org> | 2006-01-05 16:26:05 -0800 |
---|---|---|
committer | Jeff Garzik <jgarzik@pobox.com> | 2006-01-17 19:52:56 -0500 |
commit | 77783a78ded96a56e3a1a0c03bbe87c56896fe6e (patch) | |
tree | 6a18c269adc45b438dc77355756dcf3957d4aad3 | |
parent | 22d4d77183f0af8b3b643544a5ae64ec6105d88b (diff) | |
download | op-kernel-dev-77783a78ded96a56e3a1a0c03bbe87c56896fe6e.zip op-kernel-dev-77783a78ded96a56e3a1a0c03bbe87c56896fe6e.tar.gz |
[PATCH] skge: fix dma mask setup.
There are a couple of problems in the DMA setup code for skge.
* In the 64 bit case, it doesn't set the consistent mask.
* In the 32 bit case, the error check is backwards!
It likely will only be visible as a bug on 64 bit platforms.
Signed-off-by: Stephen Hemminger <shemminger@osdl.org>
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
-rw-r--r-- | drivers/net/skge.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/drivers/net/skge.c b/drivers/net/skge.c index b538e30..bf55a4c 100644 --- a/drivers/net/skge.c +++ b/drivers/net/skge.c @@ -3243,12 +3243,22 @@ static int __devinit skge_probe(struct pci_dev *pdev, pci_set_master(pdev); - if (!(err = pci_set_dma_mask(pdev, DMA_64BIT_MASK))) + if (sizeof(dma_addr_t) > sizeof(u32) && + !(err = pci_set_dma_mask(pdev, DMA_64BIT_MASK))) { using_dac = 1; - else if (!(err = pci_set_dma_mask(pdev, DMA_32BIT_MASK))) { - printk(KERN_ERR PFX "%s no usable DMA configuration\n", - pci_name(pdev)); - goto err_out_free_regions; + err = pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK); + if (err < 0) { + printk(KERN_ERR PFX "%s unable to obtain 64 bit DMA " + "for consistent allocations\n", pci_name(pdev)); + goto err_out_free_regions; + } + } else { + err = pci_set_dma_mask(pdev, DMA_32BIT_MASK); + if (err) { + printk(KERN_ERR PFX "%s no usable DMA configuration\n", + pci_name(pdev)); + goto err_out_free_regions; + } } #ifdef __BIG_ENDIAN |