Message ID | ZH7rMgjh+z3TUKGu@moroto (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | clocksource/drivers/timer-cadence-ttc: fix a signedness bug in probe() | expand |
On 6/6/23 10:15, Dan Carpenter wrote: > Make the "irq" variable signed so the error handling can work. urq_of_parse_and_map returns unsigned type. include/linux/of_irq.h:118:extern unsigned int irq_of_parse_and_map(struct device_node *node, int index); instead of this condition should be fixed to irq = irq_of_parse_and_map(timer, 1); if (!irq) { ... > > Fixes: e932900a3279 ("arm: zynq: Use standard timer binding") > Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com> > --- > From static analysis. Untested. Presumably if probe fails the system > is unbootable so I didn't bother looking at the resource leaks. In the way how systems with TTC are used today that's correct assumption. But just to be accurate system can also have different timers which could be used instead. Thanks, Michal
On Tue, Jun 06, 2023 at 11:26:20AM +0200, Michal Simek wrote: > > > On 6/6/23 10:15, Dan Carpenter wrote: > > Make the "irq" variable signed so the error handling can work. > > urq_of_parse_and_map returns unsigned type. > Ugh... You're right. This is one of those return zero on error IRQ functions. > include/linux/of_irq.h:118:extern unsigned int irq_of_parse_and_map(struct > device_node *node, int index); > > instead of this condition should be fixed to > > irq = irq_of_parse_and_map(timer, 1); > if (!irq) { > ... > Sure. I can resend. regards, dan carpenter
diff --git a/drivers/clocksource/timer-cadence-ttc.c b/drivers/clocksource/timer-cadence-ttc.c index 4efd0cf3b602d..8ba1f5c2d7992 100644 --- a/drivers/clocksource/timer-cadence-ttc.c +++ b/drivers/clocksource/timer-cadence-ttc.c @@ -468,13 +468,13 @@ static int __init ttc_setup_clockevent(struct clk *clk, static int __init ttc_timer_probe(struct platform_device *pdev) { - unsigned int irq; void __iomem *timer_baseaddr; struct clk *clk_cs, *clk_ce; static int initialized; int clksel, ret; u32 timer_width = 16; struct device_node *timer = pdev->dev.of_node; + int irq; if (initialized) return 0;
Make the "irq" variable signed so the error handling can work. Fixes: e932900a3279 ("arm: zynq: Use standard timer binding") Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com> --- From static analysis. Untested. Presumably if probe fails the system is unbootable so I didn't bother looking at the resource leaks. drivers/clocksource/timer-cadence-ttc.c:377 ttc_setup_clocksource() warn: 'clk' from clk_prepare_enable() not released on lines: 370. drivers/clocksource/timer-cadence-ttc.c:466 ttc_setup_clockevent() warn: 'clk' from clk_prepare_enable() not released on lines: 466. drivers/clocksource/timer-cadence-ttc.c:529 ttc_timer_probe() warn: 'irq' from irq_of_parse_and_map() not released on lines: 508,516,521,525. drivers/clocksource/timer-cadence-ttc.c:529 ttc_timer_probe() warn: 'timer_baseaddr' from of_iomap() not released on lines: 498,508,516,521,525. --- drivers/clocksource/timer-cadence-ttc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)