[PATCH] I2O: added pci_request_regions() before using the controller
Added pci_request_regions() before using the controller to avoid duplicate usage of the I2O controller when the dpt_i2o driver and I2O subsystem is loaded at the same time. Signed-off-by: Markus Lidel <Markus.Lidel@shadowconnect.com> Cc: James Bottomley <James.Bottomley@SteelEye.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
a7df26da15
commit
dc9352a42c
|
@ -32,6 +32,8 @@
|
||||||
#include <linux/i2o.h>
|
#include <linux/i2o.h>
|
||||||
#include "core.h"
|
#include "core.h"
|
||||||
|
|
||||||
|
#define OSM_DESCRIPTION "I2O-subsystem"
|
||||||
|
|
||||||
/* PCI device id table for all I2O controllers */
|
/* PCI device id table for all I2O controllers */
|
||||||
static struct pci_device_id __devinitdata i2o_pci_ids[] = {
|
static struct pci_device_id __devinitdata i2o_pci_ids[] = {
|
||||||
{PCI_DEVICE_CLASS(PCI_CLASS_INTELLIGENT_I2O << 8, 0xffff00)},
|
{PCI_DEVICE_CLASS(PCI_CLASS_INTELLIGENT_I2O << 8, 0xffff00)},
|
||||||
|
@ -66,6 +68,8 @@ static void i2o_pci_free(struct i2o_controller *c)
|
||||||
|
|
||||||
if (c->base.virt)
|
if (c->base.virt)
|
||||||
iounmap(c->base.virt);
|
iounmap(c->base.virt);
|
||||||
|
|
||||||
|
pci_release_regions(c->pdev);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -84,6 +88,11 @@ static int __devinit i2o_pci_alloc(struct i2o_controller *c)
|
||||||
struct device *dev = &pdev->dev;
|
struct device *dev = &pdev->dev;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
if (pci_request_regions(pdev, OSM_DESCRIPTION)) {
|
||||||
|
printk(KERN_ERR "%s: device already claimed\n", c->name);
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < 6; i++) {
|
for (i = 0; i < 6; i++) {
|
||||||
/* Skip I/O spaces */
|
/* Skip I/O spaces */
|
||||||
if (!(pci_resource_flags(pdev, i) & IORESOURCE_IO)) {
|
if (!(pci_resource_flags(pdev, i) & IORESOURCE_IO)) {
|
||||||
|
@ -138,6 +147,7 @@ static int __devinit i2o_pci_alloc(struct i2o_controller *c)
|
||||||
c->base.virt = ioremap_nocache(c->base.phys, c->base.len);
|
c->base.virt = ioremap_nocache(c->base.phys, c->base.len);
|
||||||
if (!c->base.virt) {
|
if (!c->base.virt) {
|
||||||
printk(KERN_ERR "%s: Unable to map controller.\n", c->name);
|
printk(KERN_ERR "%s: Unable to map controller.\n", c->name);
|
||||||
|
i2o_pci_free(c);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue