[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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.