Hello!
On 7/17/2017 12:17 AM, Linus Walleij wrote:
of_irq_get() may return a negative error number as well as 0 on failure,
while the driver only checks for 0, blithely continuing with the call to
irq_set_chained_handler_and_data() -- that function expects *unsigned int*
so should probably do nothing when a large IRQ number resulting from a
conversion of a negative error number is passed to it. The driver then
probes successfully while being only partly functional...
Check for 'irq <= 0' instead and propagate the negative error number to
the probe method -- that will allow the deferred probing as well...
Fixes: d3c68e0a7e34 ("PCI: faraday: Add Faraday Technology FTPCI100 PCI Host Bridge driver")
Signed-off-by: Sergei Shtylyov <sergei.shtylyov@xxxxxxxxxxxxxxxxxx>
Looks correct!
Reviewed-by: Linus Walleij <linus.walleij@xxxxxxxxxx>
Thanks!
- return -EINVAL;
+ return irq ?: -EINVAL;
I thought I knew C but I learn something new all the time.
I had no clue one can use the ternary operator like this.
It's not a standard C, it's gcc's trickery. :-)
Linus Walleij
MBR, Sergei