All of lore.kernel.org
 help / color / mirror / Atom feed
From: hongzha1 <hongzhan.chen@intel.com>
To: Xenomai@xenomai.org
Subject: [PATCH 06/10] dovetail/pipeline: implement oob irq request and free and post for both TIMER_OOB_IPI and RESCHEDULE_OOB_IPI
Date: Mon, 11 Jan 2021 01:43:14 -0500	[thread overview]
Message-ID: <20210111064318.6154-6-hongzhan.chen@intel.com> (raw)
In-Reply-To: <20210111064318.6154-1-hongzhan.chen@intel.com>

Signed-off-by: hongzha1 <hongzhan.chen@intel.com>
---
 .../kernel/dovetail/pipeline/pipeline.h       | 44 ++++++++++++++-----
 1 file changed, 34 insertions(+), 10 deletions(-)

diff --git a/include/cobalt/kernel/dovetail/pipeline/pipeline.h b/include/cobalt/kernel/dovetail/pipeline/pipeline.h
index 23c4a2c18..a345e1399 100644
--- a/include/cobalt/kernel/dovetail/pipeline/pipeline.h
+++ b/include/cobalt/kernel/dovetail/pipeline/pipeline.h
@@ -8,9 +8,12 @@
 #include <linux/irq_pipeline.h>
 #include <cobalt/kernel/assert.h>
 #include <asm/xenomai/features.h>
+#include <pipeline/machine.h>
 
 typedef unsigned long spl_t;
 
+extern void xnintr_core_clock_handler(void);
+
 /*
  * We only keep the LSB when testing in SMP mode in order to strip off
  * the recursion marker (0x2) the nklock may store there.
@@ -30,18 +33,29 @@ typedef unsigned long spl_t;
 
 #ifdef CONFIG_SMP
 
+static irqreturn_t reschedule_interrupt_handler(int irq, void *dev_id)
+{
+
+	/* Will reschedule from irq_exit_pipeline. */
+
+	return IRQ_HANDLED;
+}
+
+
 static inline int pipeline_request_resched_ipi(void (*handler)(void))
 {
 	/* Trap the out-of-band rescheduling interrupt. */
-	TODO();
-
-	return 0;
+	return __request_percpu_irq(RESCHEDULE_OOB_IPI,
+			reschedule_interrupt_handler,
+			IRQF_OOB,
+			"Xenomai reschedule",
+			&cobalt_machine_cpudata);
 }
 
 static inline void pipeline_free_resched_ipi(void)
 {
 	/* Release the out-of-band rescheduling interrupt. */
-	TODO();
+	free_percpu_irq(RESCHEDULE_OOB_IPI, &cobalt_machine_cpudata);
 }
 
 static inline void pipeline_send_resched_ipi(const struct cpumask *dest)
@@ -50,21 +64,31 @@ static inline void pipeline_send_resched_ipi(const struct cpumask *dest)
 	 * Trigger the out-of-band rescheduling interrupt on remote
 	 * CPU(s).
 	 */
-	TODO();
+	irq_pipeline_send_remote(RESCHEDULE_OOB_IPI, dest);
 }
 
+static irqreturn_t timer_ipi_interrupt_handler(int irq, void *dev_id)
+{
+	xnintr_core_clock_handler();
+
+	return IRQ_HANDLED;
+}
+
+
 static inline int pipeline_request_timer_ipi(void (*handler)(void))
 {
 	/* Trap the out-of-band timer interrupt. */
-	TODO();
-
-	return 0;
+	return __request_percpu_irq(TIMER_OOB_IPI,
+			timer_ipi_interrupt_handler,
+			IRQF_OOB, "Xenomai timer IPI",
+			&cobalt_machine_cpudata);
 }
 
 static inline void pipeline_free_timer_ipi(void)
 {
 	/* Release the out-of-band timer interrupt. */
-	TODO();
+	free_percpu_irq(TIMER_OOB_IPI,
+		&cobalt_machine_cpudata);
 }
 
 static inline void pipeline_send_timer_ipi(const struct cpumask *dest)
@@ -72,7 +96,7 @@ static inline void pipeline_send_timer_ipi(const struct cpumask *dest)
 	/*
 	 * Trigger the out-of-band timer interrupt on remote CPU(s).
 	 */
-	TODO();
+	irq_pipeline_send_remote(TIMER_OOB_IPI, dest);
 }
 
 #endif
-- 
2.17.1



  parent reply	other threads:[~2021-01-11  6:43 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-11  6:43 [PATCH 01/10] dovetail/sirq: implement sirq request and free and post hongzha1
2021-01-11  6:43 ` [PATCH 02/10] dovetail/clock: implement pipeline_read_cycle_counter hongzha1
2021-01-11 17:26   ` Philippe Gerum
2021-01-11  6:43 ` [PATCH 03/10] dovetail/clock: implement pipeline_get_host_time hongzha1
2021-01-11 17:26   ` Philippe Gerum
2021-01-11  6:43 ` [PATCH 04/10] dovetail/sched: implement pipeline_init_shadow_tcb and pipeline_init_root_tcb hongzha1
2021-01-11 17:30   ` Philippe Gerum
2021-01-11  6:43 ` [PATCH 05/10] dovetail/init: implement Xenomai stage enabling and disabling hongzha1
2021-01-11 17:31   ` Philippe Gerum
2021-01-11  6:43 ` hongzha1 [this message]
2021-01-12 16:39   ` [PATCH 06/10] dovetail/pipeline: implement oob irq request and free and post for both TIMER_OOB_IPI and RESCHEDULE_OOB_IPI Philippe Gerum
2021-01-12 16:47     ` Philippe Gerum
2021-01-11  6:43 ` [PATCH 07/10] dovetail/tick: implement proxy tick device installing and uninstalling hongzha1
2021-01-11  6:43 ` [PATCH 08/10] dovetail/clock: implement pipeline_set_timer_shot to trigger tick shot hongzha1
2021-01-11  6:43 ` [PATCH 09/10] dovetail/clock: implement pipeline_timer_name to get name of real device hongzha1
2021-01-12  1:20   ` chensong
2021-01-12  1:35     ` Chen, Hongzhan
2021-01-12  1:41       ` chensong
2021-01-12 16:52   ` Philippe Gerum
2021-01-11  6:43 ` [PATCH 10/10] dovetail/kevents: dovetail: implement handle_ptrace_cont hongzha1
2021-01-11 12:17 ` [PATCH 01/10] dovetail/sirq: implement sirq request and free and post Jan Kiszka
2021-01-11 13:05   ` Philippe Gerum
2021-01-11 13:16     ` Jan Kiszka
2021-01-11 13:29       ` Philippe Gerum
2021-01-11 17:23 ` Philippe Gerum

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210111064318.6154-6-hongzhan.chen@intel.com \
    --to=hongzhan.chen@intel.com \
    --cc=Xenomai@xenomai.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.