Message ID | 20220905190849.73194-1-andriy.shevchenko@linux.intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v1,1/1] pinctr: microchip-sgpio: Correct the fwnode_irq_get() return value check | expand |
Am 2022-09-05 21:08, schrieb Andy Shevchenko: > fwnode_irq_get() may return all possible signed values, such as Linux > error code. Fix the code to handle this properly. > > Fixes: be2dc859abd4 ("pinctrl: pinctrl-microchip-sgpio: Add irq > support (for sparx5)") > Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Reviewed-by: Michael Walle <michael@walle.cc> Btw. do we care about EPROBE_DEFER? -michael
On Tue, Sep 06, 2022 at 12:24:43AM +0200, Michael Walle wrote: > Am 2022-09-05 21:08, schrieb Andy Shevchenko: > > fwnode_irq_get() may return all possible signed values, such as Linux > > error code. Fix the code to handle this properly. > > > > Fixes: be2dc859abd4 ("pinctrl: pinctrl-microchip-sgpio: Add irq > > support (for sparx5)") > > Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> > > Reviewed-by: Michael Walle <michael@walle.cc> Thanks! I will send a v2 since I have to fix a typo in the Subject. > Btw. do we care about EPROBE_DEFER? In the original code this big (unsigned) value was added as parent IRQ and things wouldn't work, with the proposed change IRQ won't work, but at least in robust way without any surprises (whatever big parent IRQ number mean). I think the people who have access to hardware and different configurations of the kernel may or may not add the support later on.
diff --git a/drivers/pinctrl/pinctrl-microchip-sgpio.c b/drivers/pinctrl/pinctrl-microchip-sgpio.c index 6f55bf7d5e05..0771b743a940 100644 --- a/drivers/pinctrl/pinctrl-microchip-sgpio.c +++ b/drivers/pinctrl/pinctrl-microchip-sgpio.c @@ -864,9 +864,10 @@ static int microchip_sgpio_register_bank(struct device *dev, gc->can_sleep = !bank->is_input; if (bank->is_input && priv->properties->flags & SGPIO_FLAGS_HAS_IRQ) { - int irq = fwnode_irq_get(fwnode, 0); + int irq; - if (irq) { + irq = fwnode_irq_get(fwnode, 0); + if (irq > 0) { struct gpio_irq_chip *girq = &gc->irq; gpio_irq_chip_set_chip(girq, µchip_sgpio_irqchip);
fwnode_irq_get() may return all possible signed values, such as Linux error code. Fix the code to handle this properly. Fixes: be2dc859abd4 ("pinctrl: pinctrl-microchip-sgpio: Add irq support (for sparx5)") Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> --- drivers/pinctrl/pinctrl-microchip-sgpio.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)