• AnilKumar Ch's avatar
    can: c_can: fix an interrupt thrash issue with c_can driver · 148c87c8
    AnilKumar Ch authored
    This patch fixes an interrupt thrash issue with c_can driver.
    
    In c_can_isr() function interrupts are disabled and enabled only in
    c_can_poll() function. c_can_isr() & c_can_poll() both read the
    irqstatus flag. However, irqstatus is always read as 0 in c_can_poll()
    because all C_CAN interrupts are disabled in c_can_isr(). This causes
    all interrupts to be re-enabled in c_can_poll() which in turn causes
    another interrupt since the event is not really handled. This keeps
    happening causing a flood of interrupts.
    
    To fix this, read the irqstatus register in isr and use the same cached
    value in the poll function.
    
    Cc: stable@kernel.org # 2.6.39+
    Signed-off-by: default avatarAnilKumar Ch <anilkumar@ti.com>
    Acked-by: default avatarWolfgang Grandegger <wg@grandegger.com>
    Signed-off-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
    148c87c8
c_can.c 31.1 KB