Re: [patch] irqlock patch -G3. [was Re: odd memory corruption in 2.5.27?]

From: Linus Torvalds (torvalds@transmeta.com)
Date: Tue Jul 23 2002 - 21:15:52 EST


Ingo,
 you really shouldn't use a generic #define like IRQ_MASK for something as
obscure as the mask for preemption bits (that apparently gets used
exactly _once_ in the same header file that defines it).

That #define is already used in the kernel inside various files, and from
the things I looked at, other users had more reason to call their stuff
IRQ_MASK than the new code has.

Also, please don't do things like

        #define NR_PREEMPT 256

when what you really are doing is doling out bits rather than "numbers".

So I think you'd be better off doing

        #define PREEMPT_BITS 8
        #define HARDIRQ_BITS 8
        #define SOFTIRQ_BITS 8

        #define PREEMPT_SHIFT 0
        #define HARDIRQ_SHIFT (PREEMPT_SHIFT + PREEMPT_BITS)
        #define SOFTIRQ_SHIFT (HARDIRQ_SHIFT + PREEMPT_BITS)

        #define __MASK(x) ((1UL << (x))-1)

        #define PREEMPT_MASK (__MASK(PREEMPT_BITS) << PREEMPT_SHIFT)
        #define HARDIRQ_MASK (__MASK(HARDIRQ_BITS) << HARDIRQ_SHIFT)
        #define SOFTIRQ_MASK (__MASK(SOFTIRQ_BITS) << SOFTIRQ_SHIFT)

        #define hardirq_count() (preempt_count() & HARDIRQ_MASK)
        #define softirq_count() (preempt_count() & SOFTIRQ_MASK)
        #define irq_count() (preempt_count() & (HARDIRQ_MASK | SOFTIRQ_MASK))

which creates bitmasks from bit-operations rather than doing non-bitwise
arithmetic to get them from magic values that have to be powers-of-2.

And avoids using too generic a name (ie IRQ_MASK is gone).

Ehh?

                Linus

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Tue Jul 23 2002 - 22:00:45 EST