On 13/05/16 19:43, Crestez Dan Leonard wrote: > This fixes a possible race where an interrupt arrives before complete > initialization and crashes because iio_trigger_get_drvdata returns NULL. > > Cc: Linus Walleij <linus.walleij@xxxxxxxxxx> > Cc: Giuseppe Barba <giuseppe.barba@xxxxxx> > Cc: Denis Ciocca <denis.ciocca@xxxxxx> > Signed-off-by: Crestez Dan Leonard <leonard.crestez@xxxxxxxxx> Looks 'obviously' correct to me, but I'd like Denis to confirm on this one. Jonathan > --- > I ran into this while breaking the driver. But since the interrupt line can be > shared the handler should always be able to accept and ignore a call. > > drivers/iio/common/st_sensors/st_sensors_trigger.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > > diff --git a/drivers/iio/common/st_sensors/st_sensors_trigger.c b/drivers/iio/common/st_sensors/st_sensors_trigger.c > index 98bd5b3..7c2e6ab 100644 > --- a/drivers/iio/common/st_sensors/st_sensors_trigger.c > +++ b/drivers/iio/common/st_sensors/st_sensors_trigger.c > @@ -89,6 +89,10 @@ int st_sensors_allocate_trigger(struct iio_dev *indio_dev, > return -ENOMEM; > } > > + iio_trigger_set_drvdata(sdata->trig, indio_dev); > + sdata->trig->ops = trigger_ops; > + sdata->trig->dev.parent = sdata->dev; > + > irq = sdata->get_irq_data_ready(indio_dev); > irq_trig = irqd_get_trigger_type(irq_get_irq_data(irq)); > /* > @@ -150,10 +154,6 @@ int st_sensors_allocate_trigger(struct iio_dev *indio_dev, > goto iio_trigger_free; > } > > - iio_trigger_set_drvdata(sdata->trig, indio_dev); > - sdata->trig->ops = trigger_ops; > - sdata->trig->dev.parent = sdata->dev; > - > err = iio_trigger_register(sdata->trig); > if (err < 0) { > dev_err(&indio_dev->dev, "failed to register iio trigger.\n"); > -- To unsubscribe from this list: send the line "unsubscribe linux-iio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html