On 9/6/2015 7:16 PM, Frank Rowand wrote: > On 9/6/2015 1:46 PM, Rob Herring wrote: >> On Fri, Sep 4, 2015 at 8:14 PM, Frank Rowand <frowand.list@xxxxxxxxx> wrote: >>> On 9/4/2015 12:12 PM, David Daney wrote: >>>> From: David Daney <david.daney@xxxxxxxxxx> >>>> >>>> It is perfectly legitimate for a PCI device to have an >>>> PCI_INTERRUPT_PIN value of zero. This happens if the device doesn't >>>> use interrupts, or on PCIe devices, where only MSI/MSI-X are >>>> supported. >>>> >>>> Silence the annoying "of_irq_parse_pci() failed with rc=-19" error >>>> messages by making them conditional on !-ENODEV (which can only be >>>> produced in the PCI_INTERRUPT_PIN == 0 case). >>>> >>>> Signed-off-by: David Daney <david.daney@xxxxxxxxxx> >>>> --- >>>> drivers/of/of_pci_irq.c | 4 +++- >>>> 1 file changed, 3 insertions(+), 1 deletion(-) >>>> >>>> diff --git a/drivers/of/of_pci_irq.c b/drivers/of/of_pci_irq.c >>>> index 1710d9d..33d242a 100644 >>>> --- a/drivers/of/of_pci_irq.c >>>> +++ b/drivers/of/of_pci_irq.c >>>> @@ -106,7 +106,9 @@ int of_irq_parse_and_map_pci(const struct pci_dev *dev, u8 slot, u8 pin) >>>> >>>> ret = of_irq_parse_pci(dev, &oirq); >>>> if (ret) { >>>> - dev_err(&dev->dev, "of_irq_parse_pci() failed with rc=%d\n", ret); >>>> + if (ret != -ENODEV) >>>> + dev_err(&dev->dev, >>>> + "of_irq_parse_pci() failed with rc=%d\n", ret); >>>> return 0; /* Proper return code 0 == NO_IRQ */ >>>> } >>>> >>>> >>> >>> It is not safe to assume that the functions that of_irq_parse_pci() calls >>> will never be modified to return -ENODEV, thus resulting in of_irq_parse_pci() >>> returning -ENODEV for a reason other than PCI_INTERRUPT_PIN == 0. >> >> Yes, but we're talking about a print statement. >> >>> >>> A more robust solution would be something like: > > < snip my bad solution > > >>> I'm not sure I like my solution, there might be a better way. >> >> I don't like it. That's way too complex for just silencing an >> erroneous error message. >> >> Perhaps just move the error message into of_irq_parse_pci and then you >> can control the print more easily. Or just change to dev_dbg would be >> okay by me. > > I knew I was making it way too hard. Yes, just move the error message > to of_irq_parse_pci(), where the "/* No pin, exit */" test occurs. And this time I replied too quickly, not really thinking through my comment. There are several error return points in of_irq_parse_pci(), so moving the error message into of_irq_parse_pci() is not the answer. >>> I also noticed another bug while looking at of_irq_parse_pci(). It returns >>> the non-zero return value from pci_read_config_byte(). But that value is >>> one of the PCI function error values from include/linux/pci.h, such as: >>> >>> #define PCIBIOS_BAD_REGISTER_NUMBER 0x87 >>> >>> instead of a negative errno. >> >> I was puzzled by why this is not standard error codes a while back. My >> best guess is that that there is some legacy here. Changing error >> values on widely used functions is impossible to audit. NO_IRQ being 0 >> or -1 is one such case. >> >> Rob >> > > -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html