All of lore.kernel.org
 help / color / mirror / Atom feed
* question about usb_rebind_intf
@ 2017-11-17 16:35 Jerry Snitselaar
  2017-11-17 17:09 ` Greg Kroah-Hartman
  0 siblings, 1 reply; 8+ messages in thread
From: Jerry Snitselaar @ 2017-11-17 16:35 UTC (permalink / raw)
  To: Greg Kroah-Hartman, linux-usb, linux-kernel

Should this skip warning that the rebind failed if device_attach
is returning -EPROBE_DEFER? If I do something like 'rtcwake -m mem -s 30'
on a laptop I have here I will see a couple "rebind failed: -517" messages
as it comes back out of suspend. Since the device probe eventually happens
once probes are not deferred wondering if this warning this be given in that
case.


diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c
index 64262a9a8829..5d3408010112 100644
--- a/drivers/usb/core/driver.c
+++ b/drivers/usb/core/driver.c
@@ -1070,7 +1070,7 @@ static void usb_rebind_intf(struct usb_interface *intf)
        if (!intf->dev.power.is_prepared) {
                intf->needs_binding = 0;
                rc = device_attach(&intf->dev);
-               if (rc < 0)
+               if (rc < 0 && rc != -EPROBE_DEFER)
                        dev_warn(&intf->dev, "rebind failed: %d\n", rc);
        }
 }

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

* Re: question about usb_rebind_intf
  2017-11-17 16:35 question about usb_rebind_intf Jerry Snitselaar
@ 2017-11-17 17:09 ` Greg Kroah-Hartman
  2017-11-17 17:45   ` Mathias Nyman
  0 siblings, 1 reply; 8+ messages in thread
From: Greg Kroah-Hartman @ 2017-11-17 17:09 UTC (permalink / raw)
  To: linux-usb, linux-kernel

On Fri, Nov 17, 2017 at 09:35:51AM -0700, Jerry Snitselaar wrote:
> Should this skip warning that the rebind failed if device_attach
> is returning -EPROBE_DEFER? If I do something like 'rtcwake -m mem -s 30'
> on a laptop I have here I will see a couple "rebind failed: -517" messages
> as it comes back out of suspend. Since the device probe eventually happens
> once probes are not deferred wondering if this warning this be given in that
> case.
> 
> 
> diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c
> index 64262a9a8829..5d3408010112 100644
> --- a/drivers/usb/core/driver.c
> +++ b/drivers/usb/core/driver.c
> @@ -1070,7 +1070,7 @@ static void usb_rebind_intf(struct usb_interface *intf)
>        if (!intf->dev.power.is_prepared) {
>                intf->needs_binding = 0;
>                rc = device_attach(&intf->dev);
> -               if (rc < 0)
> +               if (rc < 0 && rc != -EPROBE_DEFER)
>                        dev_warn(&intf->dev, "rebind failed: %d\n", rc);
>        }
> }

What USB driver is returning -EPROBE_DEFER to cause this to be an issue?
Shouldn't that really only be for "platform" drivers and the like?  USB
interface drivers should all be "self-contained" within reason.

thanks,

greg k-h

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

* Re: question about usb_rebind_intf
  2017-11-17 17:09 ` Greg Kroah-Hartman
@ 2017-11-17 17:45   ` Mathias Nyman
  2017-11-17 18:21     ` Alan Stern
  0 siblings, 1 reply; 8+ messages in thread
From: Mathias Nyman @ 2017-11-17 17:45 UTC (permalink / raw)
  To: Greg Kroah-Hartman, linux-usb, linux-kernel; +Cc: Alan Stern

On 17.11.2017 19:09, Greg Kroah-Hartman wrote:
> On Fri, Nov 17, 2017 at 09:35:51AM -0700, Jerry Snitselaar wrote:
>> Should this skip warning that the rebind failed if device_attach
>> is returning -EPROBE_DEFER? If I do something like 'rtcwake -m mem -s 30'
>> on a laptop I have here I will see a couple "rebind failed: -517" messages
>> as it comes back out of suspend. Since the device probe eventually happens
>> once probes are not deferred wondering if this warning this be given in that
>> case.
>>
>>
>> diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c
>> index 64262a9a8829..5d3408010112 100644
>> --- a/drivers/usb/core/driver.c
>> +++ b/drivers/usb/core/driver.c
>> @@ -1070,7 +1070,7 @@ static void usb_rebind_intf(struct usb_interface *intf)
>>         if (!intf->dev.power.is_prepared) {
>>                 intf->needs_binding = 0;
>>                 rc = device_attach(&intf->dev);
>> -               if (rc < 0)
>> +               if (rc < 0 && rc != -EPROBE_DEFER)
>>                         dev_warn(&intf->dev, "rebind failed: %d\n", rc);
>>         }
>> }
> 
> What USB driver is returning -EPROBE_DEFER to cause this to be an issue?
> Shouldn't that really only be for "platform" drivers and the like?  USB
> interface drivers should all be "self-contained" within reason.
> 

I see this as well with btusb driver in resume if port was reset.

drivers/base/dd.c really_probe() returns -EPROBE_DEFER if it's called before
device_unblock_probing() is called.

drivers/base/power/main/dpm_complete() will unlock probing after it has
finished resuming all devices and called all the pm_ops .complete callbacks.

The usb_device_pm_ops .complete callback will try to rebind the interface driver
if device was reset at resume, leading to them -EPROBE_DEFER.
  
I guess we either need to rework a few things, or remove that warning.

-Mathias   

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

* Re: question about usb_rebind_intf
  2017-11-17 17:45   ` Mathias Nyman
@ 2017-11-17 18:21     ` Alan Stern
  2017-11-18 10:28       ` Greg Kroah-Hartman
  2017-11-20 10:39       ` question about usb_rebind_intf Oliver Neukum
  0 siblings, 2 replies; 8+ messages in thread
From: Alan Stern @ 2017-11-17 18:21 UTC (permalink / raw)
  To: Mathias Nyman; +Cc: Greg Kroah-Hartman, linux-usb, linux-kernel

On Fri, 17 Nov 2017, Mathias Nyman wrote:

> On 17.11.2017 19:09, Greg Kroah-Hartman wrote:
> > On Fri, Nov 17, 2017 at 09:35:51AM -0700, Jerry Snitselaar wrote:
> >> Should this skip warning that the rebind failed if device_attach
> >> is returning -EPROBE_DEFER? If I do something like 'rtcwake -m mem -s 30'
> >> on a laptop I have here I will see a couple "rebind failed: -517" messages
> >> as it comes back out of suspend. Since the device probe eventually happens
> >> once probes are not deferred wondering if this warning this be given in that
> >> case.
> >>
> >>
> >> diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c
> >> index 64262a9a8829..5d3408010112 100644
> >> --- a/drivers/usb/core/driver.c
> >> +++ b/drivers/usb/core/driver.c
> >> @@ -1070,7 +1070,7 @@ static void usb_rebind_intf(struct usb_interface *intf)
> >>         if (!intf->dev.power.is_prepared) {
> >>                 intf->needs_binding = 0;
> >>                 rc = device_attach(&intf->dev);
> >> -               if (rc < 0)
> >> +               if (rc < 0 && rc != -EPROBE_DEFER)
> >>                         dev_warn(&intf->dev, "rebind failed: %d\n", rc);
> >>         }
> >> }
> > 
> > What USB driver is returning -EPROBE_DEFER to cause this to be an issue?
> > Shouldn't that really only be for "platform" drivers and the like?  USB
> > interface drivers should all be "self-contained" within reason.
> > 
> 
> I see this as well with btusb driver in resume if port was reset.
> 
> drivers/base/dd.c really_probe() returns -EPROBE_DEFER if it's called before
> device_unblock_probing() is called.
> 
> drivers/base/power/main/dpm_complete() will unlock probing after it has
> finished resuming all devices and called all the pm_ops .complete callbacks.
> 
> The usb_device_pm_ops .complete callback will try to rebind the interface driver
> if device was reset at resume, leading to them -EPROBE_DEFER.
>   
> I guess we either need to rework a few things, or remove that warning.

I agree, and the patch seems like a good idea for now.

The real fix would be to change the interface drivers by adding proper 
support for reset-resume.  Otherwise there will always be a time window 
following resume during which the interface is non-functional.

Alan Stern

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

* Re: question about usb_rebind_intf
  2017-11-17 18:21     ` Alan Stern
@ 2017-11-18 10:28       ` Greg Kroah-Hartman
  2017-12-04 12:05         ` [PATCH] usb: Don't print a warning if interface driver rebind is deferred at resume Mathias Nyman
  2017-11-20 10:39       ` question about usb_rebind_intf Oliver Neukum
  1 sibling, 1 reply; 8+ messages in thread
From: Greg Kroah-Hartman @ 2017-11-18 10:28 UTC (permalink / raw)
  To: Alan Stern; +Cc: Mathias Nyman, linux-usb, linux-kernel

On Fri, Nov 17, 2017 at 01:21:28PM -0500, Alan Stern wrote:
> On Fri, 17 Nov 2017, Mathias Nyman wrote:
> 
> > On 17.11.2017 19:09, Greg Kroah-Hartman wrote:
> > > On Fri, Nov 17, 2017 at 09:35:51AM -0700, Jerry Snitselaar wrote:
> > >> Should this skip warning that the rebind failed if device_attach
> > >> is returning -EPROBE_DEFER? If I do something like 'rtcwake -m mem -s 30'
> > >> on a laptop I have here I will see a couple "rebind failed: -517" messages
> > >> as it comes back out of suspend. Since the device probe eventually happens
> > >> once probes are not deferred wondering if this warning this be given in that
> > >> case.
> > >>
> > >>
> > >> diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c
> > >> index 64262a9a8829..5d3408010112 100644
> > >> --- a/drivers/usb/core/driver.c
> > >> +++ b/drivers/usb/core/driver.c
> > >> @@ -1070,7 +1070,7 @@ static void usb_rebind_intf(struct usb_interface *intf)
> > >>         if (!intf->dev.power.is_prepared) {
> > >>                 intf->needs_binding = 0;
> > >>                 rc = device_attach(&intf->dev);
> > >> -               if (rc < 0)
> > >> +               if (rc < 0 && rc != -EPROBE_DEFER)
> > >>                         dev_warn(&intf->dev, "rebind failed: %d\n", rc);
> > >>         }
> > >> }
> > > 
> > > What USB driver is returning -EPROBE_DEFER to cause this to be an issue?
> > > Shouldn't that really only be for "platform" drivers and the like?  USB
> > > interface drivers should all be "self-contained" within reason.
> > > 
> > 
> > I see this as well with btusb driver in resume if port was reset.
> > 
> > drivers/base/dd.c really_probe() returns -EPROBE_DEFER if it's called before
> > device_unblock_probing() is called.
> > 
> > drivers/base/power/main/dpm_complete() will unlock probing after it has
> > finished resuming all devices and called all the pm_ops .complete callbacks.
> > 
> > The usb_device_pm_ops .complete callback will try to rebind the interface driver
> > if device was reset at resume, leading to them -EPROBE_DEFER.
> >   
> > I guess we either need to rework a few things, or remove that warning.
> 
> I agree, and the patch seems like a good idea for now.

Ah, I forgot about the reset stuff.

If someone sends this patch in a format that can be applied, that would
be nice :)

thanks,

greg k-h

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

* Re: question about usb_rebind_intf
  2017-11-17 18:21     ` Alan Stern
  2017-11-18 10:28       ` Greg Kroah-Hartman
@ 2017-11-20 10:39       ` Oliver Neukum
  1 sibling, 0 replies; 8+ messages in thread
From: Oliver Neukum @ 2017-11-20 10:39 UTC (permalink / raw)
  To: Alan Stern, Mathias Nyman; +Cc: Greg Kroah-Hartman, linux-kernel, linux-usb

Am Freitag, den 17.11.2017, 13:21 -0500 schrieb Alan Stern:
> 
> The real fix would be to change the interface drivers by adding proper 
> support for reset-resume.  Otherwise there will always be a time window 
> following resume during which the interface is non-functional.

Very hard to do with btusb. The connection is messed up if we lose
power.

	Regards
		Oliver

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

* [PATCH] usb: Don't print a warning if interface driver rebind is deferred at resume
  2017-11-18 10:28       ` Greg Kroah-Hartman
@ 2017-12-04 12:05         ` Mathias Nyman
  2017-12-04 18:45           ` Jerry Snitselaar
  0 siblings, 1 reply; 8+ messages in thread
From: Mathias Nyman @ 2017-12-04 12:05 UTC (permalink / raw)
  To: gregkh; +Cc: stern, jsnitsel, linux-usb, linux-kernel, Mathias Nyman

Interface drivers like btusb that don't support reset-resume will be
rebound at resume if port was reset. Rebind is done during the pm_ops
.complete callback when probe returns EPROBE_DEFER as default.

Remove the "rebind failed: -517" message.
Device probe will eventually take place later.

[one-liner by Jerry Snitselaar posted in a mailing list question -Mathias]
Suggested-by: Jerry Snitselaar <jsnitsel@redhat.com>
Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
---
 drivers/usb/core/driver.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c
index 64262a9a..5d34080 100644
--- a/drivers/usb/core/driver.c
+++ b/drivers/usb/core/driver.c
@@ -1070,7 +1070,7 @@ static void usb_rebind_intf(struct usb_interface *intf)
 	if (!intf->dev.power.is_prepared) {
 		intf->needs_binding = 0;
 		rc = device_attach(&intf->dev);
-		if (rc < 0)
+		if (rc < 0 && rc != -EPROBE_DEFER)
 			dev_warn(&intf->dev, "rebind failed: %d\n", rc);
 	}
 }
-- 
2.7.4

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

* Re: [PATCH] usb: Don't print a warning if interface driver rebind is deferred at resume
  2017-12-04 12:05         ` [PATCH] usb: Don't print a warning if interface driver rebind is deferred at resume Mathias Nyman
@ 2017-12-04 18:45           ` Jerry Snitselaar
  0 siblings, 0 replies; 8+ messages in thread
From: Jerry Snitselaar @ 2017-12-04 18:45 UTC (permalink / raw)
  To: Mathias Nyman; +Cc: gregkh, stern, linux-usb, linux-kernel

On Mon Dec 04 17, Mathias Nyman wrote:
>Interface drivers like btusb that don't support reset-resume will be
>rebound at resume if port was reset. Rebind is done during the pm_ops
>.complete callback when probe returns EPROBE_DEFER as default.
>
>Remove the "rebind failed: -517" message.
>Device probe will eventually take place later.
>
>[one-liner by Jerry Snitselaar posted in a mailing list question -Mathias]
>Suggested-by: Jerry Snitselaar <jsnitsel@redhat.com>
>Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
>---
> drivers/usb/core/driver.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
>diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c
>index 64262a9a..5d34080 100644
>--- a/drivers/usb/core/driver.c
>+++ b/drivers/usb/core/driver.c
>@@ -1070,7 +1070,7 @@ static void usb_rebind_intf(struct usb_interface *intf)
> 	if (!intf->dev.power.is_prepared) {
> 		intf->needs_binding = 0;
> 		rc = device_attach(&intf->dev);
>-		if (rc < 0)
>+		if (rc < 0 && rc != -EPROBE_DEFER)
> 			dev_warn(&intf->dev, "rebind failed: %d\n", rc);
> 	}
> }
>-- 
>2.7.4
>

Thanks for sending this. It looks like my filters sent the ensuing
conversation off into never-never land or I wasn't cc'd and just
missed it in the mailing lists.

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

end of thread, other threads:[~2017-12-04 18:45 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-11-17 16:35 question about usb_rebind_intf Jerry Snitselaar
2017-11-17 17:09 ` Greg Kroah-Hartman
2017-11-17 17:45   ` Mathias Nyman
2017-11-17 18:21     ` Alan Stern
2017-11-18 10:28       ` Greg Kroah-Hartman
2017-12-04 12:05         ` [PATCH] usb: Don't print a warning if interface driver rebind is deferred at resume Mathias Nyman
2017-12-04 18:45           ` Jerry Snitselaar
2017-11-20 10:39       ` question about usb_rebind_intf Oliver Neukum

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.