Re: 2.6.17-mm5

From: Greg KH
Date: Sat Jul 01 2006 - 13:03:37 EST


On Sat, Jul 01, 2006 at 09:06:14AM -0400, Brice Goglin wrote:
> 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).

If that solves this issue, I guess so.

> 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).

Yes, I agree with that, just be able to handle the above issue too :)

thanks,

greg k-h
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/