it821x: convert to use ->host_priv
authorBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Thu, 24 Jul 2008 20:53:16 +0000 (22:53 +0200)
committerBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Thu, 24 Jul 2008 20:53:16 +0000 (22:53 +0200)
While at it:

* Allocate both struct it821x_dev instances at once.

* Don't leak itdevs on ide_pci_init_one() failure.

Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
drivers/ide/pci/it821x.c

index 40186f9e56aad0b440e8dc736691617409e42bdf..e63fdafe18fcd2cccb80b1d4f7b99edd7af12e30 100644 (file)
@@ -534,8 +534,9 @@ static struct ide_dma_ops it821x_pass_through_dma_ops = {
 static void __devinit init_hwif_it821x(ide_hwif_t *hwif)
 {
        struct pci_dev *dev = to_pci_dev(hwif->dev);
-       struct it821x_dev **itdevs = (struct it821x_dev **)pci_get_drvdata(dev);
-       struct it821x_dev *idev = itdevs[hwif->channel];
+       struct ide_host *host = pci_get_drvdata(dev);
+       struct it821x_dev *itdevs = host->host_priv;
+       struct it821x_dev *idev = itdevs + hwif->channel;
        u8 conf;
 
        ide_set_hwifdata(hwif, idev);
@@ -648,23 +649,20 @@ static const struct ide_port_info it821x_chipsets[] __devinitdata = {
 
 static int __devinit it821x_init_one(struct pci_dev *dev, const struct pci_device_id *id)
 {
-       struct it821x_dev *itdevs[2] = { NULL, NULL} , *itdev;
-       unsigned int i;
-
-       for (i = 0; i < 2; i++) {
-               itdev = kzalloc(sizeof(*itdev), GFP_KERNEL);
-               if (itdev == NULL) {
-                       kfree(itdevs[0]);
-                       printk(KERN_ERR "it821x: out of memory\n");
-                       return -ENOMEM;
-               }
+       struct it821x_dev *itdevs;
+       int rc;
 
-               itdevs[i] = itdev;
+       itdevs = kzalloc(2 * sizeof(*itdevs), GFP_KERNEL);
+       if (itdevs == NULL) {
+               printk(KERN_ERR "it821x: out of memory\n");
+               return -ENOMEM;
        }
 
-       pci_set_drvdata(dev, itdevs);
+       rc = ide_pci_init_one(dev, &it821x_chipsets[id->driver_data], itdevs);
+       if (rc)
+               kfree(itdevs);
 
-       return ide_pci_init_one(dev, &it821x_chipsets[id->driver_data], NULL);
+       return rc;
 }
 
 static const struct pci_device_id it821x_pci_tbl[] = {