From mboxrd@z Thu Jan 1 00:00:00 1970 From: compudj@krystal.dyndns.org (Mathieu Desnoyers) Date: Wed, 15 Oct 2008 10:09:26 -0400 Subject: [ltt-dev] [BUG] [PATCH] LTTV - interrupt handler time calculation is wrong in case of nested interrupts In-Reply-To: <20081015140300.GA30267@Krystal> References: <3cc7a0df0810092137m3bebb6e0r97b29a7e5d685075@mail.gmail.com> <20081015140300.GA30267@Krystal> Message-ID: <20081015140926.GA31015@Krystal> Integrated in lttv-0.11.2-15102008. Thanks ! Mathieu * Mathieu Desnoyers (compudj at krystal.dyndns.org) wrote: > Hi Gaurav, > > Your fix seems appropriate, I'll merge it. > > Thanks ! > > Mathieu > > * Gaurav Singh (gausinghnsit at gmail.com) wrote: > > Hi all, > > > > I was using the interrupt handler plugin and noticed that sometimes > > the timer interrupt handler was taking a lot of time. Specifically > > the max time indicated by the plugin was wrong. This was because the > > time calculated by the plugin in case of nested interrupts is wrong. > > > > Nested interrupt: > > Interrupt 1 (entry) .... 1 > > Interrupt 2(entry).....2 > > Interrupt 2 (exit) ..... 3 > > Interrupt 3 (exit) ..... 4 > > > > The plugin did the following calculation: > > Time for 1st interrupt = timeat (3) - timeat (1) > > Time for 2nd interrupt = timeat (4) - timeat (2) > > > > > > The following patch corrects this anamoly. Basically it takes the up > > the most recent interrupt and pairs the irq_exit with it. Please check > > if this works for you. > > > > diff -uprN lttv-0.10.0-pre11-10032008/lttv/modules/gui/interrupts/interrupts.c > > ../lttv-0.10.0-pre11-10032008/lttv/modules/gui/interrupts/interrupts.c > > --- lttv-0.10.0-pre11-10032008/lttv/modules/gui/interrupts/interrupts.c > > 2007-10-16 06:44:40.000000000 +0530 > > +++ ../lttv-0.10.0-pre11-10032008/lttv/modules/gui/interrupts/interrupts.c > > 2008-09-29 15:13:02.000000000 +0530 > > @@ -583,7 +583,7 @@ static void CalculateData(LttTime time_e > > LttTime duration; > > GArray *FirstRequestIrqExit = event_data->FirstRequestIrqExit; > > GArray *FirstRequestIrqEntry = event_data->FirstRequestIrqEntry; > > - for(i = 0; i < FirstRequestIrqEntry->len; i++) > > + for(i = FirstRequestIrqEntry->len-1; i >=0; i--) > > { > > element = &g_array_index(FirstRequestIrqEntry,irq_entry,i); > > if(element->cpu_id == cpu_id) > > > > > > > > Regards, > > Gaurav > > > > -- > Mathieu Desnoyers > OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68 > > _______________________________________________ > ltt-dev mailing list > ltt-dev at lists.casi.polymtl.ca > http://lists.casi.polymtl.ca/cgi-bin/mailman/listinfo/ltt-dev > -- Mathieu Desnoyers OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68