• Semen Protsenko's avatar
    gpio: max732x: Fix irq-events handler · 606f13e9
    Semen Protsenko authored
    MAX732X clears all pending interrupts on I2C read (when interrupts
    register is being read). Driver doesn't need to send any ACKs when
    interrupt was handled. So replace handle_edge_irq() with
    handle_simple_irq().
    
    Using handle_edge_irq() (w/o .irq_ack callback set) may lead to NULL
    pointer dereference in some cases. E.g. this was observed on
    hibernation process:
    
      Unable to handle kernel NULL pointer dereference at virtual address 0
      Backtrace:
      (handle_edge_irq) from (resend_irqs)
      (resend_irqs) from (tasklet_action)
      (tasklet_action) from (__do_softirq)
      (__do_softirq) from (run_ksoftirqd)
      (run_ksoftirqd) from (smpboot_thread_fn)
      (smpboot_thread_fn) from (kthread)
      (kthread) from (ret_from_fork)
    Signed-off-by: default avatarSemen Protsenko <semen.protsenko@globallogic.com>
    Reviewed-by: default avatarGrygorii Strashko <grygorii.strashko@linaro.org>
    Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    606f13e9
gpio-max732x.c 18.3 KB