aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorMarkus Lidel <Markus.Lidel@shadowconnect.com>2006-02-03 06:04:28 -0500
committerLinus Torvalds <torvalds@g5.osdl.org>2006-02-03 11:32:07 -0500
commit15d8ec7d08fbb7876e292b42bc92da8d82df7ea9 (patch)
tree7e9f217d0022728ed3205abc403e05620993ff9e /drivers
parent35dc8161d0a6fa5e654bcb3d6240acc9ecb0a259 (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.c29
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;