diff --git a/drivers/ide/pci/hpt366.c b/drivers/ide/pci/hpt366.c --- a/drivers/ide/pci/hpt366.c +++ b/drivers/ide/pci/hpt366.c @@ -1542,11 +1542,12 @@ static void __devinit init_iops_hpt366(i static int __devinit init_setup_hpt374(struct pci_dev *dev, ide_pci_device_t *d) { struct pci_dev *findev = NULL; + int ret; if (PCI_FUNC(dev->devfn) & 1) return -ENODEV; - while ((findev = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, findev)) != NULL) { + while ((findev = pci_get_device(dev->vendor, dev->device, findev)) != NULL) if ((findev->vendor == dev->vendor) && (findev->device == dev->device) && ((findev->devfn - dev->devfn) == 1) && @@ -1557,9 +1558,10 @@ static int __devinit init_setup_hpt374(s printk(KERN_WARNING "%s: pci-config space interrupt " "fixed.\n", d->name); } - return ide_setup_pci_devices(dev, findev, d); + ret = ide_setup_pci_devices(dev, findev, d); + pci_dev_put(findev); + return ret; } - } return ide_setup_pci_device(dev, d); } @@ -1571,6 +1573,7 @@ static int __devinit init_setup_hpt37x(s static int __devinit init_setup_hpt366(struct pci_dev *dev, ide_pci_device_t *d) { struct pci_dev *findev = NULL; + int ret; u8 pin1 = 0, pin2 = 0; unsigned int class_rev; char *chipset_names[] = {"HPT366", "HPT366", "HPT368", @@ -1602,7 +1605,8 @@ static int __devinit init_setup_hpt366(s d->channels = 1; pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &pin1); - while ((findev = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, findev)) != NULL) { + + while ((findev = pci_get_device(dev->vendor, dev->device, findev)) != NULL) if ((findev->vendor == dev->vendor) && (findev->device == dev->device) && ((findev->devfn - dev->devfn) == 1) && @@ -1614,9 +1618,10 @@ static int __devinit init_setup_hpt366(s "pin1=%d pin2=%d\n", d->name, pin1, pin2); } - return ide_setup_pci_devices(dev, findev, d); + ret = ide_setup_pci_devices(dev, findev, d); + pci_dev_put(findev); + return ret; } - } init_single: return ide_setup_pci_device(dev, d); }