forked from Minki/linux
ide: allocate ide_hwif_t instances dynamically
* Allocate ide_hwif_t instances dynamically and remove ide_hwifs[]. This cuts almost ~14kB from ide-probe.o (x86-32, MAX_HWIFS == 10): text data bss dec hex filename 9140 40 14084 23264 5ae0 drivers/ide/ide-probe.o.before 9169 40 44 9253 2425 drivers/ide/ide-probe.o.after * Remove no longer needed ide_init_port_data() call from ide_unregister(). Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
This commit is contained in:
parent
af1cbba373
commit
18de10170d
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user