Re: [PATCH] Input: pwm-beeper - defer pwm config if pwm can sleep
From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date: 2016-02-22 19:46:45
Also in:
lkml
On Wed, Feb 17, 2016 at 02:19:26PM +0100, Manfred Schlaegl wrote:
quoted hunk ↗ jump to hunk
If the pwm can sleep defer actions to it using a worker. A similar approach was used in leds-pwm (c971ff185) Trigger: On a Freescale i.MX53 based board we ran into "BUG: scheduling while atomic" because input_inject_event locks interrupts, but imx_pwm_config_v2 sleeps. Tested on Freescale i.MX53 SoC with 4.5-rc1 and 4.1. Unmodified applicable to * 4.5-rc4 * 4.4.1 (stable) * 4.3.5 (stable) * 4.1.18 (longterm) Modified applicable to * 3.18.27 (longterm) Signed-off-by: Manfred Schlaegl <redacted> --- drivers/input/misc/pwm-beeper.c | 62 +++++++++++++++++++++++++++++------------ 1 file changed, 44 insertions(+), 18 deletions(-)diff --git a/drivers/input/misc/pwm-beeper.c b/drivers/input/misc/pwm-beeper.c index f2261ab..c160b5e 100644 --- a/drivers/input/misc/pwm-beeper.c +++ b/drivers/input/misc/pwm-beeper.c@@ -20,21 +20,42 @@ #include <linux/platform_device.h> #include <linux/pwm.h> #include <linux/slab.h> +#include <linux/workqueue.h> struct pwm_beeper { struct input_dev *input; struct pwm_device *pwm; + struct work_struct work; unsigned long period; + bool can_sleep;
I wonder if it is not better to always schedule work, regardless of whether PWM may sleep or not. Thanks. -- Dmitry