lkml.org 
[lkml]   [1996]   [Sep]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
SubjectRe: signed int for interrupts??
Date
From

>On Sun, 8 Sep 1996, Jon Lewis wrote:
>
>> 5: 1649726484 + cyclades
>> 9: 12023652 53c8xx
>> 10: 231379880 3c509
>> 11: -2104643917 + cyclades
>
>Now I'm really confused. I did some looking, and found that the interrupt
>counters _are_ or at least appear to be unsigned int.
>
>In kernel_stat.h:
>struct kernel_stat {
>...
> unsigned int interrupts[NR_IRQS];
>...
>};
>
>So why did my Irq 11 counter wrap at 2^31 rather than 2^32?

After a little bit more of checking the kernel, I found that the integer value
for the interrupts is sprintf()ed into the buffer to printed with a %d (signed)
instead of a %u (unsigned). This tiny (and untested) patch against 2.0.18
should fix the problem.


--- linux/arch/i386/kernel/irq.c.orig Sun Sep 8 16:52:46 1996
+++ linux/arch/i386/kernel/irq.c Sun Sep 8 16:53:00 1996
@@ -232,7 +232,7 @@
action = irq_action[i];
if (!action)
continue;
- len += sprintf(buf+len, "%2d: %8d %c %s",
+ len += sprintf(buf+len, "%2d: %8u %c %s",
i, kstat.interrupts[i],
(action->flags & SA_INTERRUPT) ? '+' : ' ',
action->name);

Is this a valid thing to do? Or is there a reason it is %d ??

-Steve

\
 
 \ /
  Last update: 2005-03-22 13:38    [from the cache]
©2003-2011 Jasper Spaans