diff options
author | Markus Lidel <Markus.Lidel@shadowconnect.com> | 2006-02-03 06:04:28 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-02-03 11:32:07 -0500 |
commit | 15d8ec7d08fbb7876e292b42bc92da8d82df7ea9 (patch) | |
tree | 7e9f217d0022728ed3205abc403e05620993ff9e /drivers | |
parent | 35dc8161d0a6fa5e654bcb3d6240acc9ecb0a259 (diff) |
[PATCH] I2O: don't disable PCI device if it is enabled before probing
If PCI device is enabled before probing, it will not be disabled at exit.
Signed-off-by: Markus Lidel <Markus.Lidel@shadowconnect.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/message/i2o/pci.c | 29 |
1 files changed, 14 insertions, 15 deletions
diff --git a/drivers/message/i2o/pci.c b/drivers/message/i2o/pci.c index d698d7709c31..e2e3fc79c78a 100644 --- a/drivers/message/i2o/pci.c +++ b/drivers/message/i2o/pci.c | |||
@@ -88,6 +88,11 @@ static int __devinit i2o_pci_alloc(struct i2o_controller *c) | |||
88 | struct device *dev = &pdev->dev; | 88 | struct device *dev = &pdev->dev; |
89 | int i; | 89 | int i; |
90 | 90 | ||
91 | if (pci_request_regions(pdev, OSM_DESCRIPTION)) { | ||
92 | printk(KERN_ERR "%s: device already claimed\n", c->name); | ||
93 | return -ENODEV; | ||
94 | } | ||
95 | |||
91 | for (i = 0; i < 6; i++) { | 96 | for (i = 0; i < 6; i++) { |
92 | /* Skip I/O spaces */ | 97 | /* Skip I/O spaces */ |
93 | if (!(pci_resource_flags(pdev, i) & IORESOURCE_IO)) { | 98 | if (!(pci_resource_flags(pdev, i) & IORESOURCE_IO)) { |
@@ -298,7 +303,7 @@ static int __devinit i2o_pci_probe(struct pci_dev *pdev, | |||
298 | struct i2o_controller *c; | 303 | struct i2o_controller *c; |
299 | int rc; | 304 | int rc; |
300 | struct pci_dev *i960 = NULL; | 305 | struct pci_dev *i960 = NULL; |
301 | int pci_dev_busy = 0; | 306 | int enabled = pdev->is_enabled; |
302 | 307 | ||
303 | printk(KERN_INFO "i2o: Checking for PCI I2O controllers...\n"); | 308 | printk(KERN_INFO "i2o: Checking for PCI I2O controllers...\n"); |
304 | 309 | ||
@@ -308,16 +313,12 @@ static int __devinit i2o_pci_probe(struct pci_dev *pdev, | |||
308 | return -ENODEV; | 313 | return -ENODEV; |
309 | } | 314 | } |
310 | 315 | ||
311 | if ((rc = pci_enable_device(pdev))) { | 316 | if (!enabled) |
312 | printk(KERN_WARNING "i2o: couldn't enable device %s\n", | 317 | if ((rc = pci_enable_device(pdev))) { |
313 | pci_name(pdev)); | 318 | printk(KERN_WARNING "i2o: couldn't enable device %s\n", |
314 | return rc; | 319 | pci_name(pdev)); |
315 | } | 320 | return rc; |
316 | 321 | } | |
317 | if (pci_request_regions(pdev, OSM_DESCRIPTION)) { | ||
318 | printk(KERN_ERR "i2o: device already claimed\n"); | ||
319 | return -ENODEV; | ||
320 | } | ||
321 | 322 | ||
322 | if (pci_set_dma_mask(pdev, DMA_32BIT_MASK)) { | 323 | if (pci_set_dma_mask(pdev, DMA_32BIT_MASK)) { |
323 | printk(KERN_WARNING "i2o: no suitable DMA found for %s\n", | 324 | printk(KERN_WARNING "i2o: no suitable DMA found for %s\n", |
@@ -395,9 +396,7 @@ static int __devinit i2o_pci_probe(struct pci_dev *pdev, | |||
395 | 396 | ||
396 | if ((rc = i2o_pci_alloc(c))) { | 397 | if ((rc = i2o_pci_alloc(c))) { |
397 | printk(KERN_ERR "%s: DMA / IO allocation for I2O controller " | 398 | printk(KERN_ERR "%s: DMA / IO allocation for I2O controller " |
398 | " failed\n", c->name); | 399 | "failed\n", c->name); |
399 | if (rc == -ENODEV) | ||
400 | pci_dev_busy = 1; | ||
401 | goto free_controller; | 400 | goto free_controller; |
402 | } | 401 | } |
403 | 402 | ||
@@ -425,7 +424,7 @@ static int __devinit i2o_pci_probe(struct pci_dev *pdev, | |||
425 | i2o_iop_free(c); | 424 | i2o_iop_free(c); |
426 | 425 | ||
427 | disable: | 426 | disable: |
428 | if (!pci_dev_busy) | 427 | if (!enabled) |
429 | pci_disable_device(pdev); | 428 | pci_disable_device(pdev); |
430 | 429 | ||
431 | return rc; | 430 | return rc; |