提交 f3769e9d 编写于 作者: A Alan Cox 提交者: Jeff Garzik

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: NAlan Cox <alan@redhat.com>
Signed-off-by: NJeff Garzik <jeff@garzik.org>
上级 6f29e35e
...@@ -878,6 +878,7 @@ static int sis_init_one (struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -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 ata_port_info *port;
struct pci_dev *host = NULL; struct pci_dev *host = NULL;
struct sis_chipset *chipset = NULL; struct sis_chipset *chipset = NULL;
struct sis_chipset *sets;
static struct sis_chipset sis_chipsets[] = { 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) ...@@ -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 */ /* We have to find the bridge first */
for (chipset = &sis_chipsets[0]; chipset->device; chipset++) { for (sets = &sis_chipsets[0]; sets->device; sets++) {
host = pci_get_device(PCI_VENDOR_ID_SI, chipset->device, NULL); host = pci_get_device(PCI_VENDOR_ID_SI, sets->device, NULL);
if (host != NULL) { if (host != NULL) {
if (chipset->device == 0x630) { /* SIS630 */ chipset = sets; /* Match found */
if (sets->device == 0x630) { /* SIS630 */
u8 host_rev; u8 host_rev;
pci_read_config_byte(host, PCI_REVISION_ID, &host_rev); pci_read_config_byte(host, PCI_REVISION_ID, &host_rev);
if (host_rev >= 0x30) /* 630 ET */ 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) ...@@ -946,7 +948,7 @@ static int sis_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
} }
/* Look for concealed bridges */ /* Look for concealed bridges */
if (host == NULL) { if (chipset == NULL) {
/* Second check */ /* Second check */
u32 idemisc; u32 idemisc;
u16 trueid; u16 trueid;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册