diff --git a/drivers/video/pm3fb.c b/drivers/video/pm3fb.c --- a/drivers/video/pm3fb.c +++ b/drivers/video/pm3fb.c @@ -3291,7 +3291,7 @@ static void pm3fb_set_disp(const void *p static void pm3fb_detect(void) { struct pci_dev *dev_array[PM3_MAX_BOARD]; - struct pci_dev *dev = NULL; + struct pci_dev *dev; struct pm3fb_info *l_fb_info = &(fb_info[0]); unsigned long i, j, done; @@ -3302,15 +3302,13 @@ static void pm3fb_detect(void) fb_info[i].dev = NULL; } - dev = - pci_find_device(PCI_VENDOR_ID_3DLABS, - PCI_DEVICE_ID_3DLABS_PERMEDIA3, dev); + dev = pci_get_device(PCI_VENDOR_ID_3DLABS, PCI_DEVICE_ID_3DLABS_PERMEDIA3, + NULL); for (i = 0; ((i < PM3_MAX_BOARD) && dev); i++) { dev_array[i] = dev; - dev = - pci_find_device(PCI_VENDOR_ID_3DLABS, - PCI_DEVICE_ID_3DLABS_PERMEDIA3, dev); + dev = pci_get_device(PCI_VENDOR_ID_3DLABS, + PCI_DEVICE_ID_3DLABS_PERMEDIA3, dev); } if (dev) { /* more than PM3_MAX_BOARD */ @@ -3323,21 +3321,17 @@ static void pm3fb_detect(void) } /* allocate user-defined boards */ - for (i = 0; i < PM3_MAX_BOARD; i++) { - if ((bus[i] >= 0) && (slot[i] >= 0) && (func[i] >= 0)) { + for (i = 0; i < PM3_MAX_BOARD; i++) + if ((bus[i] >= 0) && (slot[i] >= 0) && (func[i] >= 0)) for (j = 0; j < PM3_MAX_BOARD; j++) { - if ((dev_array[j] != NULL) && - (dev_array[j]->bus->number == bus[i]) - && (PCI_SLOT(dev_array[j]->devfn) == - slot[i]) - && (PCI_FUNC(dev_array[j]->devfn) == - func[i])) { - fb_info[i].dev = dev_array[j]; - dev_array[j] = NULL; - } - } - } - } + if (dev_array[j] != NULL) + if ((dev_array[j]->bus->number == bus[i]) + && (PCI_SLOT(dev_array[j]->devfn) == slot[i]) + && (PCI_FUNC(dev_array[j]->devfn) == func[i])) { + fb_info[i].dev = dev_array[j]; + dev_array[j] = NULL; + } else pci_dev_put(dev_array[j]); + /* allocate remaining boards */ for (i = 0; i < PM3_MAX_BOARD; i++) { if (fb_info[i].dev == NULL) { @@ -3639,6 +3633,7 @@ void cleanup_module(void) unregister_framebuffer(&l_fb_info->gen. info); } + pci_dev_put(l_fb_info->dev); } } return;