* 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>
 #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
                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;
 
                ide_unregister(hwif);
                ide_free_port_slot(hwif->index);
+               kfree(hwif);
        }
 
        kfree(host);
 
        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);
 }