All of lore.kernel.org
 help / color / mirror / Atom feed
* [Xenomai-core] [PATCH] Revert broken edge_shirq optimisation
@ 2007-07-31 18:05 Jan Kiszka
  2007-07-31 18:17 ` Jan Kiszka
  2007-07-31 18:29 ` Philippe Gerum
  0 siblings, 2 replies; 4+ messages in thread
From: Jan Kiszka @ 2007-07-31 18:05 UTC (permalink / raw)
  To: Philippe Gerum; +Cc: xenomai-core

[-- Attachment #1: Type: text/plain, Size: 1144 bytes --]

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)

Once "end" is moved forward to the next handler in the chain, the loop
termination condition "intr==end" will trigger on the immediately
following round, even if there are still events pending. Utterly broken.

Philippe, please quickly apply -- and don't tell anyone who did this.

Jan


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 250 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2007-07-31 18:29 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-07-31 18:05 [Xenomai-core] [PATCH] Revert broken edge_shirq optimisation Jan Kiszka
2007-07-31 18:17 ` Jan Kiszka
2007-07-31 18:29   ` Philippe Gerum
2007-07-31 18:29 ` Philippe Gerum

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.