On 05/05/17 01:32, Matt Ranostay wrote: > Using iio_trigger_poll() can oops when multiple interrupts > happen before the first is handled. > Ah. I see. This should cause all sorts of trouble and warnings. It's calling the irq_chip infrastructure without going through the dance necessary to make that happen from an irq context. This is indeed the simplest fix. Jonathan > Use iio_trigger_poll_chained() instead and use the timestamp > when processed, since it will be in theory be 2 ms max latency. > > Fixes: 24ddb0e4bba4 ("iio: Add AS3935 lightning sensor support") > Cc: stable@xxxxxxxxxxxxxxx > Signed-off-by: Matt Ranostay <matt.ranostay@xxxxxxxxxxxx> > --- > drivers/iio/proximity/as3935.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/iio/proximity/as3935.c b/drivers/iio/proximity/as3935.c > index ddf9bee89f77..d98d38227f26 100644 > --- a/drivers/iio/proximity/as3935.c > +++ b/drivers/iio/proximity/as3935.c > @@ -215,7 +215,7 @@ static irqreturn_t as3935_trigger_handler(int irq, void *private) > > st->buffer[0] = val & AS3935_DATA_MASK; > iio_push_to_buffers_with_timestamp(indio_dev, &st->buffer, > - pf->timestamp); > + iio_get_time_ns(indio_dev)); > err_read: > iio_trigger_notify_done(indio_dev->trig); > > @@ -244,7 +244,7 @@ static void as3935_event_work(struct work_struct *work) > > switch (val) { > case AS3935_EVENT_INT: > - iio_trigger_poll(st->trig); > + iio_trigger_poll_chained(st->trig); > break; > case AS3935_NOISE_INT: > dev_warn(&st->spi->dev, "noise level is too high\n"); >