diff options
author | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2008-07-23 19:55:58 +0200 |
---|---|---|
committer | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2008-07-23 19:55:58 +0200 |
commit | 18de10170df31d34b342612f1c896a16a52f0a5c (patch) | |
tree | 70b101260d2517ea9ec67ddbca0f7224054eef4c /drivers/ide/ide-probe.c | |
parent | af1cbba37343c827e116638b097b94f5e6c38963 (diff) |
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>
Diffstat (limited to 'drivers/ide/ide-probe.c')
-rw-r--r-- | drivers/ide/ide-probe.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/ide/ide-probe.c b/drivers/ide/ide-probe.c index 482f41f3f15..6d57b7cd542 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); |