Re: VIA IRQ quirk missing PCI ids since 2.6.16.17

Alan Cox
2006-11-08T18:01:04Z

Ar Mer, 2006-11-08 am 20:22 +0300, ysgrifennodd Sergey Vlasov:
> Hmm, the old comment mentions 686A/B explicitly - seems that these old
> chips also use PCI_INTERRUPT_LINE to control interrupt routing. Is it
> correct to ignore them here? Yes, that chips used PCI and not VLink,
> but they also had an internal PIC (and even internal IO-APIC).
>
> Unfortunately, I no longer have such hardware available.

I have enough docs to extend this approach to those chips if neccessary.
Anyone got an old 686 board to check.

> > + /* May not be needed for the 8237 */
> > + { PCI_VDEVICE(VIA, PCI_DEVICE_ID_VIA_8237), 15 },
> > + { PCI_VDEVICE(VIA, PCI_DEVICE_ID_VIA_8237A), 15 },
>
> 8237 definitely uses PCI_INTERRUPT_LINE to control interrupt routing in
> PIC mode - tested with the audio part by writing bogus values with
> setpci and checking whether interrupts are delivered.

Ok

> If there is no VIA ISA bridge in the system, this won't cache anything.

I no, thats noted in the comments when I posted the diff. If it works
I'll cache ->driver_data instead.

> > -int pci_dev_present(const struct pci_device_id *ids)
> > +struct pci_device_id *pci_find_present(const struct pci_device_id *ids)
>
> New API without proper refcounting? Ewww.

pci_device_id objects are not refcounted and don't vanish underneath us.
Devices may but we aren't dealing in devices. The function operates
under the list lock internally so should be safe.

Alan