diff options
author | Alan Cox <alan@lxorguk.ukuu.org.uk> | 2007-04-19 11:09:52 +0100 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2007-04-19 19:20:52 -0400 |
commit | f3769e9db11df38c211881a5f11b2e38a8e4477a (patch) | |
tree | c16c66f2256f634a893554e858d8dfcc5d95897b /drivers/ata | |
parent | 6f29e35e2d4cdbc3e8785982314e54ec5df4ad37 (diff) | |
download | kernel_samsung_smdk4412-f3769e9db11df38c211881a5f11b2e38a8e4477a.zip kernel_samsung_smdk4412-f3769e9db11df38c211881a5f11b2e38a8e4477a.tar.gz kernel_samsung_smdk4412-f3769e9db11df38c211881a5f11b2e38a8e4477a.tar.bz2 |
pata_sis: Fix oops on boot
A small number of SiS setups require special handling (not many judging
by how long this dumb bug survived). A couple of Fedora 7 devel testers
hit an Oops on pata_sis loading which is caused by terminal confusion
between chipset as 'the chipset we have found' and chipset as 'array
iterator'
Signed-off-by: Alan Cox <alan@redhat.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers/ata')
-rw-r--r-- | drivers/ata/pata_sis.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/ata/pata_sis.c b/drivers/ata/pata_sis.c index f482078..8dc3bc4 100644 --- a/drivers/ata/pata_sis.c +++ b/drivers/ata/pata_sis.c @@ -878,6 +878,7 @@ static int sis_init_one (struct pci_dev *pdev, const struct pci_device_id *ent) struct ata_port_info *port; struct pci_dev *host = NULL; struct sis_chipset *chipset = NULL; + struct sis_chipset *sets; static struct sis_chipset sis_chipsets[] = { @@ -932,10 +933,11 @@ static int sis_init_one (struct pci_dev *pdev, const struct pci_device_id *ent) /* We have to find the bridge first */ - for (chipset = &sis_chipsets[0]; chipset->device; chipset++) { - host = pci_get_device(PCI_VENDOR_ID_SI, chipset->device, NULL); + for (sets = &sis_chipsets[0]; sets->device; sets++) { + host = pci_get_device(PCI_VENDOR_ID_SI, sets->device, NULL); if (host != NULL) { - if (chipset->device == 0x630) { /* SIS630 */ + chipset = sets; /* Match found */ + if (sets->device == 0x630) { /* SIS630 */ u8 host_rev; pci_read_config_byte(host, PCI_REVISION_ID, &host_rev); if (host_rev >= 0x30) /* 630 ET */ @@ -946,7 +948,7 @@ static int sis_init_one (struct pci_dev *pdev, const struct pci_device_id *ent) } /* Look for concealed bridges */ - if (host == NULL) { + if (chipset == NULL) { /* Second check */ u32 idemisc; u16 trueid; |