On Sun, 2019-07-21 at 18:23 +0100, Jonathan Cameron wrote: > [External] > > On Fri, 19 Jul 2019 00:14:05 -0400 > Sasha Levin <sashal@xxxxxxxxxx> wrote: > > > From: Alexandru Ardelean <alexandru.ardelean@xxxxxxxxxx> > > > > [ Upstream commit 05b8bcc96278c9ef927a6f25a98e233e55de42e1 ] > > > > The iio_triggered_buffer_{predisable,postenable} functions attach/detach > > the poll functions. > > > > For the predisable hook, the disable code should occur before detaching > > the poll func, and for the postenable hook, the poll func should be > > attached before the enable code. > > > > Signed-off-by: Alexandru Ardelean <alexandru.ardelean@xxxxxxxxxx> > > Acked-by: Denis Ciocca <denis.ciocca@xxxxxx> > > Signed-off-by: Jonathan Cameron <Jonathan.Cameron@xxxxxxxxxx> > > Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx> > Hi Sasha, > > This should do any harm, but I deliberately didn't cc stable on > this one. > > Alex, my assumption on this one is that it was fixing a logical > ordering problem, but one that had no visible impact. > Whilst the pollfunc will be attached too early, the trigger > will be disabled for the whole of this function anyway so > it shouldn't cause any visible problem. Is that a correct interpretation? Yes. That is correct. Maybe I'll change the commit title format so that there is no confusion. It's a fix, but not in the sense that something was broken. Just something that is the realm of cleaning up. Thanks Alex > There are going to be a few more similar fixes in the near future > as Alex is trying to tidy up various paths so we can do a general > bit of refactoring. > > If I'm too late for this, then not a problem, just noise > in the stable release. > > Jonathan > > > > --- > > drivers/iio/accel/st_accel_buffer.c | 22 +++++++++++++--------- > > 1 file changed, 13 insertions(+), 9 deletions(-) > > > > diff --git a/drivers/iio/accel/st_accel_buffer.c b/drivers/iio/accel/st_accel_buffer.c > > index a1e642ee13d6..4f838277184a 100644 > > --- a/drivers/iio/accel/st_accel_buffer.c > > +++ b/drivers/iio/accel/st_accel_buffer.c > > @@ -46,17 +46,19 @@ static int st_accel_buffer_postenable(struct iio_dev *indio_dev) > > goto allocate_memory_error; > > } > > > > - err = st_sensors_set_axis_enable(indio_dev, > > - (u8)indio_dev->active_scan_mask[0]); > > + err = iio_triggered_buffer_postenable(indio_dev); > > if (err < 0) > > goto st_accel_buffer_postenable_error; > > > > - err = iio_triggered_buffer_postenable(indio_dev); > > + err = st_sensors_set_axis_enable(indio_dev, > > + (u8)indio_dev->active_scan_mask[0]); > > if (err < 0) > > - goto st_accel_buffer_postenable_error; > > + goto st_sensors_set_axis_enable_error; > > > > return err; > > > > +st_sensors_set_axis_enable_error: > > + iio_triggered_buffer_predisable(indio_dev); > > st_accel_buffer_postenable_error: > > kfree(adata->buffer_data); > > allocate_memory_error: > > @@ -65,20 +67,22 @@ static int st_accel_buffer_postenable(struct iio_dev *indio_dev) > > > > static int st_accel_buffer_predisable(struct iio_dev *indio_dev) > > { > > - int err; > > + int err, err2; > > struct st_sensor_data *adata = iio_priv(indio_dev); > > > > - err = iio_triggered_buffer_predisable(indio_dev); > > - if (err < 0) > > - goto st_accel_buffer_predisable_error; > > - > > err = st_sensors_set_axis_enable(indio_dev, ST_SENSORS_ENABLE_ALL_AXIS); > > if (err < 0) > > goto st_accel_buffer_predisable_error; > > > > err = st_sensors_set_enable(indio_dev, false); > > + if (err < 0) > > + goto st_accel_buffer_predisable_error; > > > > st_accel_buffer_predisable_error: > > + err2 = iio_triggered_buffer_predisable(indio_dev); > > + if (!err) > > + err = err2; > > + > > kfree(adata->buffer_data); > > return err; > > }