• Paul Mackerras's avatar
    [PATCH] Fix PREEMPT_ACTIVE definition · d2466999
    Paul Mackerras authored
    When the generic IRQ stuff went in, it seems that HARDIRQ_BITS got bumped
    from 9 (for ppc64) up to 12.  Consequently, the PREEMPT_ACTIVE bit is now
    within HARDIRQ_MASK, and I get in_interrupt() falsely returning true when
    PREEMPT_ACTIVE is set, and thus a BUG_ON tripping in arch/ppc64/mm/tlb.c.
    
    The patch below fixes this by changing PREEMPT_ACTIVE to 0x10000000.  I
    have changed the PREEMPT_ACTIVE definitions for each of the architectures
    that define CONFIG_GENERIC_HARDIRQS (i386, ppc, ppc64, x86_64) and fixed
    the comment in include/linux/hardirq.h.  We could perhaps move the
    PREEMPT_ACTIVE definition to include/linux/hardirq.h - I don't know why it
    is still per-arch.
    Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
    Acked-by: default avatarIngo Molnar <mingo@elte.hu>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    d2466999
thread_info.h 4.24 KB