clocksource/drivers/timer-of: Remove percpu irq related code
commit 471ef0b5a8aaca4296108e756b970acfc499ede4 upstream. 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: dc11bae785295 ("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> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
3157b81190
commit
0a821fa735
2 changed files with 4 additions and 14 deletions
|
@ -25,10 +25,7 @@ static void timer_of_irq_exit(struct of_timer_irq *of_irq)
|
||||||
|
|
||||||
struct clock_event_device *clkevt = &to->clkevt;
|
struct clock_event_device *clkevt = &to->clkevt;
|
||||||
|
|
||||||
if (of_irq->percpu)
|
free_irq(of_irq->irq, clkevt);
|
||||||
free_percpu_irq(of_irq->irq, clkevt);
|
|
||||||
else
|
|
||||||
free_irq(of_irq->irq, clkevt);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -42,9 +39,6 @@ static void timer_of_irq_exit(struct of_timer_irq *of_irq)
|
||||||
* - Get interrupt number by name
|
* - Get interrupt number by name
|
||||||
* - Get interrupt number by index
|
* - Get interrupt number by index
|
||||||
*
|
*
|
||||||
* When the interrupt is per CPU, 'request_percpu_irq()' is called,
|
|
||||||
* otherwise 'request_irq()' is used.
|
|
||||||
*
|
|
||||||
* Returns 0 on success, < 0 otherwise
|
* Returns 0 on success, < 0 otherwise
|
||||||
*/
|
*/
|
||||||
static int timer_of_irq_init(struct device_node *np,
|
static int timer_of_irq_init(struct device_node *np,
|
||||||
|
@ -69,12 +63,9 @@ static int timer_of_irq_init(struct device_node *np,
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = of_irq->percpu ?
|
ret = request_irq(of_irq->irq, of_irq->handler,
|
||||||
request_percpu_irq(of_irq->irq, of_irq->handler,
|
of_irq->flags ? of_irq->flags : IRQF_TIMER,
|
||||||
np->full_name, clkevt) :
|
np->full_name, clkevt);
|
||||||
request_irq(of_irq->irq, of_irq->handler,
|
|
||||||
of_irq->flags ? of_irq->flags : IRQF_TIMER,
|
|
||||||
np->full_name, clkevt);
|
|
||||||
if (ret) {
|
if (ret) {
|
||||||
pr_err("Failed to request irq %d for %pOF\n", of_irq->irq, np);
|
pr_err("Failed to request irq %d for %pOF\n", of_irq->irq, np);
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
@ -11,7 +11,6 @@
|
||||||
struct of_timer_irq {
|
struct of_timer_irq {
|
||||||
int irq;
|
int irq;
|
||||||
int index;
|
int index;
|
||||||
int percpu;
|
|
||||||
const char *name;
|
const char *name;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
irq_handler_t handler;
|
irq_handler_t handler;
|
||||||
|
|
Loading…
Reference in a new issue