On Tue, 2007-07-31 at 20:17 +0200, Jan Kiszka wrote:
> Jan Kiszka wrote:
> > Oh my dear. The ground may open and swallow me. This crappy piece of
> > optimisation in xnintr_edge_shirq_handler() I introduced both to 2.4 and
> > (sadly) the 2.3.x stable series cannot work. It must stay as it used to:
> > 
> > --- ksrc/nucleus/intr.c     (revision 2871)
> > +++ ksrc/nucleus/intr.c     (working copy)
> > @@ -296,15 +296,15 @@ static void xnintr_edge_shirq_handler(un
> >             s |= ret;
> > 
> >             if (code == XN_ISR_HANDLED) {
> > -                   if (!(end = (intr->next)))
> > -                           end = shirq->handlers;
> > +                   end = NULL;
> >                     xnstat_counter_inc(
> >                             &intr->stat[xnsched_cpu(sched)].hits);
> >                     xnstat_runtime_lazy_switch(sched,
> >                             &intr->stat[xnsched_cpu(sched)].account,
> >                             start);
> >                     start = xnstat_runtime_now();
> > -           }
> > +           } else if (code == XN_ISR_NONE && end == NULL)
> > +                   end = intr;
> > 
> >             if (counter++ > MAX_EDGEIRQ_COUNTER)
> >                     break;
> > (that's for 2.3.x)
> 
> For 2.4, one may consider to assume now that "code != XN_ISR_HANDLE =>
> code == XN_ISR_NONE":
> 

Merged, thanks.

> --- ksrc/nucleus/intr.c       (revision 2871)
> +++ ksrc/nucleus/intr.c       (working copy)
> @@ -251,15 +251,15 @@ static void xnintr_edge_shirq_handler(un
>               s |= ret;
> 
>               if (code == XN_ISR_HANDLED) {
> -                     if (!(end = (intr->next)))
> -                             end = shirq->handlers;
> +                     end = NULL;
>                       xnstat_counter_inc(
>                               &intr->stat[xnsched_cpu(sched)].hits);
>                       xnstat_exectime_lazy_switch(sched,
>                               &intr->stat[xnsched_cpu(sched)].account,
>                               start);
>                       start = xnstat_exectime_now();
> -             }
> +             } else if (end == NULL)
> +                     end = intr;
> 
>               if (counter++ > MAX_EDGEIRQ_COUNTER)
>                       break;
> 
> Jan
> 
-- 
Philippe.



_______________________________________________
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core

Reply via email to