[PATCH v2 1/3] cobalt: Prepare for new signature of __request_percpu_irq() in 6.19
Florian Bezdeka <[email protected]>
| Newsgroups | dev.linux.lists.xenomai |
|---|---|
| Message-ID | <[email protected]> |
The signature of __request_percpu_irq() got one additional affinity parameter in 6.19 and 7.0 will remove the function entirely. Dovetail 6.19 will introduce a new dovetail specific service called request_percpu_irq_affinity_flags() that allows us to set flags and affinity at the same time. It might happen that older Dovetail versions get the new API via backports, so the re-#definement for older kernels might get obsolete earlier than dropping support for Dovetail < 6.19. Signed-off-by: Florian Bezdeka <[email protected]> --- include/cobalt/kernel/dovetail/pipeline/irq.h | 6 ++++++ include/cobalt/kernel/dovetail/pipeline/pipeline.h | 9 ++++----- include/cobalt/kernel/dovetail/pipeline/sirq.h | 9 ++++----- kernel/cobalt/dovetail/tick.c | 8 ++++---- 4 files changed, 18 insertions(+), 14 deletions(-) diff --git a/include/cobalt/kernel/dovetail/pipeline/irq.h b/include/cobalt/kernel/dovetail/pipeline/irq.h index 55d9b8ff17cd08e5e8c09aec393a1e23736c1b76..df0b8ceb05c25d655a331d238e7ef8ac8a6afeea 100644 --- a/include/cobalt/kernel/dovetail/pipeline/irq.h +++ b/include/cobalt/kernel/dovetail/pipeline/irq.h @@ -5,6 +5,12 @@ #ifndef _COBALT_KERNEL_DOVETAIL_IRQ_H #define _COBALT_KERNEL_DOVETAIL_IRQ_H +#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 19, 0) +#define request_percpu_irq_affinity_flags(irq, handler, flags, devname, \ + affinity, dev_id) \ + __request_percpu_irq(irq, handler, flags, devname, dev_id) +#endif + static inline void xnintr_init_proc(void) { /* N/A */ diff --git a/include/cobalt/kernel/dovetail/pipeline/pipeline.h b/include/cobalt/kernel/dovetail/pipeline/pipeline.h index 2e6e66a2d6d4dbf407d4ce42fff8b84acc2931d0..f5ee443ada3788b8b0261f77ae7da5d5f69ef9f2 100644 --- a/include/cobalt/kernel/dovetail/pipeline/pipeline.h +++ b/include/cobalt/kernel/dovetail/pipeline/pipeline.h @@ -11,6 +11,7 @@ #include <asm/xenomai/features.h> #include <asm/xenomai/syscall.h> #include <asm/syscall.h> +#include <pipeline/irq.h> #include <pipeline/machine.h> typedef unsigned long spl_t; @@ -42,11 +43,9 @@ static inline int pipeline_request_resched_ipi(void) return 0; /* Trap the out-of-band rescheduling interrupt. */ - return __request_percpu_irq(RESCHEDULE_OOB_IPI, - pipeline_reschedule_ipi_handler, - IRQF_OOB, - "Xenomai reschedule", - &cobalt_machine_cpudata); + return request_percpu_irq_affinity_flags( + RESCHEDULE_OOB_IPI, pipeline_reschedule_ipi_handler, IRQF_OOB, + "Xenomai reschedule", NULL, &cobalt_machine_cpudata); } static inline void pipeline_free_resched_ipi(void) diff --git a/include/cobalt/kernel/dovetail/pipeline/sirq.h b/include/cobalt/kernel/dovetail/pipeline/sirq.h index 1da9d13b217081ba52ef0444b60d236ddb9c8a9e..00c08af784588d5239cf399d69800c914221b210 100644 --- a/include/cobalt/kernel/dovetail/pipeline/sirq.h +++ b/include/cobalt/kernel/dovetail/pipeline/sirq.h @@ -9,6 +9,7 @@ #include <linux/irq_pipeline.h> #include <cobalt/kernel/assert.h> +#include <pipeline/irq.h> /* * Wrappers to create "synthetic IRQs" the Dovetail way. Those @@ -29,11 +30,9 @@ int pipeline_create_inband_sirq(irqreturn_t (*handler)(int irq, void *dev_id)) if (sirq == 0) return -EAGAIN; - ret = __request_percpu_irq(sirq, - handler, - IRQF_NO_THREAD, - "Inband sirq", - &cobalt_machine_cpudata); + ret = request_percpu_irq_affinity_flags(sirq, handler, IRQF_NO_THREAD, + "Inband sirq", NULL, + &cobalt_machine_cpudata); if (ret) { irq_dispose_mapping(sirq); diff --git a/kernel/cobalt/dovetail/tick.c b/kernel/cobalt/dovetail/tick.c index 873b62471eac758fba5b86fa36b8265b6284dc87..fa7ef09eaf39cdc1fca5c68f22f57da0c1320789 100644 --- a/kernel/cobalt/dovetail/tick.c +++ b/kernel/cobalt/dovetail/tick.c @@ -8,6 +8,7 @@ #include <linux/tick.h> #include <linux/clockchips.h> #include <cobalt/kernel/intr.h> +#include <pipeline/irq.h> #include <pipeline/tick.h> #include <cobalt/kernel/sched.h> #include <cobalt/kernel/timer.h> @@ -153,10 +154,9 @@ int pipeline_install_tick_proxy(void) * CPUs. */ if (num_possible_cpus() > 1) { - ret = __request_percpu_irq(TIMER_OOB_IPI, - tick_ipi_handler, - IRQF_OOB, "Xenomai timer IPI", - &cobalt_machine_cpudata); + ret = request_percpu_irq_affinity_flags( + TIMER_OOB_IPI, tick_ipi_handler, IRQF_OOB, + "Xenomai timer IPI", NULL, &cobalt_machine_cpudata); if (ret) return ret; } -- 2.53.0