public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Krzysztof Kozlowski <k.kozlowski@samsung.com>
To: Rhyland Klein <rklein@nvidia.com>,
	Sebastian Reichel <sre@kernel.org>,
	Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>,
	David Woodhouse <dwmw2@infradead.org>
Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2] power_supply: fix return value of get_property
Date: Thu, 16 Jun 2016 10:43:21 +0200	[thread overview]
Message-ID: <576266A9.9030906@samsung.com> (raw)
In-Reply-To: <1466028784-24459-1-git-send-email-rklein@nvidia.com>

On 06/16/2016 12:13 AM, Rhyland Klein wrote:
> power_supply_get_property() should ideally return -EAGAIN if it is
> called while the power_supply is being registered. There was no way
> previously to determine if use_cnt == 0 meant that the power_supply
> wasn't fully registered yet, or if it had already been unregistered.
> 
> Add a new boolean to the power_supply struct to simply show if
> registration is completed. Lastly, modify the check in
> power_supply_show_property() to also ignore -EAGAIN when so it
> doesn't complain about not returning the property.
> 
> Signed-off-by: Rhyland Klein <rklein@nvidia.com>
> ---
> v2:
>  - Modify power_supply_show_property() to not complain if it
>    sees a return value of -EAGAIN after calling
>    power_supply_get_property().
> 
>  drivers/power/power_supply_core.c  | 6 +++++-
>  drivers/power/power_supply_sysfs.c | 2 +-
>  include/linux/power_supply.h       | 1 +
>  3 files changed, 7 insertions(+), 2 deletions(-)

I don't like it for two reasons:
1. There is still a short window when the information will be
inaccurate. See comment below.

2. Although the code is not very complicated but it adds another field
and some checks just for differentiating EAGAIN/ENODEV. It is
unnecessary complexity.

> 
> diff --git a/drivers/power/power_supply_core.c b/drivers/power/power_supply_core.c
> index b13cd074c52a..a39a47672979 100644
> --- a/drivers/power/power_supply_core.c
> +++ b/drivers/power/power_supply_core.c
> @@ -491,8 +491,11 @@ int power_supply_get_property(struct power_supply *psy,
>  			    enum power_supply_property psp,
>  			    union power_supply_propval *val)
>  {
> -	if (atomic_read(&psy->use_cnt) <= 0)
> +	if (atomic_read(&psy->use_cnt) <= 0) {
> +		if (!psy->initialized)
> +			return -EAGAIN;
>  		return -ENODEV;
> +	}
>  
>  	return psy->desc->get_property(psy, psp, val);
>  }
> @@ -775,6 +778,7 @@ __power_supply_register(struct device *parent,
>  	if (rc)
>  		goto create_triggers_failed;
>  
> +	psy->initialized = true;

If someone calls power_supply_get_property() here, then ENODEV will be
returned which is wrong.

The problem is not solved entirely... I am not convinced that introduced
complexity is worth fixing it.

Best regards,
Krzysztof

  reply	other threads:[~2016-06-16  8:44 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-15 22:13 [PATCH v2] power_supply: fix return value of get_property Rhyland Klein
2016-06-16  8:43 ` Krzysztof Kozlowski [this message]
2016-06-16 15:40   ` Rhyland Klein
2016-06-21 18:08     ` Rhyland Klein
2016-06-22 14:37       ` Sebastian Reichel

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=576266A9.9030906@samsung.com \
    --to=k.kozlowski@samsung.com \
    --cc=dbaryshkov@gmail.com \
    --cc=dwmw2@infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=rklein@nvidia.com \
    --cc=sre@kernel.org \
    /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