Skip to content

Commit 471ef0b

Browse files
committed
clocksource/drivers/timer-of: Remove percpu irq related code
GCC's named address space checks errors out with: drivers/clocksource/timer-of.c: In function ‘timer_of_irq_exit’: drivers/clocksource/timer-of.c:29:46: error: passing argument 2 of ‘free_percpu_irq’ from pointer to non-enclosed address space 29 | free_percpu_irq(of_irq->irq, clkevt); | ^~~~~~ In file included from drivers/clocksource/timer-of.c:8: ./include/linux/interrupt.h:201:43: note: expected ‘__seg_gs void *’ but argument is of type ‘struct clock_event_device *’ 201 | extern void free_percpu_irq(unsigned int, void __percpu *); | ^~~~~~~~~~~~~~~ drivers/clocksource/timer-of.c: In function ‘timer_of_irq_init’: drivers/clocksource/timer-of.c:74:51: error: passing argument 4 of ‘request_percpu_irq’ from pointer to non-enclosed address space 74 | np->full_name, clkevt) : | ^~~~~~ ./include/linux/interrupt.h:190:56: note: expected ‘__seg_gs void *’ but argument is of type ‘struct clock_event_device *’ 190 | const char *devname, void __percpu *percpu_dev_id) Sparse warns about: timer-of.c:29:46: warning: incorrect type in argument 2 (different address spaces) timer-of.c:29:46: expected void [noderef] __percpu * timer-of.c:29:46: got struct clock_event_device *clkevt timer-of.c:74:51: warning: incorrect type in argument 4 (different address spaces) timer-of.c:74:51: expected void [noderef] __percpu *percpu_dev_id timer-of.c:74:51: got struct clock_event_device *clkevt It appears the code is incorrect as reported by Uros Bizjak: "The referred code is questionable as it tries to reuse the clkevent pointer once as percpu pointer and once as generic pointer, which should be avoided." This change removes the percpu related code as no drivers is using it. [Daniel: Fixed the description] Fixes: dc11bae ("clocksource/drivers: Add timer-of common init routine") Reported-by: Uros Bizjak <ubizjak@gmail.com> Tested-by: Uros Bizjak <ubizjak@gmail.com> Link: https://lore.kernel.org/r/20240819100335.2394751-1-daniel.lezcano@linaro.org Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
1 parent 431c164 commit 471ef0b

File tree

2 files changed

+4
-14
lines changed

2 files changed

+4
-14
lines changed

drivers/clocksource/timer-of.c

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,7 @@ static __init void timer_of_irq_exit(struct of_timer_irq *of_irq)
2525

2626
struct clock_event_device *clkevt = &to->clkevt;
2727

28-
if (of_irq->percpu)
29-
free_percpu_irq(of_irq->irq, clkevt);
30-
else
31-
free_irq(of_irq->irq, clkevt);
28+
free_irq(of_irq->irq, clkevt);
3229
}
3330

3431
/**
@@ -42,9 +39,6 @@ static __init void timer_of_irq_exit(struct of_timer_irq *of_irq)
4239
* - Get interrupt number by name
4340
* - Get interrupt number by index
4441
*
45-
* When the interrupt is per CPU, 'request_percpu_irq()' is called,
46-
* otherwise 'request_irq()' is used.
47-
*
4842
* Returns 0 on success, < 0 otherwise
4943
*/
5044
static __init int timer_of_irq_init(struct device_node *np,
@@ -69,12 +63,9 @@ static __init int timer_of_irq_init(struct device_node *np,
6963
return -EINVAL;
7064
}
7165

72-
ret = of_irq->percpu ?
73-
request_percpu_irq(of_irq->irq, of_irq->handler,
74-
np->full_name, clkevt) :
75-
request_irq(of_irq->irq, of_irq->handler,
76-
of_irq->flags ? of_irq->flags : IRQF_TIMER,
77-
np->full_name, clkevt);
66+
ret = request_irq(of_irq->irq, of_irq->handler,
67+
of_irq->flags ? of_irq->flags : IRQF_TIMER,
68+
np->full_name, clkevt);
7869
if (ret) {
7970
pr_err("Failed to request irq %d for %pOF\n", of_irq->irq, np);
8071
return ret;

drivers/clocksource/timer-of.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
struct of_timer_irq {
1212
int irq;
1313
int index;
14-
int percpu;
1514
const char *name;
1615
unsigned long flags;
1716
irq_handler_t handler;

0 commit comments

Comments
 (0)