Merge branch 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull timer fix from Ingo Molnar:
"ARM/MOXA SoC clocksource driver fixes"

* 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
clocksource/drivers/moxart: Plug memory and mapping leaks

+16 -6
+16 -6
drivers/clocksource/moxart_timer.c
··· 161 161 timer->base = of_iomap(node, 0); 162 162 if (!timer->base) { 163 163 pr_err("%s: of_iomap failed\n", node->full_name); 164 - return -ENXIO; 164 + ret = -ENXIO; 165 + goto out_free; 165 166 } 166 167 167 168 irq = irq_of_parse_and_map(node, 0); 168 169 if (irq <= 0) { 169 170 pr_err("%s: irq_of_parse_and_map failed\n", node->full_name); 170 - return -EINVAL; 171 + ret = -EINVAL; 172 + goto out_unmap; 171 173 } 172 174 173 175 clk = of_clk_get(node, 0); 174 176 if (IS_ERR(clk)) { 175 177 pr_err("%s: of_clk_get failed\n", node->full_name); 176 - return PTR_ERR(clk); 178 + ret = PTR_ERR(clk); 179 + goto out_unmap; 177 180 } 178 181 179 182 pclk = clk_get_rate(clk); ··· 189 186 timer->t1_disable_val = ASPEED_TIMER1_DISABLE; 190 187 } else { 191 188 pr_err("%s: unknown platform\n", node->full_name); 192 - return -EINVAL; 189 + ret = -EINVAL; 190 + goto out_unmap; 193 191 } 194 192 195 193 timer->count_per_tick = DIV_ROUND_CLOSEST(pclk, HZ); ··· 212 208 clocksource_mmio_readl_down); 213 209 if (ret) { 214 210 pr_err("%s: clocksource_mmio_init failed\n", node->full_name); 215 - return ret; 211 + goto out_unmap; 216 212 } 217 213 218 214 ret = request_irq(irq, moxart_timer_interrupt, IRQF_TIMER, 219 215 node->name, &timer->clkevt); 220 216 if (ret) { 221 217 pr_err("%s: setup_irq failed\n", node->full_name); 222 - return ret; 218 + goto out_unmap; 223 219 } 224 220 225 221 /* Clear match registers */ ··· 245 241 clockevents_config_and_register(&timer->clkevt, pclk, 0x4, 0xfffffffe); 246 242 247 243 return 0; 244 + 245 + out_unmap: 246 + iounmap(timer->base); 247 + out_free: 248 + kfree(timer); 249 + return ret; 248 250 } 249 251 CLOCKSOURCE_OF_DECLARE(moxart, "moxa,moxart-timer", moxart_timer_init); 250 252 CLOCKSOURCE_OF_DECLARE(aspeed, "aspeed,ast2400-timer", moxart_timer_init);