* [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.