diff options
author | Stephen Hemminger <shemminger@osdl.org> | 2006-01-05 19:26:05 -0500 |
---|---|---|
committer | Jeff Garzik <jgarzik@pobox.com> | 2006-01-17 19:52:56 -0500 |
commit | 77783a78ded96a56e3a1a0c03bbe87c56896fe6e (patch) | |
tree | 6a18c269adc45b438dc77355756dcf3957d4aad3 /drivers | |
parent | 22d4d77183f0af8b3b643544a5ae64ec6105d88b (diff) |
[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>
Diffstat (limited to 'drivers')
-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 b538e3038058..bf55a4cfb3d2 100644 --- a/drivers/net/skge.c +++ b/drivers/net/skge.c | |||
@@ -3243,12 +3243,22 @@ static int __devinit skge_probe(struct pci_dev *pdev, | |||
3243 | 3243 | ||
3244 | pci_set_master(pdev); | 3244 | pci_set_master(pdev); |
3245 | 3245 | ||
3246 | if (!(err = pci_set_dma_mask(pdev, DMA_64BIT_MASK))) | 3246 | if (sizeof(dma_addr_t) > sizeof(u32) && |
3247 | !(err = pci_set_dma_mask(pdev, DMA_64BIT_MASK))) { | ||
3247 | using_dac = 1; | 3248 | using_dac = 1; |
3248 | else if (!(err = pci_set_dma_mask(pdev, DMA_32BIT_MASK))) { | 3249 | err = pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK); |
3249 | printk(KERN_ERR PFX "%s no usable DMA configuration\n", | 3250 | if (err < 0) { |
3250 | pci_name(pdev)); | 3251 | printk(KERN_ERR PFX "%s unable to obtain 64 bit DMA " |
3251 | goto err_out_free_regions; | 3252 | "for consistent allocations\n", pci_name(pdev)); |
3253 | goto err_out_free_regions; | ||
3254 | } | ||
3255 | } else { | ||
3256 | err = pci_set_dma_mask(pdev, DMA_32BIT_MASK); | ||
3257 | if (err) { | ||
3258 | printk(KERN_ERR PFX "%s no usable DMA configuration\n", | ||
3259 | pci_name(pdev)); | ||
3260 | goto err_out_free_regions; | ||
3261 | } | ||
3252 | } | 3262 | } |
3253 | 3263 | ||
3254 | #ifdef __BIG_ENDIAN | 3264 | #ifdef __BIG_ENDIAN |