linux-pwm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Marek Vasut <marex@denx.de>
To: Brian Norris <briannorris@chromium.org>
Cc: linux-pwm@vger.kernel.org,
	"Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>,
	"Geert Uytterhoeven" <geert+renesas@glider.be>,
	"Thierry Reding" <thierry.reding@gmail.com>,
	"Yoshihiro Shimoda" <yoshihiro.shimoda.uh@renesas.com>
Subject: Re: [PATCH] pwm: core: Permit unset period when applying configuration of disabled PWMs
Date: Fri, 12 May 2023 01:32:49 +0200	[thread overview]
Message-ID: <52131759-457b-12ba-ef05-b91eafd7d342@denx.de> (raw)
In-Reply-To: <ZF1ZMNBMxLqNI0zh@google.com>

On 5/11/23 23:08, Brian Norris wrote:
> Hi,

Hi,

> On Thu, May 11, 2023 at 08:18:53PM +0200, Marek Vasut wrote:
>> In case the PWM is not enabled, the period can still be left unconfigured,
>> i.e. zero . Currently the pwm_class_apply_state() errors out in such a case.
>> This e.g. makes suspend fail on systems where pwmchip has been exported via
>> sysfs interface, but left unconfigured before suspend occurred.
>>
>> Failing case:
>> "
>> $ echo 1 > /sys/class/pwm/pwmchip4/export
>> $ echo mem > /sys/power/state
>> ...
>> pwm pwmchip4: PM: dpm_run_callback(): pwm_class_suspend+0x1/0xa8 returns -22
>> pwm pwmchip4: PM: failed to suspend: error -22
>> PM: Some devices failed to suspend, or early wake event detected
>> "
>>
>> Working case:
>> "
>> $ echo 1 > /sys/class/pwm/pwmchip4/export
>> $ echo 100 > /sys/class/pwm/pwmchip4/pwm1/period
>> $ echo 10 > /sys/class/pwm/pwmchip4/pwm1/duty_cycle
>> $ echo mem > /sys/power/state
>> ...
>> "
>>
>> Permit unset period in pwm_class_apply_state() in case the PWM is disabled
>> to fix this issue.
>>
>> Fixes: ef2bf4997f7d ("pwm: Improve args checking in pwm_apply_state()")
>> Signed-off-by: Marek Vasut <marex@denx.de>
>> ---
>> Cc: Brian Norris <briannorris@chromium.org>
>> Cc: "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>
>> Cc: Geert Uytterhoeven <geert+renesas@glider.be>
>> Cc: Thierry Reding <thierry.reding@gmail.com>
>> Cc: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
>> Cc: linux-pwm@vger.kernel.org
>> ---
>>   drivers/pwm/core.c | 4 ++--
>>   1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c
>> index 3dacceaef4a9b..87252b70f1c81 100644
>> --- a/drivers/pwm/core.c
>> +++ b/drivers/pwm/core.c
>> @@ -510,8 +510,8 @@ int pwm_apply_state(struct pwm_device *pwm, const struct pwm_state *state)
>>   	 */
>>   	might_sleep();
>>   
>> -	if (!pwm || !state || !state->period ||
>> -	    state->duty_cycle > state->period)
>> +	if (!pwm || !state || (state->enabled &&
>> +	    (!state->period || state->duty_cycle > state->period)))
>>   		return -EINVAL;
>>   
>>   	chip = pwm->chip;
> 
> By making the period assertions conditional, you're allowing people to
> write garbage period values via sysfs. However you fix the (legitimate)
> bug you point out, you shouldn't regress that.

I wanted to say, it might be best to fix userspace so that it wouldn't 
export pwmchip and then suspend without configuring it. But (!) this 
actually allows userspace to export pwmchip and that way, block suspend 
completely, because with pwmchip exported and not configured, the system 
just would not suspend. So, yes, this is a legitimate fix for a real 
bug, right ?

> (Now, that's sounding
> like we could use some unit tests for the PWM framework...)

Not just the PWM framework ...

> You could, for example, also add the bounds checks to
> drviers/pwm/sysfs.c's period_store().
> 
> Or perhaps you could teach the suspend/resume functions to not bother
> calling pwm_apply_state() on a disabled PWM.

Right, I think it boils down to -- should this be fixed on the sysfs ABI 
side, or in the pwm core ?

  reply	other threads:[~2023-05-11 23:32 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-05-11 18:18 [PATCH] pwm: core: Permit unset period when applying configuration of disabled PWMs Marek Vasut
2023-05-11 21:08 ` Brian Norris
2023-05-11 23:32   ` Marek Vasut [this message]
2023-05-12  0:51     ` Brian Norris
2023-05-12 16:50       ` Marek Vasut
2023-05-12  6:22 ` Uwe Kleine-König
2023-05-12 12:20   ` Marek Vasut
2023-05-16  9:42     ` Thierry Reding

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=52131759-457b-12ba-ef05-b91eafd7d342@denx.de \
    --to=marex@denx.de \
    --cc=briannorris@chromium.org \
    --cc=geert+renesas@glider.be \
    --cc=linux-pwm@vger.kernel.org \
    --cc=thierry.reding@gmail.com \
    --cc=u.kleine-koenig@pengutronix.de \
    --cc=yoshihiro.shimoda.uh@renesas.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).