Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

clocksource: Replace setup_irq() by request_irq()

request_irq() is preferred over setup_irq(). The early boot setup_irq()
invocations happen either via 'init_IRQ()' or 'time_init()', while
memory allocators are ready by 'mm_init()'.

Per tglx[1], setup_irq() existed in olden days when allocators were not
ready by the time early interrupts were initialized.

Hence replace setup_irq() by request_irq().

Seldom remove_irq() usage has been observed coupled with setup_irq(),
wherever that has been found, it too has been replaced by free_irq().

A build error that was reported by kbuild test robot <lkp@intel.com>
in the previous version of the patch also has been fixed.

[1] https://lkml.kernel.org/r/alpine.DEB.2.20.1710191609480.1971@nanos

Signed-off-by: afzal mohammed <afzal.mohd.ma@gmail.com>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Link: https://lore.kernel.org/r/91961c77c1cf93d41523f5e1ac52043f32f97077.1582799709.git.afzal.mohd.ma@gmail.com

authored by

afzal mohammed and committed by
Daniel Lezcano
cc2550b4 a7cd3955

+82 -190
+2 -6
drivers/clocksource/bcm2835_timer.c
··· 31 31 void __iomem *compare; 32 32 int match_mask; 33 33 struct clock_event_device evt; 34 - struct irqaction act; 35 34 }; 36 35 37 36 static void __iomem *system_clock __read_mostly; ··· 112 113 timer->evt.features = CLOCK_EVT_FEAT_ONESHOT; 113 114 timer->evt.set_next_event = bcm2835_time_set_next_event; 114 115 timer->evt.cpumask = cpumask_of(0); 115 - timer->act.name = node->name; 116 - timer->act.flags = IRQF_TIMER | IRQF_SHARED; 117 - timer->act.dev_id = timer; 118 - timer->act.handler = bcm2835_time_interrupt; 119 116 120 - ret = setup_irq(irq, &timer->act); 117 + ret = request_irq(irq, bcm2835_time_interrupt, IRQF_TIMER | IRQF_SHARED, 118 + node->name, timer); 121 119 if (ret) { 122 120 pr_err("Can't set up timer IRQ\n"); 123 121 goto err_timer_free;
+3 -7
drivers/clocksource/bcm_kona_timer.c
··· 160 160 return IRQ_HANDLED; 161 161 } 162 162 163 - static struct irqaction kona_timer_irq = { 164 - .name = "Kona Timer Tick", 165 - .flags = IRQF_TIMER, 166 - .handler = kona_timer_interrupt, 167 - }; 168 - 169 163 static int __init kona_timer_init(struct device_node *node) 170 164 { 171 165 u32 freq; ··· 186 192 kona_timer_disable_and_clear(timers.tmr_regs); 187 193 188 194 kona_timer_clockevents_init(); 189 - setup_irq(timers.tmr_irq, &kona_timer_irq); 195 + if (request_irq(timers.tmr_irq, kona_timer_interrupt, IRQF_TIMER, 196 + "Kona Timer Tick", NULL)) 197 + pr_err("%s: request_irq() failed\n", "Kona Timer Tick"); 190 198 kona_timer_set_next_event((arch_timer_rate / HZ), NULL); 191 199 192 200 return 0;
+3 -8
drivers/clocksource/dw_apb_timer.c
··· 270 270 dw_ced->ced.rating = rating; 271 271 dw_ced->ced.name = name; 272 272 273 - dw_ced->irqaction.name = dw_ced->ced.name; 274 - dw_ced->irqaction.handler = dw_apb_clockevent_irq; 275 - dw_ced->irqaction.dev_id = &dw_ced->ced; 276 - dw_ced->irqaction.irq = irq; 277 - dw_ced->irqaction.flags = IRQF_TIMER | IRQF_IRQPOLL | 278 - IRQF_NOBALANCING; 279 - 280 273 dw_ced->eoi = apbt_eoi; 281 - err = setup_irq(irq, &dw_ced->irqaction); 274 + err = request_irq(irq, dw_apb_clockevent_irq, 275 + IRQF_TIMER | IRQF_IRQPOLL | IRQF_NOBALANCING, 276 + dw_ced->ced.name, &dw_ced->ced); 282 277 if (err) { 283 278 pr_err("failed to request timer irq\n"); 284 279 kfree(dw_ced);
+4 -8
drivers/clocksource/exynos_mct.c
··· 329 329 return IRQ_HANDLED; 330 330 } 331 331 332 - static struct irqaction mct_comp_event_irq = { 333 - .name = "mct_comp_irq", 334 - .flags = IRQF_TIMER | IRQF_IRQPOLL, 335 - .handler = exynos4_mct_comp_isr, 336 - .dev_id = &mct_comp_device, 337 - }; 338 - 339 332 static int exynos4_clockevent_init(void) 340 333 { 341 334 mct_comp_device.cpumask = cpumask_of(0); 342 335 clockevents_config_and_register(&mct_comp_device, clk_rate, 343 336 0xf, 0xffffffff); 344 - setup_irq(mct_irqs[MCT_G0_IRQ], &mct_comp_event_irq); 337 + if (request_irq(mct_irqs[MCT_G0_IRQ], exynos4_mct_comp_isr, 338 + IRQF_TIMER | IRQF_IRQPOLL, "mct_comp_irq", 339 + &mct_comp_device)) 340 + pr_err("%s: request_irq() failed\n", "mct_comp_irq"); 345 341 346 342 return 0; 347 343 }
+2 -8
drivers/clocksource/mxs_timer.c
··· 117 117 return IRQ_HANDLED; 118 118 } 119 119 120 - static struct irqaction mxs_timer_irq = { 121 - .name = "MXS Timer Tick", 122 - .dev_id = &mxs_clockevent_device, 123 - .flags = IRQF_TIMER | IRQF_IRQPOLL, 124 - .handler = mxs_timer_interrupt, 125 - }; 126 - 127 120 static void mxs_irq_clear(char *state) 128 121 { 129 122 /* Disable interrupt in timer module */ ··· 270 277 if (irq <= 0) 271 278 return -EINVAL; 272 279 273 - return setup_irq(irq, &mxs_timer_irq); 280 + return request_irq(irq, mxs_timer_interrupt, IRQF_TIMER | IRQF_IRQPOLL, 281 + "MXS Timer Tick", &mxs_clockevent_device); 274 282 } 275 283 TIMER_OF_DECLARE(mxs, "fsl,timrot", mxs_timer_init);
+3 -8
drivers/clocksource/nomadik-mtu.c
··· 181 181 return IRQ_HANDLED; 182 182 } 183 183 184 - static struct irqaction nmdk_timer_irq = { 185 - .name = "Nomadik Timer Tick", 186 - .flags = IRQF_TIMER, 187 - .handler = nmdk_timer_interrupt, 188 - .dev_id = &nmdk_clkevt, 189 - }; 190 - 191 184 static int __init nmdk_timer_init(void __iomem *base, int irq, 192 185 struct clk *pclk, struct clk *clk) 193 186 { ··· 225 232 sched_clock_register(nomadik_read_sched_clock, 32, rate); 226 233 227 234 /* Timer 1 is used for events, register irq and clockevents */ 228 - setup_irq(irq, &nmdk_timer_irq); 235 + if (request_irq(irq, nmdk_timer_interrupt, IRQF_TIMER, 236 + "Nomadik Timer Tick", &nmdk_clkevt)) 237 + pr_err("%s: request_irq() failed\n", "Nomadik Timer Tick"); 229 238 nmdk_clkevt.cpumask = cpumask_of(0); 230 239 nmdk_clkevt.irq = irq; 231 240 clockevents_config_and_register(&nmdk_clkevt, rate, 2, 0xffffffffU);
+4 -8
drivers/clocksource/samsung_pwm_timer.c
··· 256 256 return IRQ_HANDLED; 257 257 } 258 258 259 - static struct irqaction samsung_clock_event_irq = { 260 - .name = "samsung_time_irq", 261 - .flags = IRQF_TIMER | IRQF_IRQPOLL, 262 - .handler = samsung_clock_event_isr, 263 - .dev_id = &time_event_device, 264 - }; 265 - 266 259 static void __init samsung_clockevent_init(void) 267 260 { 268 261 unsigned long pclk; ··· 275 282 clock_rate, 1, pwm.tcnt_max); 276 283 277 284 irq_number = pwm.irq[pwm.event_id]; 278 - setup_irq(irq_number, &samsung_clock_event_irq); 285 + if (request_irq(irq_number, samsung_clock_event_isr, 286 + IRQF_TIMER | IRQF_IRQPOLL, "samsung_time_irq", 287 + &time_event_device)) 288 + pr_err("%s: request_irq() failed\n", "samsung_time_irq"); 279 289 280 290 if (pwm.variant.has_tint_cstat) { 281 291 u32 mask = (1 << pwm.event_id);
+22 -26
drivers/clocksource/timer-atlas7.c
··· 159 159 .resume = sirfsoc_clocksource_resume, 160 160 }; 161 161 162 - static struct irqaction sirfsoc_timer_irq = { 163 - .name = "sirfsoc_timer0", 164 - .flags = IRQF_TIMER | IRQF_NOBALANCING, 165 - .handler = sirfsoc_timer_interrupt, 166 - }; 167 - 168 - static struct irqaction sirfsoc_timer1_irq = { 169 - .name = "sirfsoc_timer1", 170 - .flags = IRQF_TIMER | IRQF_NOBALANCING, 171 - .handler = sirfsoc_timer_interrupt, 172 - }; 162 + static unsigned int sirfsoc_timer_irq, sirfsoc_timer1_irq; 173 163 174 164 static int sirfsoc_local_timer_starting_cpu(unsigned int cpu) 175 165 { 176 166 struct clock_event_device *ce = per_cpu_ptr(sirfsoc_clockevent, cpu); 177 - struct irqaction *action; 167 + unsigned int irq; 168 + const char *name; 178 169 179 - if (cpu == 0) 180 - action = &sirfsoc_timer_irq; 181 - else 182 - action = &sirfsoc_timer1_irq; 170 + if (cpu == 0) { 171 + irq = sirfsoc_timer_irq; 172 + name = "sirfsoc_timer0"; 173 + } else { 174 + irq = sirfsoc_timer1_irq; 175 + name = "sirfsoc_timer1"; 176 + } 183 177 184 - ce->irq = action->irq; 178 + ce->irq = irq; 185 179 ce->name = "local_timer"; 186 180 ce->features = CLOCK_EVT_FEAT_ONESHOT; 187 181 ce->rating = 200; ··· 190 196 ce->min_delta_ticks = 2; 191 197 ce->cpumask = cpumask_of(cpu); 192 198 193 - action->dev_id = ce; 194 - BUG_ON(setup_irq(ce->irq, action)); 195 - irq_force_affinity(action->irq, cpumask_of(cpu)); 199 + BUG_ON(request_irq(ce->irq, sirfsoc_timer_interrupt, 200 + IRQF_TIMER | IRQF_NOBALANCING, name, ce)); 201 + irq_force_affinity(ce->irq, cpumask_of(cpu)); 196 202 197 203 clockevents_register_device(ce); 198 204 return 0; ··· 200 206 201 207 static int sirfsoc_local_timer_dying_cpu(unsigned int cpu) 202 208 { 209 + struct clock_event_device *ce = per_cpu_ptr(sirfsoc_clockevent, cpu); 210 + 203 211 sirfsoc_timer_count_disable(1); 204 212 205 213 if (cpu == 0) 206 - remove_irq(sirfsoc_timer_irq.irq, &sirfsoc_timer_irq); 214 + free_irq(sirfsoc_timer_irq, ce); 207 215 else 208 - remove_irq(sirfsoc_timer1_irq.irq, &sirfsoc_timer1_irq); 216 + free_irq(sirfsoc_timer1_irq, ce); 209 217 return 0; 210 218 } 211 219 ··· 264 268 return -ENXIO; 265 269 } 266 270 267 - sirfsoc_timer_irq.irq = irq_of_parse_and_map(np, 0); 268 - if (!sirfsoc_timer_irq.irq) { 271 + sirfsoc_timer_irq = irq_of_parse_and_map(np, 0); 272 + if (!sirfsoc_timer_irq) { 269 273 pr_err("No irq passed for timer0 via DT\n"); 270 274 return -EINVAL; 271 275 } 272 276 273 - sirfsoc_timer1_irq.irq = irq_of_parse_and_map(np, 1); 274 - if (!sirfsoc_timer1_irq.irq) { 277 + sirfsoc_timer1_irq = irq_of_parse_and_map(np, 1); 278 + if (!sirfsoc_timer1_irq) { 275 279 pr_err("No irq passed for timer1 via DT\n"); 276 280 return -EINVAL; 277 281 }
+3 -7
drivers/clocksource/timer-cs5535.c
··· 131 131 return IRQ_HANDLED; 132 132 } 133 133 134 - static struct irqaction mfgptirq = { 135 - .handler = mfgpt_tick, 136 - .flags = IRQF_NOBALANCING | IRQF_TIMER | IRQF_SHARED, 137 - .name = DRV_NAME, 138 - }; 139 - 140 134 static int __init cs5535_mfgpt_init(void) 141 135 { 142 136 struct cs5535_mfgpt_timer *timer; ··· 152 158 } 153 159 154 160 /* And register it with the kernel */ 155 - ret = setup_irq(timer_irq, &mfgptirq); 161 + ret = request_irq(timer_irq, mfgpt_tick, 162 + IRQF_NOBALANCING | IRQF_TIMER | IRQF_SHARED, 163 + DRV_NAME, NULL); 156 164 if (ret) { 157 165 printk(KERN_ERR DRV_NAME ": Unable to set up the interrupt.\n"); 158 166 goto err_irq;
+2 -8
drivers/clocksource/timer-efm32.c
··· 119 119 }, 120 120 }; 121 121 122 - static struct irqaction efm32_clock_event_irq = { 123 - .name = "efm32 clockevent", 124 - .flags = IRQF_TIMER, 125 - .handler = efm32_clock_event_handler, 126 - .dev_id = &clock_event_ddata, 127 - }; 128 - 129 122 static int __init efm32_clocksource_init(struct device_node *np) 130 123 { 131 124 struct clk *clk; ··· 223 230 DIV_ROUND_CLOSEST(rate, 1024), 224 231 0xf, 0xffff); 225 232 226 - ret = setup_irq(irq, &efm32_clock_event_irq); 233 + ret = request_irq(irq, efm32_clock_event_handler, IRQF_TIMER, 234 + "efm32 clockevent", &clock_event_ddata); 227 235 if (ret) { 228 236 pr_err("Failed setup irq\n"); 229 237 goto err_setup_irq;
+2 -8
drivers/clocksource/timer-fsl-ftm.c
··· 176 176 .rating = 300, 177 177 }; 178 178 179 - static struct irqaction ftm_timer_irq = { 180 - .name = "Freescale ftm timer", 181 - .flags = IRQF_TIMER | IRQF_IRQPOLL, 182 - .handler = ftm_evt_interrupt, 183 - .dev_id = &ftm_clockevent, 184 - }; 185 - 186 179 static int __init ftm_clockevent_init(unsigned long freq, int irq) 187 180 { 188 181 int err; ··· 185 192 186 193 ftm_reset_counter(priv->clkevt_base); 187 194 188 - err = setup_irq(irq, &ftm_timer_irq); 195 + err = request_irq(irq, ftm_evt_interrupt, IRQF_TIMER | IRQF_IRQPOLL, 196 + "Freescale ftm timer", &ftm_clockevent); 189 197 if (err) { 190 198 pr_err("ftm: setup irq failed: %d\n", err); 191 199 return err;
+2 -8
drivers/clocksource/timer-imx-gpt.c
··· 67 67 struct clk *clk_ipg; 68 68 const struct imx_gpt_data *gpt; 69 69 struct clock_event_device ced; 70 - struct irqaction act; 71 70 }; 72 71 73 72 struct imx_gpt_data { ··· 272 273 static int __init mxc_clockevent_init(struct imx_timer *imxtm) 273 274 { 274 275 struct clock_event_device *ced = &imxtm->ced; 275 - struct irqaction *act = &imxtm->act; 276 276 277 277 ced->name = "mxc_timer1"; 278 278 ced->features = CLOCK_EVT_FEAT_ONESHOT | CLOCK_EVT_FEAT_DYNIRQ; ··· 285 287 clockevents_config_and_register(ced, clk_get_rate(imxtm->clk_per), 286 288 0xff, 0xfffffffe); 287 289 288 - act->name = "i.MX Timer Tick"; 289 - act->flags = IRQF_TIMER | IRQF_IRQPOLL; 290 - act->handler = mxc_timer_interrupt; 291 - act->dev_id = ced; 292 - 293 - return setup_irq(imxtm->irq, act); 290 + return request_irq(imxtm->irq, mxc_timer_interrupt, 291 + IRQF_TIMER | IRQF_IRQPOLL, "i.MX Timer Tick", ced); 294 292 } 295 293 296 294 static void imx1_gpt_setup_tctl(struct imx_timer *imxtm)
+3 -8
drivers/clocksource/timer-integrator-ap.c
··· 123 123 .rating = 300, 124 124 }; 125 125 126 - static struct irqaction integrator_timer_irq = { 127 - .name = "timer", 128 - .flags = IRQF_TIMER | IRQF_IRQPOLL, 129 - .handler = integrator_timer_interrupt, 130 - .dev_id = &integrator_clockevent, 131 - }; 132 - 133 126 static int integrator_clockevent_init(unsigned long inrate, 134 127 void __iomem *base, int irq) 135 128 { ··· 142 149 timer_reload = rate / HZ; 143 150 writel(ctrl, clkevt_base + TIMER_CTRL); 144 151 145 - ret = setup_irq(irq, &integrator_timer_irq); 152 + ret = request_irq(irq, integrator_timer_interrupt, 153 + IRQF_TIMER | IRQF_IRQPOLL, "timer", 154 + &integrator_clockevent); 146 155 if (ret) 147 156 return ret; 148 157
+3 -8
drivers/clocksource/timer-meson6.c
··· 150 150 return IRQ_HANDLED; 151 151 } 152 152 153 - static struct irqaction meson6_timer_irq = { 154 - .name = "meson6_timer", 155 - .flags = IRQF_TIMER | IRQF_IRQPOLL, 156 - .handler = meson6_timer_interrupt, 157 - .dev_id = &meson6_clockevent, 158 - }; 159 - 160 153 static int __init meson6_timer_init(struct device_node *node) 161 154 { 162 155 u32 val; ··· 187 194 /* Stop the timer A */ 188 195 meson6_clkevt_time_stop(); 189 196 190 - ret = setup_irq(irq, &meson6_timer_irq); 197 + ret = request_irq(irq, meson6_timer_interrupt, 198 + IRQF_TIMER | IRQF_IRQPOLL, "meson6_timer", 199 + &meson6_clockevent); 191 200 if (ret) { 192 201 pr_warn("failed to setup irq %d\n", irq); 193 202 return ret;
+2 -7
drivers/clocksource/timer-orion.c
··· 114 114 return IRQ_HANDLED; 115 115 } 116 116 117 - static struct irqaction orion_clkevt_irq = { 118 - .name = "orion_event", 119 - .flags = IRQF_TIMER, 120 - .handler = orion_clkevt_irq_handler, 121 - }; 122 - 123 117 static int __init orion_timer_init(struct device_node *np) 124 118 { 125 119 unsigned long rate; ··· 166 172 sched_clock_register(orion_read_sched_clock, 32, rate); 167 173 168 174 /* setup timer1 as clockevent timer */ 169 - ret = setup_irq(irq, &orion_clkevt_irq); 175 + ret = request_irq(irq, orion_clkevt_irq_handler, IRQF_TIMER, 176 + "orion_event", NULL); 170 177 if (ret) { 171 178 pr_err("%pOFn: unable to setup irq\n", np); 172 179 return ret;
+4 -10
drivers/clocksource/timer-prima2.c
··· 165 165 .resume = sirfsoc_clocksource_resume, 166 166 }; 167 167 168 - static struct irqaction sirfsoc_timer_irq = { 169 - .name = "sirfsoc_timer0", 170 - .flags = IRQF_TIMER, 171 - .irq = 0, 172 - .handler = sirfsoc_timer_interrupt, 173 - .dev_id = &sirfsoc_clockevent, 174 - }; 175 - 176 168 /* Overwrite weak default sched_clock with more precise one */ 177 169 static u64 notrace sirfsoc_read_sched_clock(void) 178 170 { ··· 182 190 static int __init sirfsoc_prima2_timer_init(struct device_node *np) 183 191 { 184 192 unsigned long rate; 193 + unsigned int irq; 185 194 struct clk *clk; 186 195 int ret; 187 196 ··· 211 218 return -ENXIO; 212 219 } 213 220 214 - sirfsoc_timer_irq.irq = irq_of_parse_and_map(np, 0); 221 + irq = irq_of_parse_and_map(np, 0); 215 222 216 223 writel_relaxed(rate / PRIMA2_CLOCK_FREQ / 2 - 1, 217 224 sirfsoc_timer_base + SIRFSOC_TIMER_DIV); ··· 227 234 228 235 sched_clock_register(sirfsoc_read_sched_clock, 64, PRIMA2_CLOCK_FREQ); 229 236 230 - ret = setup_irq(sirfsoc_timer_irq.irq, &sirfsoc_timer_irq); 237 + ret = request_irq(irq, sirfsoc_timer_interrupt, IRQF_TIMER, 238 + "sirfsoc_timer0", &sirfsoc_clockevent); 231 239 if (ret) { 232 240 pr_err("Failed to setup irq\n"); 233 241 return ret;
+2 -8
drivers/clocksource/timer-pxa.c
··· 143 143 .resume = pxa_timer_resume, 144 144 }; 145 145 146 - static struct irqaction pxa_ost0_irq = { 147 - .name = "ost0", 148 - .flags = IRQF_TIMER | IRQF_IRQPOLL, 149 - .handler = pxa_ost0_interrupt, 150 - .dev_id = &ckevt_pxa_osmr0, 151 - }; 152 - 153 146 static int __init pxa_timer_common_init(int irq, unsigned long clock_tick_rate) 154 147 { 155 148 int ret; ··· 154 161 155 162 ckevt_pxa_osmr0.cpumask = cpumask_of(0); 156 163 157 - ret = setup_irq(irq, &pxa_ost0_irq); 164 + ret = request_irq(irq, pxa_ost0_interrupt, IRQF_TIMER | IRQF_IRQPOLL, 165 + "ost0", &ckevt_pxa_osmr0); 158 166 if (ret) { 159 167 pr_err("Failed to setup irq\n"); 160 168 return ret;
+3 -8
drivers/clocksource/timer-sp804.c
··· 168 168 .rating = 300, 169 169 }; 170 170 171 - static struct irqaction sp804_timer_irq = { 172 - .name = "timer", 173 - .flags = IRQF_TIMER | IRQF_IRQPOLL, 174 - .handler = sp804_timer_interrupt, 175 - .dev_id = &sp804_clockevent, 176 - }; 177 - 178 171 int __init __sp804_clockevents_init(void __iomem *base, unsigned int irq, struct clk *clk, const char *name) 179 172 { 180 173 struct clock_event_device *evt = &sp804_clockevent; ··· 193 200 194 201 writel(0, base + TIMER_CTRL); 195 202 196 - setup_irq(irq, &sp804_timer_irq); 203 + if (request_irq(irq, sp804_timer_interrupt, IRQF_TIMER | IRQF_IRQPOLL, 204 + "timer", &sp804_clockevent)) 205 + pr_err("%s: request_irq() failed\n", "timer"); 197 206 clockevents_config_and_register(evt, rate, 0xf, 0xffffffff); 198 207 199 208 return 0;
+2 -7
drivers/clocksource/timer-u300.c
··· 330 330 return IRQ_HANDLED; 331 331 } 332 332 333 - static struct irqaction u300_timer_irq = { 334 - .name = "U300 Timer Tick", 335 - .flags = IRQF_TIMER | IRQF_IRQPOLL, 336 - .handler = u300_timer_interrupt, 337 - }; 338 - 339 333 /* 340 334 * Override the global weak sched_clock symbol with this 341 335 * local implementation which uses the clocksource to get some ··· 414 420 u300_timer_base + U300_TIMER_APP_RGPT1); 415 421 416 422 /* Set up the IRQ handler */ 417 - ret = setup_irq(irq, &u300_timer_irq); 423 + ret = request_irq(irq, u300_timer_interrupt, 424 + IRQF_TIMER | IRQF_IRQPOLL, "U300 Timer Tick", NULL); 418 425 if (ret) 419 426 return ret; 420 427
+2 -8
drivers/clocksource/timer-vf-pit.c
··· 123 123 .rating = 300, 124 124 }; 125 125 126 - static struct irqaction pit_timer_irq = { 127 - .name = "VF pit timer", 128 - .flags = IRQF_TIMER | IRQF_IRQPOLL, 129 - .handler = pit_timer_interrupt, 130 - .dev_id = &clockevent_pit, 131 - }; 132 - 133 126 static int __init pit_clockevent_init(unsigned long rate, int irq) 134 127 { 135 128 __raw_writel(0, clkevt_base + PITTCTRL); 136 129 __raw_writel(PITTFLG_TIF, clkevt_base + PITTFLG); 137 130 138 - BUG_ON(setup_irq(irq, &pit_timer_irq)); 131 + BUG_ON(request_irq(irq, pit_timer_interrupt, IRQF_TIMER | IRQF_IRQPOLL, 132 + "VF pit timer", &clockevent_pit); 139 133 140 134 clockevent_pit.cpumask = cpumask_of(0); 141 135 clockevent_pit.irq = irq;
+3 -8
drivers/clocksource/timer-vt8500.c
··· 101 101 return IRQ_HANDLED; 102 102 } 103 103 104 - static struct irqaction irq = { 105 - .name = "vt8500_timer", 106 - .flags = IRQF_TIMER | IRQF_IRQPOLL, 107 - .handler = vt8500_timer_interrupt, 108 - .dev_id = &clockevent, 109 - }; 110 - 111 104 static int __init vt8500_timer_init(struct device_node *np) 112 105 { 113 106 int timer_irq, ret; ··· 132 139 133 140 clockevent.cpumask = cpumask_of(0); 134 141 135 - ret = setup_irq(timer_irq, &irq); 142 + ret = request_irq(timer_irq, vt8500_timer_interrupt, 143 + IRQF_TIMER | IRQF_IRQPOLL, "vt8500_timer", 144 + &clockevent); 136 145 if (ret) { 137 146 pr_err("%s: setup_irq failed for %s\n", __func__, 138 147 clockevent.name);
+6 -7
drivers/clocksource/timer-zevio.c
··· 53 53 54 54 struct clk *clk; 55 55 struct clock_event_device clkevt; 56 - struct irqaction clkevt_irq; 57 56 58 57 char clocksource_name[64]; 59 58 char clockevent_name[64]; ··· 171 172 /* Interrupt to occur when timer value matches 0 */ 172 173 writel(0, timer->base + IO_MATCH(TIMER_MATCH)); 173 174 174 - timer->clkevt_irq.name = timer->clockevent_name; 175 - timer->clkevt_irq.handler = zevio_timer_interrupt; 176 - timer->clkevt_irq.dev_id = timer; 177 - timer->clkevt_irq.flags = IRQF_TIMER | IRQF_IRQPOLL; 178 - 179 - setup_irq(irqnr, &timer->clkevt_irq); 175 + if (request_irq(irqnr, zevio_timer_interrupt, 176 + IRQF_TIMER | IRQF_IRQPOLL, 177 + timer->clockevent_name, timer)) { 178 + pr_err("%s: request_irq() failed\n", 179 + timer->clockevent_name); 180 + } 180 181 181 182 clockevents_config_and_register(&timer->clkevt, 182 183 clk_get_rate(timer->clk), 0x0001, 0xffff);
-1
include/linux/dw_apb_timer.h
··· 25 25 struct dw_apb_clock_event_device { 26 26 struct clock_event_device ced; 27 27 struct dw_apb_timer timer; 28 - struct irqaction irqaction; 29 28 void (*eoi)(struct dw_apb_timer *); 30 29 }; 31 30