hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/drivers/clocksource/timer-davinci.c
....@@ -258,21 +258,25 @@
258258 resource_size(&timer_cfg->reg),
259259 "davinci-timer")) {
260260 pr_err("Unable to request memory region\n");
261
- return -EBUSY;
261
+ rv = -EBUSY;
262
+ goto exit_clk_disable;
262263 }
263264
264265 base = ioremap(timer_cfg->reg.start, resource_size(&timer_cfg->reg));
265266 if (!base) {
266267 pr_err("Unable to map the register range\n");
267
- return -ENOMEM;
268
+ rv = -ENOMEM;
269
+ goto exit_mem_region;
268270 }
269271
270272 davinci_timer_init(base);
271273 tick_rate = clk_get_rate(clk);
272274
273275 clockevent = kzalloc(sizeof(*clockevent), GFP_KERNEL);
274
- if (!clockevent)
275
- return -ENOMEM;
276
+ if (!clockevent) {
277
+ rv = -ENOMEM;
278
+ goto exit_iounmap_base;
279
+ }
276280
277281 clockevent->dev.name = "tim12";
278282 clockevent->dev.features = CLOCK_EVT_FEAT_ONESHOT;
....@@ -297,7 +301,7 @@
297301 "clockevent/tim12", clockevent);
298302 if (rv) {
299303 pr_err("Unable to request the clockevent interrupt\n");
300
- return rv;
304
+ goto exit_free_clockevent;
301305 }
302306
303307 davinci_clocksource.dev.rating = 300;
....@@ -324,13 +328,27 @@
324328 rv = clocksource_register_hz(&davinci_clocksource.dev, tick_rate);
325329 if (rv) {
326330 pr_err("Unable to register clocksource\n");
327
- return rv;
331
+ goto exit_free_irq;
328332 }
329333
330334 sched_clock_register(davinci_timer_read_sched_clock,
331335 DAVINCI_TIMER_CLKSRC_BITS, tick_rate);
332336
333337 return 0;
338
+
339
+exit_free_irq:
340
+ free_irq(timer_cfg->irq[DAVINCI_TIMER_CLOCKEVENT_IRQ].start,
341
+ clockevent);
342
+exit_free_clockevent:
343
+ kfree(clockevent);
344
+exit_iounmap_base:
345
+ iounmap(base);
346
+exit_mem_region:
347
+ release_mem_region(timer_cfg->reg.start,
348
+ resource_size(&timer_cfg->reg));
349
+exit_clk_disable:
350
+ clk_disable_unprepare(clk);
351
+ return rv;
334352 }
335353
336354 static int __init of_davinci_timer_register(struct device_node *np)