You don't have any TTL in the while loop below, neither in the while loop in pci_find_next_ht_capability(). It's paranoid, but I'd rather keep a TTL in both loops (a brain-damaged capability chain in the PCI config space could lead to an infinite loop without any clue of what's going on, not easy to find out...).
Apart from that, I like the idea. Brice Michael Ellerman wrote: > Use pci_find_ht_capability() in drivers/pci/quirks.c. > > I'm pretty sure the logic is unchanged here, but someone please eye-ball it > for me. I've changed the message to be a little shorter, it's now: > > PCI: Found (enabled|disabled) HT MSI mapping on xxxx:xx:xx.x > > Signed-off-by: Michael Ellerman <[EMAIL PROTECTED]> > --- > > drivers/pci/quirks.c | 27 +++++++++++++++------------ > 1 file changed, 15 insertions(+), 12 deletions(-) > > Index: msi/drivers/pci/quirks.c > =================================================================== > --- msi.orig/drivers/pci/quirks.c > +++ msi/drivers/pci/quirks.c > @@ -1724,19 +1724,22 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AM > * return 1 if a HT MSI capability is found and enabled */ > static int __devinit msi_ht_cap_enabled(struct pci_dev *dev) > { > - u8 pos; > - int ttl; > - for (pos = pci_find_capability(dev, PCI_CAP_ID_HT), ttl = 48; > - pos && ttl; > - pos = pci_find_next_capability(dev, pos, PCI_CAP_ID_HT), ttl--) { > - u32 cap_hdr; > - /* MSI mapping section according to Hypertransport spec */ > - if (pci_read_config_dword(dev, pos, &cap_hdr) == 0 > - && (cap_hdr & 0xf8000000) == 0xa8000000 /* MSI mapping */) { > - printk(KERN_INFO "PCI: Found HT MSI mapping on %s with > capability %s\n", > - pci_name(dev), cap_hdr & 0x10000 ? "enabled" : > "disabled"); > - return (cap_hdr & 0x10000) != 0; /* MSI mapping cap > enabled */ > + int pos; > + > + pos = pci_find_ht_capability(dev, HT_CAPTYPE_MSI_MAPPING); > + while (pos) { > + u8 flags; > + > + if (pci_read_config_byte(dev, > + pos + HT_MSI_FLAGS, &flags) == 0) { > + printk(KERN_INFO "PCI: Found %s HT MSI Mapping on %s\n", > + flags & HT_MSI_FLAGS_ENABLE ? > + "enabled" : "disabled", pci_name(dev)); > + return (flags & HT_MSI_FLAGS_ENABLE) != 0; > } > + > + pos = pci_find_next_ht_capability(dev, pos, > + HT_CAPTYPE_MSI_MAPPING); > } > return 0; > } > _______________________________________________ openib-general mailing list openib-general@openib.org http://openib.org/mailman/listinfo/openib-general To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general