linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] backlight: report error on failure
@ 2017-01-18 21:23 Sudip Mukherjee
  2017-01-30 23:04 ` Sudip Mukherjee
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Sudip Mukherjee @ 2017-01-18 21:23 UTC (permalink / raw)
  To: Jingoo Han, Lee Jones, Bartlomiej Zolnierkiewicz
  Cc: linux-kernel, linux-fbdev, Sudip Mukherjee

It is possible to update the backlight power and the brightness using
the sysfs and on writing it either returns the count or if the callback
function does not exist then returns the error code 'ENXIO'.

We have a situation where the userspace client is writing to the sysfs
to update the power and since the callback function exists the client
receives the return value as count and considers the operation to be
successful. That is correct as the write to the sysfs was successful.
But there is no way to know if the actual operation was done or not.

backlight_update_status() returns the error code if it fails. Pass that
to the userspace client who is trying to update the power so that the
client knows that the operation failed.

Signed-off-by: Sudip Mukherjee <sudip.mukherjee@codethink.co.uk>
---
 drivers/video/backlight/backlight.c | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/drivers/video/backlight/backlight.c b/drivers/video/backlight/backlight.c
index 288318a..74b72b5 100644
--- a/drivers/video/backlight/backlight.c
+++ b/drivers/video/backlight/backlight.c
@@ -146,9 +146,9 @@ static ssize_t bl_power_store(struct device *dev, struct device_attribute *attr,
 		pr_debug("set power to %lu\n", power);
 		if (bd->props.power != power) {
 			bd->props.power = power;
-			backlight_update_status(bd);
+			rc = backlight_update_status(bd);
 		}
-		rc = count;
+		rc = rc ? rc : count;
 	}
 	mutex_unlock(&bd->ops_lock);
 
@@ -176,8 +176,7 @@ int backlight_device_set_brightness(struct backlight_device *bd,
 		else {
 			pr_debug("set brightness to %lu\n", brightness);
 			bd->props.brightness = brightness;
-			backlight_update_status(bd);
-			rc = 0;
+			rc = backlight_update_status(bd);
 		}
 	}
 	mutex_unlock(&bd->ops_lock);
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH] backlight: report error on failure
  2017-01-18 21:23 [PATCH] backlight: report error on failure Sudip Mukherjee
@ 2017-01-30 23:04 ` Sudip Mukherjee
  2017-02-18 16:31   ` Sudip Mukherjee
  2017-02-08 12:54 ` Lee Jones
  2017-02-19  8:13 ` Daniel Thompson
  2 siblings, 1 reply; 8+ messages in thread
From: Sudip Mukherjee @ 2017-01-30 23:04 UTC (permalink / raw)
  To: Jingoo Han, Lee Jones, Bartlomiej Zolnierkiewicz
  Cc: linux-kernel, linux-fbdev

On Wednesday 18 January 2017 09:23 PM, Sudip Mukherjee wrote:
> It is possible to update the backlight power and the brightness using
> the sysfs and on writing it either returns the count or if the callback
> function does not exist then returns the error code 'ENXIO'.
>
> We have a situation where the userspace client is writing to the sysfs
> to update the power and since the callback function exists the client
> receives the return value as count and considers the operation to be
> successful. That is correct as the write to the sysfs was successful.
> But there is no way to know if the actual operation was done or not.
>
> backlight_update_status() returns the error code if it fails. Pass that
> to the userspace client who is trying to update the power so that the
> client knows that the operation failed.
>
> Signed-off-by: Sudip Mukherjee <sudip.mukherjee@codethink.co.uk>
> ---

A gentle ping.

--
Regards
Sudip


>   drivers/video/backlight/backlight.c | 7 +++----
>   1 file changed, 3 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/video/backlight/backlight.c b/drivers/video/backlight/backlight.c
> index 288318a..74b72b5 100644
> --- a/drivers/video/backlight/backlight.c
> +++ b/drivers/video/backlight/backlight.c
> @@ -146,9 +146,9 @@ static ssize_t bl_power_store(struct device *dev, struct device_attribute *attr,
>   		pr_debug("set power to %lu\n", power);
>   		if (bd->props.power != power) {
>   			bd->props.power = power;
> -			backlight_update_status(bd);
> +			rc = backlight_update_status(bd);
>   		}
> -		rc = count;
> +		rc = rc ? rc : count;
>   	}
>   	mutex_unlock(&bd->ops_lock);
>
> @@ -176,8 +176,7 @@ int backlight_device_set_brightness(struct backlight_device *bd,
>   		else {
>   			pr_debug("set brightness to %lu\n", brightness);
>   			bd->props.brightness = brightness;
> -			backlight_update_status(bd);
> -			rc = 0;
> +			rc = backlight_update_status(bd);
>   		}
>   	}
>   	mutex_unlock(&bd->ops_lock);
>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] backlight: report error on failure
  2017-01-18 21:23 [PATCH] backlight: report error on failure Sudip Mukherjee
  2017-01-30 23:04 ` Sudip Mukherjee
@ 2017-02-08 12:54 ` Lee Jones
  2017-02-19  8:13 ` Daniel Thompson
  2 siblings, 0 replies; 8+ messages in thread
From: Lee Jones @ 2017-02-08 12:54 UTC (permalink / raw)
  To: Sudip Mukherjee, daniel.thompson
  Cc: Jingoo Han, Bartlomiej Zolnierkiewicz, linux-kernel, linux-fbdev

Cc'ing Daniel Thompson, the new Maintainer.

On Wed, 18 Jan 2017, Sudip Mukherjee wrote:

> It is possible to update the backlight power and the brightness using
> the sysfs and on writing it either returns the count or if the callback
> function does not exist then returns the error code 'ENXIO'.
> 
> We have a situation where the userspace client is writing to the sysfs
> to update the power and since the callback function exists the client
> receives the return value as count and considers the operation to be
> successful. That is correct as the write to the sysfs was successful.
> But there is no way to know if the actual operation was done or not.
> 
> backlight_update_status() returns the error code if it fails. Pass that
> to the userspace client who is trying to update the power so that the
> client knows that the operation failed.
> 
> Signed-off-by: Sudip Mukherjee <sudip.mukherjee@codethink.co.uk>
> ---
>  drivers/video/backlight/backlight.c | 7 +++----
>  1 file changed, 3 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/video/backlight/backlight.c b/drivers/video/backlight/backlight.c
> index 288318a..74b72b5 100644
> --- a/drivers/video/backlight/backlight.c
> +++ b/drivers/video/backlight/backlight.c
> @@ -146,9 +146,9 @@ static ssize_t bl_power_store(struct device *dev, struct device_attribute *attr,
>  		pr_debug("set power to %lu\n", power);
>  		if (bd->props.power != power) {
>  			bd->props.power = power;
> -			backlight_update_status(bd);
> +			rc = backlight_update_status(bd);
>  		}
> -		rc = count;
> +		rc = rc ? rc : count;
>  	}
>  	mutex_unlock(&bd->ops_lock);
>  
> @@ -176,8 +176,7 @@ int backlight_device_set_brightness(struct backlight_device *bd,
>  		else {
>  			pr_debug("set brightness to %lu\n", brightness);
>  			bd->props.brightness = brightness;
> -			backlight_update_status(bd);
> -			rc = 0;
> +			rc = backlight_update_status(bd);
>  		}
>  	}
>  	mutex_unlock(&bd->ops_lock);

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] backlight: report error on failure
  2017-01-30 23:04 ` Sudip Mukherjee
@ 2017-02-18 16:31   ` Sudip Mukherjee
  2017-02-19  8:26     ` Daniel Thompson
  0 siblings, 1 reply; 8+ messages in thread
From: Sudip Mukherjee @ 2017-02-18 16:31 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Jingoo Han, Lee Jones, Bartlomiej Zolnierkiewicz, linux-kernel,
	linux-fbdev, daniel.thompson

On Monday 30 January 2017 11:04 PM, Sudip Mukherjee wrote:
> On Wednesday 18 January 2017 09:23 PM, Sudip Mukherjee wrote:
>> It is possible to update the backlight power and the brightness using
>> the sysfs and on writing it either returns the count or if the callback
>> function does not exist then returns the error code 'ENXIO'.
>>
>> We have a situation where the userspace client is writing to the sysfs
>> to update the power and since the callback function exists the client
>> receives the return value as count and considers the operation to be
>> successful. That is correct as the write to the sysfs was successful.
>> But there is no way to know if the actual operation was done or not.
>>
>> backlight_update_status() returns the error code if it fails. Pass that
>> to the userspace client who is trying to update the power so that the
>> client knows that the operation failed.
>>
>> Signed-off-by: Sudip Mukherjee <sudip.mukherjee@codethink.co.uk>
>> ---
>
> A gentle ping.

Hi Andrew,

Its more than one month now that this patch was submitted. Can you 
please take it through your tree... else it will miss the merge window.

Regards
Sudip

>
>
>>   drivers/video/backlight/backlight.c | 7 +++----
>>   1 file changed, 3 insertions(+), 4 deletions(-)
>>
>> diff --git a/drivers/video/backlight/backlight.c
>> b/drivers/video/backlight/backlight.c
>> index 288318a..74b72b5 100644
>> --- a/drivers/video/backlight/backlight.c
>> +++ b/drivers/video/backlight/backlight.c
>> @@ -146,9 +146,9 @@ static ssize_t bl_power_store(struct device *dev,
>> struct device_attribute *attr,
>>           pr_debug("set power to %lu\n", power);
>>           if (bd->props.power != power) {
>>               bd->props.power = power;
>> -            backlight_update_status(bd);
>> +            rc = backlight_update_status(bd);
>>           }
>> -        rc = count;
>> +        rc = rc ? rc : count;
>>       }
>>       mutex_unlock(&bd->ops_lock);
>>
>> @@ -176,8 +176,7 @@ int backlight_device_set_brightness(struct
>> backlight_device *bd,
>>           else {
>>               pr_debug("set brightness to %lu\n", brightness);
>>               bd->props.brightness = brightness;
>> -            backlight_update_status(bd);
>> -            rc = 0;
>> +            rc = backlight_update_status(bd);
>>           }
>>       }
>>       mutex_unlock(&bd->ops_lock);
>>
>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] backlight: report error on failure
  2017-01-18 21:23 [PATCH] backlight: report error on failure Sudip Mukherjee
  2017-01-30 23:04 ` Sudip Mukherjee
  2017-02-08 12:54 ` Lee Jones
@ 2017-02-19  8:13 ` Daniel Thompson
  2 siblings, 0 replies; 8+ messages in thread
From: Daniel Thompson @ 2017-02-19  8:13 UTC (permalink / raw)
  To: Sudip Mukherjee
  Cc: Jingoo Han, Lee Jones, Bartlomiej Zolnierkiewicz, linux-kernel,
	linux-fbdev

On Wed, Jan 18, 2017 at 09:23:50PM +0000, Sudip Mukherjee wrote:
> It is possible to update the backlight power and the brightness using
> the sysfs and on writing it either returns the count or if the callback
> function does not exist then returns the error code 'ENXIO'.
> 
> We have a situation where the userspace client is writing to the sysfs
> to update the power and since the callback function exists the client
> receives the return value as count and considers the operation to be
> successful. That is correct as the write to the sysfs was successful.
> But there is no way to know if the actual operation was done or not.

For brightness there is the actual_brightness file... but I don't think
there's anything for power.


> backlight_update_status() returns the error code if it fails. Pass that
> to the userspace client who is trying to update the power so that the
> client knows that the operation failed.

Strictly speaking this is an ABI change. Its probably a harmless one
making it ok to change but I'm interested what testing or code review 
you've done to be sure the userspace doesn't do odd things if the kernel
starts to pass through errors.


> Signed-off-by: Sudip Mukherjee <sudip.mukherjee@codethink.co.uk>
> ---
>  drivers/video/backlight/backlight.c | 7 +++----
>  1 file changed, 3 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/video/backlight/backlight.c b/drivers/video/backlight/backlight.c
> index 288318a..74b72b5 100644
> --- a/drivers/video/backlight/backlight.c
> +++ b/drivers/video/backlight/backlight.c
> @@ -146,9 +146,9 @@ static ssize_t bl_power_store(struct device *dev, struct device_attribute *attr,
>  		pr_debug("set power to %lu\n", power);
>  		if (bd->props.power != power) {
>  			bd->props.power = power;
> -			backlight_update_status(bd);
> +			rc = backlight_update_status(bd);
>  		}
> -		rc = count;
> +		rc = rc ? rc : count;

Shouldn't bd->props,power be rolled back on error?

Without it we end up in an odd situation with the lazy updates, 
specifically if the userspace observes original error and retries then we
will spuriously succeed due to the lazy update (leaving us not much 
better off than without this change).


>  	mutex_unlock(&bd->ops_lock);
>  
> @@ -176,8 +176,7 @@ int backlight_device_set_brightness(struct backlight_device *bd,
>  		else {
>  			pr_debug("set brightness to %lu\n", brightness);
>  			bd->props.brightness = brightness;
> -			backlight_update_status(bd);
> -			rc = 0;
> +			rc = backlight_update_status(bd);

Again, there is no roll back on error.


Daniel.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] backlight: report error on failure
  2017-02-18 16:31   ` Sudip Mukherjee
@ 2017-02-19  8:26     ` Daniel Thompson
  2017-02-20 20:52       ` Sudip Mukherjee
  0 siblings, 1 reply; 8+ messages in thread
From: Daniel Thompson @ 2017-02-19  8:26 UTC (permalink / raw)
  To: Sudip Mukherjee
  Cc: Andrew Morton, Jingoo Han, Lee Jones, Bartlomiej Zolnierkiewicz,
	linux-kernel, linux-fbdev

On Sat, Feb 18, 2017 at 04:31:43PM +0000, Sudip Mukherjee wrote:
> On Monday 30 January 2017 11:04 PM, Sudip Mukherjee wrote:
> > On Wednesday 18 January 2017 09:23 PM, Sudip Mukherjee wrote:
> > > It is possible to update the backlight power and the brightness using
> > > the sysfs and on writing it either returns the count or if the callback
> > > function does not exist then returns the error code 'ENXIO'.
> > > 
> > > We have a situation where the userspace client is writing to the sysfs
> > > to update the power and since the callback function exists the client
> > > receives the return value as count and considers the operation to be
> > > successful. That is correct as the write to the sysfs was successful.
> > > But there is no way to know if the actual operation was done or not.
> > > 
> > > backlight_update_status() returns the error code if it fails. Pass that
> > > to the userspace client who is trying to update the power so that the
> > > client knows that the operation failed.
> > > 
> > > Signed-off-by: Sudip Mukherjee <sudip.mukherjee@codethink.co.uk>
> > > ---
> > 
> > A gentle ping.
> 
> Hi Andrew,
> 
> Its more than one month now that this patch was submitted. Can you please
> take it through your tree... else it will miss the merge window.

Sorry you've been waiting so long for a review. Your "gentle ping" did
result in a few minor tweaks to the maintainers but what it didn't
(until today) provoke was  review!

To be honest, the ABI changes in the patch meant I wanted to check a 
few things first. However prompted by this mail I've just replied with 
the review I *should* have sent out a week ago [asking you rather than 
me to fill in some details about the likely effect of the ABI change ;-) ].

BTW, I did do some archeology eariler in the week and I think the kernel
has been swallowing error codes here for >10 years, so I'm curious if this
is a theoretic bug fix or are you aware of some tangible problem in 
userspace that results from it?


Daniel.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] backlight: report error on failure
  2017-02-19  8:26     ` Daniel Thompson
@ 2017-02-20 20:52       ` Sudip Mukherjee
  2017-02-22  8:52         ` Lee Jones
  0 siblings, 1 reply; 8+ messages in thread
From: Sudip Mukherjee @ 2017-02-20 20:52 UTC (permalink / raw)
  To: Daniel Thompson
  Cc: Andrew Morton, Jingoo Han, Lee Jones, Bartlomiej Zolnierkiewicz,
	linux-kernel, linux-fbdev

On Sun, Feb 19, 2017 at 08:26:18AM +0000, Daniel Thompson wrote:
> On Sat, Feb 18, 2017 at 04:31:43PM +0000, Sudip Mukherjee wrote:
> > On Monday 30 January 2017 11:04 PM, Sudip Mukherjee wrote:
> > > On Wednesday 18 January 2017 09:23 PM, Sudip Mukherjee wrote:
> > > > It is possible to update the backlight power and the brightness using
> > > > the sysfs and on writing it either returns the count or if the callback
> > > > function does not exist then returns the error code 'ENXIO'.
> > > > 
> > > > We have a situation where the userspace client is writing to the sysfs
> > > > to update the power and since the callback function exists the client
> > > > receives the return value as count and considers the operation to be
> > > > successful. That is correct as the write to the sysfs was successful.
> > > > But there is no way to know if the actual operation was done or not.
> > > > 
> > > > backlight_update_status() returns the error code if it fails. Pass that
> > > > to the userspace client who is trying to update the power so that the
> > > > client knows that the operation failed.
> > > > 
> > > > Signed-off-by: Sudip Mukherjee <sudip.mukherjee@codethink.co.uk>
> > > > ---
> > > 
> > > A gentle ping.
> > 
> > Hi Andrew,
> > 
> > Its more than one month now that this patch was submitted. Can you please
> > take it through your tree... else it will miss the merge window.
> 
> Sorry you've been waiting so long for a review. Your "gentle ping" did
> result in a few minor tweaks to the maintainers but what it didn't
> (until today) provoke was  review!

what tweaks? I can see that now you are the new maintainer.Is that the
result of my ping? :)

> 
> To be honest, the ABI changes in the patch meant I wanted to check a 
> few things first. However prompted by this mail I've just replied with 
> the review I *should* have sent out a week ago [asking you rather than 
> me to fill in some details about the likely effect of the ABI change ;-) ].
> 
> BTW, I did do some archeology eariler in the week and I think the kernel
> has been swallowing error codes here for >10 years, so I'm curious if this
> is a theoretic bug fix or are you aware of some tangible problem in 
> userspace that results from it?

I will reply to your other mail later this week. I am on a short holiday
now with very limited access.

But the problem that prompted me to send this patch is the current project
that I am working on now. And we faced this there. The userspace code is
writing to the sysfs node to poweron the backlight and reported success.
But sometimes we noticed that backlight was not actally powered on. And
that lead me to check the code and noticed that it is swallowing all the
errors.

Regards
Sudip

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] backlight: report error on failure
  2017-02-20 20:52       ` Sudip Mukherjee
@ 2017-02-22  8:52         ` Lee Jones
  0 siblings, 0 replies; 8+ messages in thread
From: Lee Jones @ 2017-02-22  8:52 UTC (permalink / raw)
  To: Sudip Mukherjee
  Cc: Daniel Thompson, Andrew Morton, Jingoo Han,
	Bartlomiej Zolnierkiewicz, linux-kernel, linux-fbdev

On Mon, 20 Feb 2017, Sudip Mukherjee wrote:

> On Sun, Feb 19, 2017 at 08:26:18AM +0000, Daniel Thompson wrote:
> > On Sat, Feb 18, 2017 at 04:31:43PM +0000, Sudip Mukherjee wrote:
> > > On Monday 30 January 2017 11:04 PM, Sudip Mukherjee wrote:
> > > > On Wednesday 18 January 2017 09:23 PM, Sudip Mukherjee wrote:
> > > > > It is possible to update the backlight power and the brightness using
> > > > > the sysfs and on writing it either returns the count or if the callback
> > > > > function does not exist then returns the error code 'ENXIO'.
> > > > > 
> > > > > We have a situation where the userspace client is writing to the sysfs
> > > > > to update the power and since the callback function exists the client
> > > > > receives the return value as count and considers the operation to be
> > > > > successful. That is correct as the write to the sysfs was successful.
> > > > > But there is no way to know if the actual operation was done or not.
> > > > > 
> > > > > backlight_update_status() returns the error code if it fails. Pass that
> > > > > to the userspace client who is trying to update the power so that the
> > > > > client knows that the operation failed.
> > > > > 
> > > > > Signed-off-by: Sudip Mukherjee <sudip.mukherjee@codethink.co.uk>
> > > > > ---
> > > > 
> > > > A gentle ping.
> > > 
> > > Hi Andrew,
> > > 
> > > Its more than one month now that this patch was submitted. Can you please
> > > take it through your tree... else it will miss the merge window.
> > 
> > Sorry you've been waiting so long for a review. Your "gentle ping" did
> > result in a few minor tweaks to the maintainers but what it didn't
> > (until today) provoke was  review!
> 
> what tweaks? I can see that now you are the new maintainer.Is that the
> result of my ping? :)

Pings never have any effect and are thus always discouraged. ;)

The amount of pending reviews on Backlight patches were what provoked
me to find a new, diligent Maintainer for the subsystem.

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2017-02-22  8:53 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-01-18 21:23 [PATCH] backlight: report error on failure Sudip Mukherjee
2017-01-30 23:04 ` Sudip Mukherjee
2017-02-18 16:31   ` Sudip Mukherjee
2017-02-19  8:26     ` Daniel Thompson
2017-02-20 20:52       ` Sudip Mukherjee
2017-02-22  8:52         ` Lee Jones
2017-02-08 12:54 ` Lee Jones
2017-02-19  8:13 ` Daniel Thompson

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).