Messages in this thread | | | Date | Sat, 01 Jul 2006 09:06:14 -0400 | From | Brice Goglin <> | Subject | Re: 2.6.17-mm5 |
| |
Reuben Farrelly wrote: >> >> It oopsed here: >> >> static >> int pci_msi_supported(struct pci_dev * dev) >> { >> struct pci_dev *pdev; >> >> if (!pci_msi_enable || !dev || dev->no_msi) >> return -1; >> >> /* find root complex for our device */ >> pdev = dev; >> while (pdev->bus && pdev->bus->self) >> pdev = pdev->bus->self; >> >> /* check its bus flags */ >> if (pdev->subordinate->bus_flags & PCI_BUS_FLAGS_NO_MSI) >> return -1; >> >> return 0; >> } >> >> pdev->subordinate is NULL. >> > >> You may find that this gets things going again: >> >> --- a/drivers/pci/msi.c~a >> +++ a/drivers/pci/msi.c >> @@ -913,6 +913,9 @@ int pci_msi_supported(struct pci_dev * d >> while (pdev->bus && pdev->bus->self) >> pdev = pdev->bus->self; >> >> + if (!pdev->subordinate) >> + return -1; >> + >> /* check its bus flags */ >> if (pdev->subordinate->bus_flags & PCI_BUS_FLAGS_NO_MSI) >> return -1; >> _ > Yes it does.
I was not expecting a root chipset without subordinate bus... Maybe we should store the NO_MSI flags in the device itself instead of in its subordinate bus (I would have to rework all my patches then). After all, we don't inherit bus flags anymore, and I don't see why bus flags would have been chosen initially except to help flags inheritance. I am still convinced that checking to root chipset (bus) flags only is a good idea since the root chipset is where MSI are translated from PCI messages into DMA (we don't care about MSI support in the bridges between the chipset and the devices since they only forward PCI messages).
Brice
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |