Messages in this thread Patch in this message |  | | Subject | Re: signed int for interrupts?? | Date | Sun, 08 Sep 1996 17:00:03 -0400 | From | Steve <> |
| |
>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
|  |