All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] usb: core: downgrade log severity to info when descriptor missing
@ 2014-09-22 20:20 Scot Doyle
  2014-09-23 14:26 ` Alan Stern
  0 siblings, 1 reply; 6+ messages in thread
From: Scot Doyle @ 2014-09-22 20:20 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Alan Stern, Sarah Sharp, Dan Williams
  Cc: Daniel Mack, linux-usb, linux-kernel

According to commit 0cce2eda19923e5e5ccc8b042dec5af87b3ffad0
    USB: fix LANGID=0 regression

usb devices are not required to report string descriptors. Since they are
optional, log an info message instead of an error message. In addition,
use a higher level info message while moving the details to a debug message.

Tested with USB device 0930:021c.

Signed-off-by: Scot Doyle <lkml14@scotdoyle.com>
---
 drivers/usb/core/message.c | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c
index 0c8a7fc..6b95de7 100644
--- a/drivers/usb/core/message.c
+++ b/drivers/usb/core/message.c
@@ -766,7 +766,7 @@ static int usb_get_langid(struct usb_device *dev, unsigned char *tbuf)

 	/* If the string was reported but is malformed, default to english
 	 * (0x0409) */
-	if (err == -ENODATA || (err > 0 && err < 4)) {
+	if (err > 0 && err < 4) {
 		dev->string_langid = 0x0409;
 		dev->have_langid = 1;
 		dev_err(&dev->dev,
@@ -776,6 +776,18 @@ static int usb_get_langid(struct usb_device *dev, unsigned char *tbuf)
 		return 0;
 	}

+	/* If the string was unavailable, default to english (0x0409) */
+	if (err == -ENODATA) {
+		dev->string_langid = 0x0409;
+		dev->have_langid = 1;
+		dev_info(&dev->dev,
+			"no string descriptor language, defaulting to English");
+		dev_dbg(&dev->dev,
+			"string descriptor 0 unavailable (err = -ENODATA), "
+			"defaulting to 0x%04x\n", dev->string_langid);
+		return 0;
+	}
+
 	/* In case of all other errors, we assume the device is not able to
 	 * deal with strings at all. Set string_langid to -1 in order to
 	 * prevent any string to be retrieved from the device */
-- 
2.1.0


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

* Re: [PATCH] usb: core: downgrade log severity to info when descriptor missing
  2014-09-22 20:20 [PATCH] usb: core: downgrade log severity to info when descriptor missing Scot Doyle
@ 2014-09-23 14:26 ` Alan Stern
  2014-09-23 19:06   ` Scot Doyle
  0 siblings, 1 reply; 6+ messages in thread
From: Alan Stern @ 2014-09-23 14:26 UTC (permalink / raw)
  To: Scot Doyle
  Cc: Greg Kroah-Hartman, Sarah Sharp, Dan Williams, Daniel Mack,
	linux-usb, linux-kernel

On Mon, 22 Sep 2014, Scot Doyle wrote:

> According to commit 0cce2eda19923e5e5ccc8b042dec5af87b3ffad0
>     USB: fix LANGID=0 regression
> 
> usb devices are not required to report string descriptors. Since they are
> optional, log an info message instead of an error message. In addition,
> use a higher level info message while moving the details to a debug message.
> 
> Tested with USB device 0930:021c.

This is a good description, but it's not what the patch actually does.

> Signed-off-by: Scot Doyle <lkml14@scotdoyle.com>
> ---
>  drivers/usb/core/message.c | 14 +++++++++++++-
>  1 file changed, 13 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c
> index 0c8a7fc..6b95de7 100644
> --- a/drivers/usb/core/message.c
> +++ b/drivers/usb/core/message.c
> @@ -766,7 +766,7 @@ static int usb_get_langid(struct usb_device *dev, unsigned char *tbuf)
> 
>  	/* If the string was reported but is malformed, default to english
>  	 * (0x0409) */
> -	if (err == -ENODATA || (err > 0 && err < 4)) {
> +	if (err > 0 && err < 4) {

Why treat ENODATA as a separate case?  It's just like the others -- the 
device returned some data, but the data was malformed.

If the device really does not support string descriptors at all, err
would be equal to -EPIPE.

>  		dev->string_langid = 0x0409;
>  		dev->have_langid = 1;
>  		dev_err(&dev->dev,
> @@ -776,6 +776,18 @@ static int usb_get_langid(struct usb_device *dev, unsigned char *tbuf)
>  		return 0;
>  	}
> 
> +	/* If the string was unavailable, default to english (0x0409) */

-ENODATA doesn't mean the string was unavailable.  It means that the
second byte of the reply was different from USB_DT_STRING, i.e., the
reply was malformed.

> +	if (err == -ENODATA) {
> +		dev->string_langid = 0x0409;
> +		dev->have_langid = 1;
> +		dev_info(&dev->dev,
> +			"no string descriptor language, defaulting to English");
> +		dev_dbg(&dev->dev,
> +			"string descriptor 0 unavailable (err = -ENODATA), "
> +			"defaulting to 0x%04x\n", dev->string_langid);
> +		return 0;
> +	}

Therefore this section is completely unnecessary.

> +
>  	/* In case of all other errors, we assume the device is not able to
>  	 * deal with strings at all. Set string_langid to -1 in order to
>  	 * prevent any string to be retrieved from the device */

And down here is where you should call either dev_info() or dev_err(), 
depending on whether err is equal to -EPIPE or something else.

Alan Stern


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

* Re: [PATCH] usb: core: downgrade log severity to info when descriptor missing
  2014-09-23 14:26 ` Alan Stern
@ 2014-09-23 19:06   ` Scot Doyle
  2014-09-23 19:12     ` [PATCH v2] usb: core: downgrade log severity to info when descriptor unavailable Scot Doyle
  0 siblings, 1 reply; 6+ messages in thread
From: Scot Doyle @ 2014-09-23 19:06 UTC (permalink / raw)
  To: Alan Stern
  Cc: Greg Kroah-Hartman, Sarah Sharp, Dan Williams, Daniel Mack,
	linux-usb, linux-kernel

On Tue, 23 Sep 2014, Alan Stern wrote:
> -ENODATA doesn't mean the string was unavailable.  It means that the
> second byte of the reply was different from USB_DT_STRING, i.e., the
> reply was malformed.

Thank you for the correction!

> And down here is where you should call either dev_info() or dev_err(),
> depending on whether err is equal to -EPIPE or something else.

I hope to send it shortly.

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

* [PATCH v2] usb: core: downgrade log severity to info when descriptor unavailable
  2014-09-23 19:06   ` Scot Doyle
@ 2014-09-23 19:12     ` Scot Doyle
  2014-09-24  5:18       ` Greg Kroah-Hartman
  0 siblings, 1 reply; 6+ messages in thread
From: Scot Doyle @ 2014-09-23 19:12 UTC (permalink / raw)
  To: Alan Stern, Greg Kroah-Hartman, Sarah Sharp, Dan Williams
  Cc: Daniel Mack, linux-usb, linux-kernel

According to commit 0cce2eda19923e5e5ccc8b042dec5af87b3ffad0
    USB: fix LANGID=0 regression

usb devices are not required to report string descriptors. Since they are
optional, log an info message instead of an error message.

Signed-off-by: Scot Doyle <lkml14@scotdoyle.com>
---
 drivers/usb/core/message.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c
index 0c8a7fc..da2f1f2 100644
--- a/drivers/usb/core/message.c
+++ b/drivers/usb/core/message.c
@@ -780,8 +780,12 @@ static int usb_get_langid(struct usb_device *dev, unsigned char *tbuf)
 	 * deal with strings at all. Set string_langid to -1 in order to
 	 * prevent any string to be retrieved from the device */
 	if (err < 0) {
-		dev_err(&dev->dev, "string descriptor 0 read error: %d\n",
-					err);
+		if (err == -EPIPE)
+			dev_info(&dev->dev,
+				 "string descriptor 0 read error: -EPIPE\n");
+		else
+			dev_err(&dev->dev,
+				"string descriptor 0 read error: %d\n", err);
 		dev->string_langid = -1;
 		return -EPIPE;
 	}
-- 
2.1.0


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

* Re: [PATCH v2] usb: core: downgrade log severity to info when descriptor unavailable
  2014-09-23 19:12     ` [PATCH v2] usb: core: downgrade log severity to info when descriptor unavailable Scot Doyle
@ 2014-09-24  5:18       ` Greg Kroah-Hartman
  2014-09-24 17:56         ` Scot Doyle
  0 siblings, 1 reply; 6+ messages in thread
From: Greg Kroah-Hartman @ 2014-09-24  5:18 UTC (permalink / raw)
  To: Scot Doyle
  Cc: Alan Stern, Sarah Sharp, Dan Williams, Daniel Mack, linux-usb,
	linux-kernel

On Tue, Sep 23, 2014 at 07:12:40PM +0000, Scot Doyle wrote:
> According to commit 0cce2eda19923e5e5ccc8b042dec5af87b3ffad0
>     USB: fix LANGID=0 regression
> 
> usb devices are not required to report string descriptors. Since they are
> optional, log an info message instead of an error message.
> 
> Signed-off-by: Scot Doyle <lkml14@scotdoyle.com>
> ---
>  drivers/usb/core/message.c | 8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c
> index 0c8a7fc..da2f1f2 100644
> --- a/drivers/usb/core/message.c
> +++ b/drivers/usb/core/message.c
> @@ -780,8 +780,12 @@ static int usb_get_langid(struct usb_device *dev, unsigned char *tbuf)
>  	 * deal with strings at all. Set string_langid to -1 in order to
>  	 * prevent any string to be retrieved from the device */
>  	if (err < 0) {
> -		dev_err(&dev->dev, "string descriptor 0 read error: %d\n",
> -					err);
> +		if (err == -EPIPE)
> +			dev_info(&dev->dev,
> +				 "string descriptor 0 read error: -EPIPE\n");
> +		else
> +			dev_err(&dev->dev,
> +				"string descriptor 0 read error: %d\n", err);

What real difference does this patch make?  What would a user do with
-EPIPE?

And USB devices _are_ required to provide a string descriptor if they
provide a string id, so your changelog body doesn't make much sense.  I
suggest rewriting it to say they aren't required to provide a string
descriptor for string "0".

But even then, I don't understand the goal of this patch.

thanks,

greg k-h

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

* Re: [PATCH v2] usb: core: downgrade log severity to info when descriptor unavailable
  2014-09-24  5:18       ` Greg Kroah-Hartman
@ 2014-09-24 17:56         ` Scot Doyle
  0 siblings, 0 replies; 6+ messages in thread
From: Scot Doyle @ 2014-09-24 17:56 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: Alan Stern, Sarah Sharp, Dan Williams, Daniel Mack, linux-usb,
	linux-kernel

On Tue, 23 Sep 2014, Greg Kroah-Hartman wrote:
> On Tue, Sep 23, 2014 at 07:12:40PM +0000, Scot Doyle wrote:
>> According to commit 0cce2eda19923e5e5ccc8b042dec5af87b3ffad0
>>     USB: fix LANGID=0 regression
>>
>> usb devices are not required to report string descriptors. Since they are
>> optional, log an info message instead of an error message.
>>
>> Signed-off-by: Scot Doyle <lkml14@scotdoyle.com>
>> ---
>>  drivers/usb/core/message.c | 8 ++++++--
>>  1 file changed, 6 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c
>> index 0c8a7fc..da2f1f2 100644
>> --- a/drivers/usb/core/message.c
>> +++ b/drivers/usb/core/message.c
>> @@ -780,8 +780,12 @@ static int usb_get_langid(struct usb_device *dev, unsigned char *tbuf)
>>  	 * deal with strings at all. Set string_langid to -1 in order to
>>  	 * prevent any string to be retrieved from the device */
>>  	if (err < 0) {
>> -		dev_err(&dev->dev, "string descriptor 0 read error: %d\n",
>> -					err);
>> +		if (err == -EPIPE)
>> +			dev_info(&dev->dev,
>> +				 "string descriptor 0 read error: -EPIPE\n");
>> +		else
>> +			dev_err(&dev->dev,
>> +				"string descriptor 0 read error: %d\n", err);
>
> What real difference does this patch make?  What would a user do with
> -EPIPE?

Not much difference, except e.g. a log line that isn't red.

> And USB devices _are_ required to provide a string descriptor if they
> provide a string id, so your changelog body doesn't make much sense.  I
> suggest rewriting it to say they aren't required to provide a string
> descriptor for string "0".
>
> But even then, I don't understand the goal of this patch.

I'm happy to drop this patch request, since in my case the return value is 
-ENODATA, which is covered by the other patch: "[RFC PATCH] usb: core: log 
more general message on malformed LANGID descriptor"


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

end of thread, other threads:[~2014-09-24 17:57 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-09-22 20:20 [PATCH] usb: core: downgrade log severity to info when descriptor missing Scot Doyle
2014-09-23 14:26 ` Alan Stern
2014-09-23 19:06   ` Scot Doyle
2014-09-23 19:12     ` [PATCH v2] usb: core: downgrade log severity to info when descriptor unavailable Scot Doyle
2014-09-24  5:18       ` Greg Kroah-Hartman
2014-09-24 17:56         ` Scot Doyle

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.