Re: 2.6.17-mm5

From: Brice Goglin
Date: Sat Jul 01 2006 - 09:05:11 EST


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@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/