[Bugme-new] [Bug 13476] New: wrong #endif

bugzilla-daemon at bugzilla.kernel.org bugzilla-daemon at bugzilla.kernel.org
Sun Jun 7 07:02:50 PDT 2009


http://bugzilla.kernel.org/show_bug.cgi?id=13476

           Summary: wrong #endif
           Product: Other
           Version: 2.5
    Kernel Version: 2.6.29.4
          Platform: All
        OS/Version: Linux
              Tree: Mainline
            Status: NEW
          Severity: normal
          Priority: P1
         Component: Other
        AssignedTo: other_other at kernel-bugs.osdl.org
        ReportedBy: ettl.martin at gmx.de
        Regression: No


Hello,

i've detected a wrong #ifdef ...#endif sequence. This was detected by cppcheck,
a static code analysis tool.

At file :
linux-2.6.29.4/arch/cris/arch-v32/kernel/irq.c

Take a look at the code, to function 
void crisv32_do_multiple(struct pt_regs* regs)
{
    int cpu;
    int mask;
    int masked[NBR_REGS];
    int bit;
    int i;

    cpu = smp_processor_id();

    /* An extra irq_enter here to prevent softIRQs to run after
         * each do_IRQ. This will decrease the interrupt latency.
     */
    irq_enter();

    for (i = 0; i < NBR_REGS; i++) {
        /* Get which IRQs that happend. */
        masked[i] = REG_RD_INT_VECT(intr_vect, irq_regs[cpu],
            r_masked_vect, i);

        /* Calculate new IRQ mask with these IRQs disabled. */
        mask = REG_RD_INT_VECT(intr_vect, irq_regs[cpu], rw_mask, i);
        mask &= ~masked[i];

    /* Timer IRQ is never masked */
#ifdef TIMER_VECT1
        if ((i == 1) && (masked[0] & TIMER_MASK))
            mask |= TIMER_MASK;
#else
        if ((i == 0) && (masked[0] & TIMER_MASK))
            mask |= TIMER_MASK;
#endif
        /* Block all the IRQs */
        REG_WR_INT_VECT(intr_vect, irq_regs[cpu], rw_mask, i, mask);

    /* Check for timer IRQ and handle it special. */
#ifdef TIMER_VECT1
        if ((i == 1) && (masked[i] & TIMER_MASK)) {
            masked[i] &= ~TIMER_MASK;
            do_IRQ(TIMER0_INTR_VECT, regs);
        }
#else
        if ((i == 0) && (masked[i] & TIMER_MASK)) {
             masked[i] &= ~TIMER_MASK;
             do_IRQ(TIMER0_INTR_VECT, regs);
        }
    }
#endif

.....

Here, the last #endif is at the wrong place. It has to be before the bracket is
closed. This is the corrected version:

#ifdef TIMER_VECT1
        if ((i == 1) && (masked[i] & TIMER_MASK)) {
            masked[i] &= ~TIMER_MASK;
            do_IRQ(TIMER0_INTR_VECT, regs);
        }
#else
        if ((i == 0) && (masked[i] & TIMER_MASK)) {
             masked[i] &= ~TIMER_MASK;
             do_IRQ(TIMER0_INTR_VECT, regs);
        }
#endif
    }


Best regards

Martin Ettl

-- 
Configure bugmail: http://bugzilla.kernel.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.


More information about the Bugme-new mailing list