summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/ide/ide-probe.c10
-rw-r--r--drivers/ide/ide.c5
2 files changed, 6 insertions, 9 deletions
diff --git a/drivers/ide/ide-probe.c b/drivers/ide/ide-probe.c
index 482f41f..6d57b7c 100644
--- a/drivers/ide/ide-probe.c
+++ b/drivers/ide/ide-probe.c
@@ -39,8 +39,6 @@
#include <asm/uaccess.h>
#include <asm/io.h>
-static ide_hwif_t ide_hwifs[MAX_HWIFS]; /* master data repository */
-
/**
* generic_id - add a generic drive id
* @drive: drive to make an ID block for
@@ -1583,15 +1581,18 @@ struct ide_host *ide_host_alloc_all(const struct ide_port_info *d,
if (hws[i] == NULL)
continue;
+ hwif = kzalloc(sizeof(*hwif), GFP_KERNEL);
+ if (hwif == NULL)
+ continue;
+
idx = ide_find_port_slot(d);
if (idx < 0) {
printk(KERN_ERR "%s: no free slot for interface\n",
d ? d->name : "ide");
+ kfree(hwif);
continue;
}
- hwif = &ide_hwifs[idx];
-
ide_init_port_data(hwif, idx);
host->ports[i] = hwif;
@@ -1755,6 +1756,7 @@ void ide_host_remove(struct ide_host *host)
ide_unregister(hwif);
ide_free_port_slot(hwif->index);
+ kfree(hwif);
}
kfree(host);
diff --git a/drivers/ide/ide.c b/drivers/ide/ide.c
index 60c5db1..914942a 100644
--- a/drivers/ide/ide.c
+++ b/drivers/ide/ide.c
@@ -233,11 +233,6 @@ void ide_unregister(ide_hwif_t *hwif)
if (hwif->dma_base)
ide_release_dma_engine(hwif);
- spin_lock_irq(&ide_lock);
- /* restore hwif data to pristine status */
- ide_init_port_data(hwif, hwif->index);
- spin_unlock_irq(&ide_lock);
-
mutex_unlock(&ide_cfg_mtx);
}