From mboxrd@z Thu Jan 1 00:00:00 1970 References: <20210115011639.15390-1-hongzhan.chen@intel.com> From: Philippe Gerum Subject: Re: [PATCH V2 1/8] dovetail/pipeline: implement out-of-band irq management and handling In-reply-to: <20210115011639.15390-1-hongzhan.chen@intel.com> Date: Sat, 16 Jan 2021 12:38:22 +0100 Message-ID: <877dodt8lt.fsf@xenomai.org> MIME-Version: 1.0 Content-Type: text/plain List-Id: Discussions about the Xenomai project List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: hongzha1 Cc: xenomai@xenomai.org hongzha1 via Xenomai writes: > implement oob irq request and free and post for both > TIMER_OOB_IPI and RESCHEDULE_OOB_IPI > > Signed-off-by: hongzha1 > > diff --git a/include/cobalt/kernel/dovetail/pipeline/pipeline.h b/include/cobalt/kernel/dovetail/pipeline/pipeline.h > index 23c4a2c18..13fbd7942 100644 > --- a/include/cobalt/kernel/dovetail/pipeline/pipeline.h > +++ b/include/cobalt/kernel/dovetail/pipeline/pipeline.h > @@ -8,9 +8,12 @@ > #include > #include > #include > +#include > > typedef unsigned long spl_t; > > +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,28 @@ 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 +63,29 @@ static inline void pipeline_send_resched_ipi(const struct cpumask *dest) > * Trigger the out-of-band rescheduling interrupt on remote > * CPU(s). > */ > - TODO(); > + irq_send_oob_ipi(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 +93,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_send_oob_ipi(TIMER_OOB_IPI, dest); > } > > #endif Merged, fixing up the short log on the fly, in order to align on the matching I-pipe patch as follows: "dovetail/irq: dovetail: implement out-of-band irq management and handling" Thanks, -- Philippe.