Re: [RFT][PATCH] iio: hid-sensor-trigger: Fix the race with user space powering up sensors

From: Bastien Nocera
Date: Fri Aug 11 2017 - 10:04:39 EST


Woot!

On Thu, 2017-08-10 at 16:24 -0700, Srinivas Pandruvada wrote:
> It has been reported for a while that with iio-sensor-proxy service the
> rotation only works after one suspend/resume cycle. This required a wait
> in the systemd unit file to avoid race. I found a Yoga 900 where I could
> reproduce this.
>
> The problem scenerio is:
> - During sensor driver init, enable run time PM and also set a
> auto-suspend for 3 seconds.
> This result in one runtime resume. But there is a check to avoid
> a powerup in this sequence, but rpm is active
> - User space iio-sensor-proxy tries to power up the sensor. Since rpm is
> active it will simply return. But sensors were not actually
> powered up in the prior sequence, so actaully the sensors will not work
> - After 3 seconds the auto suspend kicks
>
> If we add a wait in systemd service file to fire iio-sensor-proxy after
> 3 seconds, then now everything will work as the runtime resume will
> actually powerup the sensor as this is a user request.
>
> To avoid this:
> - Remove the check to match user requested state, this will cause a
> brief powerup, but if the iio-sensor-proxy starts immediately it will
> still work as the sensors are ON.
> - Also move the autosuspend delay to place when user requested turn off
> of sensors, like after user finished raw read or buffer disable
>
> Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@xxxxxxxxxxxxxxx>

Tested-by: Bastien Nocera <hadess@xxxxxxxxxx>

I'm still chasing a couple of bugs in the user-space side of things
caused by the removal of the timeout.

Thanks!