diff options
author | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2008-07-27 21:29:56 -0400 |
---|---|---|
committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2008-07-30 01:26:53 -0400 |
commit | 9842727da7d95d8249087148048cc571f967c023 (patch) | |
tree | 0143e3f805a25c72a3f1d7301270720414d139c2 /drivers/ide | |
parent | 9ee07f91a1fab61ff0d8d25be43351a049c0a821 (diff) |
ide/powermac: Fix use of uninitialized pointer on media-bay
The current ide-pmac calls media_bay_set_ide_infos() with an
uninitialized "hwif" argument. The proper fix is to split the
allocation of the hwif from its registration in order to properly
setup the mediabay informations before registration.
Acked-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Diffstat (limited to 'drivers/ide')
-rw-r--r-- | drivers/ide/ppc/pmac.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/drivers/ide/ppc/pmac.c b/drivers/ide/ppc/pmac.c index c521bf6e1bf2..fa2be26272d5 100644 --- a/drivers/ide/ppc/pmac.c +++ b/drivers/ide/ppc/pmac.c | |||
@@ -1086,6 +1086,11 @@ static int __devinit pmac_ide_setup_device(pmac_ide_hwif_t *pmif, hw_regs_t *hw) | |||
1086 | /* Make sure we have sane timings */ | 1086 | /* Make sure we have sane timings */ |
1087 | sanitize_timings(pmif); | 1087 | sanitize_timings(pmif); |
1088 | 1088 | ||
1089 | host = ide_host_alloc(&d, hws); | ||
1090 | if (host == NULL) | ||
1091 | return -ENOMEM; | ||
1092 | hwif = host->ports[0]; | ||
1093 | |||
1089 | #ifndef CONFIG_PPC64 | 1094 | #ifndef CONFIG_PPC64 |
1090 | /* XXX FIXME: Media bay stuff need re-organizing */ | 1095 | /* XXX FIXME: Media bay stuff need re-organizing */ |
1091 | if (np->parent && np->parent->name | 1096 | if (np->parent && np->parent->name |
@@ -1119,11 +1124,11 @@ static int __devinit pmac_ide_setup_device(pmac_ide_hwif_t *pmif, hw_regs_t *hw) | |||
1119 | pmif->mdev ? "macio" : "PCI", pmif->aapl_bus_id, | 1124 | pmif->mdev ? "macio" : "PCI", pmif->aapl_bus_id, |
1120 | pmif->mediabay ? " (mediabay)" : "", hw->irq); | 1125 | pmif->mediabay ? " (mediabay)" : "", hw->irq); |
1121 | 1126 | ||
1122 | rc = ide_host_add(&d, hws, &host); | 1127 | rc = ide_host_register(host, &d, hws); |
1123 | if (rc) | 1128 | if (rc) { |
1129 | ide_host_free(host); | ||
1124 | return rc; | 1130 | return rc; |
1125 | 1131 | } | |
1126 | hwif = host->ports[0]; | ||
1127 | 1132 | ||
1128 | return 0; | 1133 | return 0; |
1129 | } | 1134 | } |