Skip to content
  • Lars-Peter Clausen's avatar
    iio: events: Make iio_push_event() IRQ context save · 1b9dc91e
    Lars-Peter Clausen authored
    
    
    Currently it is not save to call iio_push_event() from hard IRQ context since
    the IIO event code uses spin_lock()/spin_unlock() and it is not save to mix
    calls to spin_lock()/spin_unlock() from different contexts on the same lock.
    E.g. if the lock is being held in iio_event_chrdev_read() and an interrupts
    kicks in and the interrupt handler calls iio_push_event() we end uo with a
    deadlock.
    
    This patch updates iio_push_event() to use spin_lock_irqsave()/
    spin_unlock_irqstrestore(), since it can be called from both IRQ and non-IRQ
    context. All other other users of the lock, which are always run in non-IRQ
    context, are updated to spin_lock_irq()/spin_unlock_irq().
    
    Signed-off-by: default avatarLars-Peter Clausen <lars@metafoo.de>
    Signed-off-by: default avatarJonathan Cameron <jic23@kernel.org>
    1b9dc91e