Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1695259 > unrolled thread

[PATCH] PM / USB: hcd_pci: Skip secondary root hub check for HCD_DEAD()

Started by"Rafael J. Wysocki" <rjw@rjwysocki.net>
First post2017-07-25 01:20 +0200
Last post2017-07-30 19:10 +0200
Articles 10 — 3 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH] PM / USB: hcd_pci: Skip secondary root hub check for HCD_DEAD() "Rafael J. Wysocki" <rjw@rjwysocki.net> - 2017-07-25 01:20 +0200
    Re: [PATCH] PM / USB: hcd_pci: Skip secondary root hub check for  HCD_DEAD() Alan Stern <stern@rowland.harvard.edu> - 2017-07-25 16:10 +0200
      Re: [PATCH] PM / USB: hcd_pci: Skip secondary root hub check for HCD_DEAD() "Rafael J. Wysocki" <rjw@rjwysocki.net> - 2017-07-25 18:10 +0200
        Re: [PATCH] PM / USB: hcd_pci: Skip secondary root hub check for HCD_DEAD() "Rafael J. Wysocki" <rjw@rjwysocki.net> - 2017-07-25 22:50 +0200
          Re: [PATCH] PM / USB: hcd_pci: Skip secondary root hub check for  HCD_DEAD() Alan Stern <stern@rowland.harvard.edu> - 2017-07-25 23:10 +0200
            Re: [PATCH] PM / USB: hcd_pci: Skip secondary root hub check for HCD_DEAD() "Rafael J. Wysocki" <rjw@rjwysocki.net> - 2017-07-25 23:50 +0200
    [PATCH] USB: hcd: Mark secondary HCD as dead if the primary one died "Rafael J. Wysocki" <rjw@rjwysocki.net> - 2017-07-26 00:10 +0200
      Re: [PATCH] USB: hcd: Mark secondary HCD as dead if the primary one  died Alan Stern <stern@rowland.harvard.edu> - 2017-07-26 16:30 +0200
        Re: [PATCH] USB: hcd: Mark secondary HCD as dead if the primary one died "Rafael J. Wysocki" <rjw@rjwysocki.net> - 2017-07-26 19:20 +0200
          Re: [PATCH] USB: hcd: Mark secondary HCD as dead if the primary one  died Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2017-07-30 19:10 +0200

#1695259 — [PATCH] PM / USB: hcd_pci: Skip secondary root hub check for HCD_DEAD()

From"Rafael J. Wysocki" <rjw@rjwysocki.net>
Date2017-07-25 01:20 +0200
Subject[PATCH] PM / USB: hcd_pci: Skip secondary root hub check for HCD_DEAD()
Message-ID<u6UNR-3md-13@gated-at.bofh.it>
From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

If HCD_DEAD(hcd) is "true" in check_root_hub_suspended(), it is
rather pointless to check the secondary root hub, so return early
then.

This actually fixes occasional suspend failures on one of my test
machines.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
---
 drivers/usb/core/hcd-pci.c |    3 +++
 1 file changed, 3 insertions(+)

Index: linux-pm/drivers/usb/core/hcd-pci.c
===================================================================
--- linux-pm.orig/drivers/usb/core/hcd-pci.c
+++ linux-pm/drivers/usb/core/hcd-pci.c
@@ -427,6 +427,9 @@ static int check_root_hub_suspended(stru
 		dev_warn(dev, "Root hub is not suspended\n");
 		return -EBUSY;
 	}
+	if (HCD_DEAD(hcd))
+		return 0;
+
 	if (hcd->shared_hcd) {
 		hcd = hcd->shared_hcd;
 		if (HCD_RH_RUNNING(hcd)) {

[toc] | [next] | [standalone]


#1695766 — Re: [PATCH] PM / USB: hcd_pci: Skip secondary root hub check for HCD_DEAD()

FromAlan Stern <stern@rowland.harvard.edu>
Date2017-07-25 16:10 +0200
SubjectRe: [PATCH] PM / USB: hcd_pci: Skip secondary root hub check for HCD_DEAD()
Message-ID<u78H7-3MX-17@gated-at.bofh.it>
In reply to#1695259
On Tue, 25 Jul 2017, Rafael J. Wysocki wrote:

> From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> 
> If HCD_DEAD(hcd) is "true" in check_root_hub_suspended(), it is
> rather pointless to check the secondary root hub, so return early
> then.
> 
> This actually fixes occasional suspend failures on one of my test
> machines.
> 
> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> ---
>  drivers/usb/core/hcd-pci.c |    3 +++
>  1 file changed, 3 insertions(+)
> 
> Index: linux-pm/drivers/usb/core/hcd-pci.c
> ===================================================================
> --- linux-pm.orig/drivers/usb/core/hcd-pci.c
> +++ linux-pm/drivers/usb/core/hcd-pci.c
> @@ -427,6 +427,9 @@ static int check_root_hub_suspended(stru
>  		dev_warn(dev, "Root hub is not suspended\n");
>  		return -EBUSY;
>  	}
> +	if (HCD_DEAD(hcd))
> +		return 0;
> +
>  	if (hcd->shared_hcd) {
>  		hcd = hcd->shared_hcd;
>  		if (HCD_RH_RUNNING(hcd)) {

While this is an okay solution, IMO it would be more reliable and more 
general to have usb_hc_died() clear the HCD_FLAG_RH_RUNNING bit and set 
the HCD_FLAG_DEAD bit in the shared hcd.  Right now it only does these 
things for the primary.

Would you like to write and test a patch to do that?

Incidentally, if this fixes occasional suspend failures on your test 
machine, does that mean the test machine's host controller occasionally 
dies?  Maybe that should be fixed too...

Alan Stern

[toc] | [prev] | [next] | [standalone]


#1695915

From"Rafael J. Wysocki" <rjw@rjwysocki.net>
Date2017-07-25 18:10 +0200
Message-ID<u7azf-4ZJ-11@gated-at.bofh.it>
In reply to#1695766
On Tuesday, July 25, 2017 10:05:03 AM Alan Stern wrote:
> On Tue, 25 Jul 2017, Rafael J. Wysocki wrote:
> 
> > From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> > 
> > If HCD_DEAD(hcd) is "true" in check_root_hub_suspended(), it is
> > rather pointless to check the secondary root hub, so return early
> > then.
> > 
> > This actually fixes occasional suspend failures on one of my test
> > machines.
> > 
> > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> > ---
> >  drivers/usb/core/hcd-pci.c |    3 +++
> >  1 file changed, 3 insertions(+)
> > 
> > Index: linux-pm/drivers/usb/core/hcd-pci.c
> > ===================================================================
> > --- linux-pm.orig/drivers/usb/core/hcd-pci.c
> > +++ linux-pm/drivers/usb/core/hcd-pci.c
> > @@ -427,6 +427,9 @@ static int check_root_hub_suspended(stru
> >  		dev_warn(dev, "Root hub is not suspended\n");
> >  		return -EBUSY;
> >  	}
> > +	if (HCD_DEAD(hcd))
> > +		return 0;
> > +
> >  	if (hcd->shared_hcd) {
> >  		hcd = hcd->shared_hcd;
> >  		if (HCD_RH_RUNNING(hcd)) {
> 
> While this is an okay solution, IMO it would be more reliable and more 
> general to have usb_hc_died() clear the HCD_FLAG_RH_RUNNING bit and set 
> the HCD_FLAG_DEAD bit in the shared hcd.  Right now it only does these 
> things for the primary.
> 
> Would you like to write and test a patch to do that?

I can do that.

> Incidentally, if this fixes occasional suspend failures on your test 
> machine, does that mean the test machine's host controller occasionally 
> dies?  Maybe that should be fixed too...

Yes, it does sometimes.

What appears to happen is that the platform does not initialize properly
sometimes after a reset and then the HCD dies during suspend.

So reproduction may be somewhat tricky, but oh well.

Thanks,
Rafael

[toc] | [prev] | [next] | [standalone]


#1696411

From"Rafael J. Wysocki" <rjw@rjwysocki.net>
Date2017-07-25 22:50 +0200
Message-ID<u7eWf-7DI-57@gated-at.bofh.it>
In reply to#1695915
On Tuesday, July 25, 2017 05:59:04 PM Rafael J. Wysocki wrote:
> On Tuesday, July 25, 2017 10:05:03 AM Alan Stern wrote:
> > On Tue, 25 Jul 2017, Rafael J. Wysocki wrote:
> > 
> > > From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> > > 
> > > If HCD_DEAD(hcd) is "true" in check_root_hub_suspended(), it is
> > > rather pointless to check the secondary root hub, so return early
> > > then.
> > > 
> > > This actually fixes occasional suspend failures on one of my test
> > > machines.
> > > 
> > > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> > > ---
> > >  drivers/usb/core/hcd-pci.c |    3 +++
> > >  1 file changed, 3 insertions(+)
> > > 
> > > Index: linux-pm/drivers/usb/core/hcd-pci.c
> > > ===================================================================
> > > --- linux-pm.orig/drivers/usb/core/hcd-pci.c
> > > +++ linux-pm/drivers/usb/core/hcd-pci.c
> > > @@ -427,6 +427,9 @@ static int check_root_hub_suspended(stru
> > >  		dev_warn(dev, "Root hub is not suspended\n");
> > >  		return -EBUSY;
> > >  	}
> > > +	if (HCD_DEAD(hcd))
> > > +		return 0;
> > > +
> > >  	if (hcd->shared_hcd) {
> > >  		hcd = hcd->shared_hcd;
> > >  		if (HCD_RH_RUNNING(hcd)) {
> > 
> > While this is an okay solution, IMO it would be more reliable and more 
> > general to have usb_hc_died() clear the HCD_FLAG_RH_RUNNING bit and set 
> > the HCD_FLAG_DEAD bit in the shared hcd.  Right now it only does these 
> > things for the primary.
> > 
> > Would you like to write and test a patch to do that?
> 
> I can do that.

Just to make sure that we are on the same page, is the below what you mean?

---
 drivers/usb/core/hcd.c |    2 ++
 1 file changed, 2 insertions(+)

Index: linux-pm/drivers/usb/core/hcd.c
===================================================================
--- linux-pm.orig/drivers/usb/core/hcd.c
+++ linux-pm/drivers/usb/core/hcd.c
@@ -2485,6 +2485,8 @@ void usb_hc_died (struct usb_hcd *hcd)
 	}
 	if (usb_hcd_is_primary_hcd(hcd) && hcd->shared_hcd) {
 		hcd = hcd->shared_hcd;
+		clear_bit(HCD_FLAG_RH_RUNNING, &hcd->flags);
+		set_bit(HCD_FLAG_DEAD, &hcd->flags);
 		if (hcd->rh_registered) {
 			clear_bit(HCD_FLAG_POLL_RH, &hcd->flags);
 

[toc] | [prev] | [next] | [standalone]


#1696463 — Re: [PATCH] PM / USB: hcd_pci: Skip secondary root hub check for HCD_DEAD()

FromAlan Stern <stern@rowland.harvard.edu>
Date2017-07-25 23:10 +0200
SubjectRe: [PATCH] PM / USB: hcd_pci: Skip secondary root hub check for HCD_DEAD()
Message-ID<u7ffz-82I-19@gated-at.bofh.it>
In reply to#1696411
On Tue, 25 Jul 2017, Rafael J. Wysocki wrote:

> On Tuesday, July 25, 2017 05:59:04 PM Rafael J. Wysocki wrote:
> > On Tuesday, July 25, 2017 10:05:03 AM Alan Stern wrote:
> > > On Tue, 25 Jul 2017, Rafael J. Wysocki wrote:
> > > 
> > > > From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> > > > 
> > > > If HCD_DEAD(hcd) is "true" in check_root_hub_suspended(), it is
> > > > rather pointless to check the secondary root hub, so return early
> > > > then.
> > > > 
> > > > This actually fixes occasional suspend failures on one of my test
> > > > machines.
> > > > 
> > > > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> > > > ---
> > > >  drivers/usb/core/hcd-pci.c |    3 +++
> > > >  1 file changed, 3 insertions(+)
> > > > 
> > > > Index: linux-pm/drivers/usb/core/hcd-pci.c
> > > > ===================================================================
> > > > --- linux-pm.orig/drivers/usb/core/hcd-pci.c
> > > > +++ linux-pm/drivers/usb/core/hcd-pci.c
> > > > @@ -427,6 +427,9 @@ static int check_root_hub_suspended(stru
> > > >  		dev_warn(dev, "Root hub is not suspended\n");
> > > >  		return -EBUSY;
> > > >  	}
> > > > +	if (HCD_DEAD(hcd))
> > > > +		return 0;
> > > > +
> > > >  	if (hcd->shared_hcd) {
> > > >  		hcd = hcd->shared_hcd;
> > > >  		if (HCD_RH_RUNNING(hcd)) {
> > > 
> > > While this is an okay solution, IMO it would be more reliable and more 
> > > general to have usb_hc_died() clear the HCD_FLAG_RH_RUNNING bit and set 
> > > the HCD_FLAG_DEAD bit in the shared hcd.  Right now it only does these 
> > > things for the primary.
> > > 
> > > Would you like to write and test a patch to do that?
> > 
> > I can do that.
> 
> Just to make sure that we are on the same page, is the below what you mean?
> 
> ---
>  drivers/usb/core/hcd.c |    2 ++
>  1 file changed, 2 insertions(+)
> 
> Index: linux-pm/drivers/usb/core/hcd.c
> ===================================================================
> --- linux-pm.orig/drivers/usb/core/hcd.c
> +++ linux-pm/drivers/usb/core/hcd.c
> @@ -2485,6 +2485,8 @@ void usb_hc_died (struct usb_hcd *hcd)
>  	}
>  	if (usb_hcd_is_primary_hcd(hcd) && hcd->shared_hcd) {
>  		hcd = hcd->shared_hcd;
> +		clear_bit(HCD_FLAG_RH_RUNNING, &hcd->flags);
> +		set_bit(HCD_FLAG_DEAD, &hcd->flags);
>  		if (hcd->rh_registered) {
>  			clear_bit(HCD_FLAG_POLL_RH, &hcd->flags);

Yes, exactly.  Does it fix your suspend problem?

Alan Stern

[toc] | [prev] | [next] | [standalone]


#1696616

From"Rafael J. Wysocki" <rjw@rjwysocki.net>
Date2017-07-25 23:50 +0200
Message-ID<u7fSi-8jG-37@gated-at.bofh.it>
In reply to#1696463
On Tuesday, July 25, 2017 05:06:40 PM Alan Stern wrote:
> On Tue, 25 Jul 2017, Rafael J. Wysocki wrote:
> 
> > On Tuesday, July 25, 2017 05:59:04 PM Rafael J. Wysocki wrote:
> > > On Tuesday, July 25, 2017 10:05:03 AM Alan Stern wrote:
> > > > On Tue, 25 Jul 2017, Rafael J. Wysocki wrote:
> > > > 
> > > > > From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> > > > > 
> > > > > If HCD_DEAD(hcd) is "true" in check_root_hub_suspended(), it is
> > > > > rather pointless to check the secondary root hub, so return early
> > > > > then.
> > > > > 
> > > > > This actually fixes occasional suspend failures on one of my test
> > > > > machines.
> > > > > 
> > > > > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> > > > > ---
> > > > >  drivers/usb/core/hcd-pci.c |    3 +++
> > > > >  1 file changed, 3 insertions(+)
> > > > > 
> > > > > Index: linux-pm/drivers/usb/core/hcd-pci.c
> > > > > ===================================================================
> > > > > --- linux-pm.orig/drivers/usb/core/hcd-pci.c
> > > > > +++ linux-pm/drivers/usb/core/hcd-pci.c
> > > > > @@ -427,6 +427,9 @@ static int check_root_hub_suspended(stru
> > > > >  		dev_warn(dev, "Root hub is not suspended\n");
> > > > >  		return -EBUSY;
> > > > >  	}
> > > > > +	if (HCD_DEAD(hcd))
> > > > > +		return 0;
> > > > > +
> > > > >  	if (hcd->shared_hcd) {
> > > > >  		hcd = hcd->shared_hcd;
> > > > >  		if (HCD_RH_RUNNING(hcd)) {
> > > > 
> > > > While this is an okay solution, IMO it would be more reliable and more 
> > > > general to have usb_hc_died() clear the HCD_FLAG_RH_RUNNING bit and set 
> > > > the HCD_FLAG_DEAD bit in the shared hcd.  Right now it only does these 
> > > > things for the primary.
> > > > 
> > > > Would you like to write and test a patch to do that?
> > > 
> > > I can do that.
> > 
> > Just to make sure that we are on the same page, is the below what you mean?
> > 
> > ---
> >  drivers/usb/core/hcd.c |    2 ++
> >  1 file changed, 2 insertions(+)
> > 
> > Index: linux-pm/drivers/usb/core/hcd.c
> > ===================================================================
> > --- linux-pm.orig/drivers/usb/core/hcd.c
> > +++ linux-pm/drivers/usb/core/hcd.c
> > @@ -2485,6 +2485,8 @@ void usb_hc_died (struct usb_hcd *hcd)
> >  	}
> >  	if (usb_hcd_is_primary_hcd(hcd) && hcd->shared_hcd) {
> >  		hcd = hcd->shared_hcd;
> > +		clear_bit(HCD_FLAG_RH_RUNNING, &hcd->flags);
> > +		set_bit(HCD_FLAG_DEAD, &hcd->flags);
> >  		if (hcd->rh_registered) {
> >  			clear_bit(HCD_FLAG_POLL_RH, &hcd->flags);
> 
> Yes, exactly.  Does it fix your suspend problem?

Yes, it does.

I guess I should resend it with a changelog and tags, then.

Thanks,
Rafael

[toc] | [prev] | [next] | [standalone]


#1696629 — [PATCH] USB: hcd: Mark secondary HCD as dead if the primary one died

From"Rafael J. Wysocki" <rjw@rjwysocki.net>
Date2017-07-26 00:10 +0200
Subject[PATCH] USB: hcd: Mark secondary HCD as dead if the primary one died
Message-ID<u7gbD-eH-11@gated-at.bofh.it>
In reply to#1695259
From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

Make usb_hc_died() clear the HCD_FLAG_RH_RUNNING flag for the shared
HCD and set HCD_FLAG_DEAD for it, in analogy with what is done for
the primary one.

Among other thigs, this prevents check_root_hub_suspended() from
returning -EBUSY for dead HCDs which helps to work around system
suspend issues in some situations.

This actually fixes occasional suspend failures on one of my test
machines.

Suggested-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
---
 drivers/usb/core/hcd.c |    2 ++
 1 file changed, 2 insertions(+)

Index: linux-pm/drivers/usb/core/hcd.c
===================================================================
--- linux-pm.orig/drivers/usb/core/hcd.c
+++ linux-pm/drivers/usb/core/hcd.c
@@ -2485,6 +2485,8 @@ void usb_hc_died (struct usb_hcd *hcd)
 	}
 	if (usb_hcd_is_primary_hcd(hcd) && hcd->shared_hcd) {
 		hcd = hcd->shared_hcd;
+		clear_bit(HCD_FLAG_RH_RUNNING, &hcd->flags);
+		set_bit(HCD_FLAG_DEAD, &hcd->flags);
 		if (hcd->rh_registered) {
 			clear_bit(HCD_FLAG_POLL_RH, &hcd->flags);
 

[toc] | [prev] | [next] | [standalone]


#1697200 — Re: [PATCH] USB: hcd: Mark secondary HCD as dead if the primary one died

FromAlan Stern <stern@rowland.harvard.edu>
Date2017-07-26 16:30 +0200
SubjectRe: [PATCH] USB: hcd: Mark secondary HCD as dead if the primary one died
Message-ID<u7vu4-1s1-67@gated-at.bofh.it>
In reply to#1696629
On Tue, 25 Jul 2017, Rafael J. Wysocki wrote:

> From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> 
> Make usb_hc_died() clear the HCD_FLAG_RH_RUNNING flag for the shared
> HCD and set HCD_FLAG_DEAD for it, in analogy with what is done for
> the primary one.
> 
> Among other thigs, this prevents check_root_hub_suspended() from
> returning -EBUSY for dead HCDs which helps to work around system
> suspend issues in some situations.
> 
> This actually fixes occasional suspend failures on one of my test
> machines.
> 
> Suggested-by: Alan Stern <stern@rowland.harvard.edu>
> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> ---
>  drivers/usb/core/hcd.c |    2 ++
>  1 file changed, 2 insertions(+)
> 
> Index: linux-pm/drivers/usb/core/hcd.c
> ===================================================================
> --- linux-pm.orig/drivers/usb/core/hcd.c
> +++ linux-pm/drivers/usb/core/hcd.c
> @@ -2485,6 +2485,8 @@ void usb_hc_died (struct usb_hcd *hcd)
>  	}
>  	if (usb_hcd_is_primary_hcd(hcd) && hcd->shared_hcd) {
>  		hcd = hcd->shared_hcd;
> +		clear_bit(HCD_FLAG_RH_RUNNING, &hcd->flags);
> +		set_bit(HCD_FLAG_DEAD, &hcd->flags);
>  		if (hcd->rh_registered) {
>  			clear_bit(HCD_FLAG_POLL_RH, &hcd->flags);

Acked-by: Alan Stern <stern@rowland.harvard.edu>

[toc] | [prev] | [next] | [standalone]


#1697406 — Re: [PATCH] USB: hcd: Mark secondary HCD as dead if the primary one died

From"Rafael J. Wysocki" <rjw@rjwysocki.net>
Date2017-07-26 19:20 +0200
SubjectRe: [PATCH] USB: hcd: Mark secondary HCD as dead if the primary one died
Message-ID<u7y8z-3b6-61@gated-at.bofh.it>
In reply to#1697200
On Wednesday, July 26, 2017 10:21:54 AM Alan Stern wrote:
> On Tue, 25 Jul 2017, Rafael J. Wysocki wrote:
> 
> > From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> > 
> > Make usb_hc_died() clear the HCD_FLAG_RH_RUNNING flag for the shared
> > HCD and set HCD_FLAG_DEAD for it, in analogy with what is done for
> > the primary one.
> > 
> > Among other thigs, this prevents check_root_hub_suspended() from
> > returning -EBUSY for dead HCDs which helps to work around system
> > suspend issues in some situations.
> > 
> > This actually fixes occasional suspend failures on one of my test
> > machines.
> > 
> > Suggested-by: Alan Stern <stern@rowland.harvard.edu>
> > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> > ---
> >  drivers/usb/core/hcd.c |    2 ++
> >  1 file changed, 2 insertions(+)
> > 
> > Index: linux-pm/drivers/usb/core/hcd.c
> > ===================================================================
> > --- linux-pm.orig/drivers/usb/core/hcd.c
> > +++ linux-pm/drivers/usb/core/hcd.c
> > @@ -2485,6 +2485,8 @@ void usb_hc_died (struct usb_hcd *hcd)
> >  	}
> >  	if (usb_hcd_is_primary_hcd(hcd) && hcd->shared_hcd) {
> >  		hcd = hcd->shared_hcd;
> > +		clear_bit(HCD_FLAG_RH_RUNNING, &hcd->flags);
> > +		set_bit(HCD_FLAG_DEAD, &hcd->flags);
> >  		if (hcd->rh_registered) {
> >  			clear_bit(HCD_FLAG_POLL_RH, &hcd->flags);
> 
> Acked-by: Alan Stern <stern@rowland.harvard.edu>
> 

Thanks!

I guess this should go in via USB, so Felipe & Greg, please apply or let me
know if you prefer me to handle it.

Thanks,
Rafael

[toc] | [prev] | [next] | [standalone]


#1699580 — Re: [PATCH] USB: hcd: Mark secondary HCD as dead if the primary one died

FromGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Date2017-07-30 19:10 +0200
SubjectRe: [PATCH] USB: hcd: Mark secondary HCD as dead if the primary one died
Message-ID<u8ZT4-37Q-15@gated-at.bofh.it>
In reply to#1697406
On Wed, Jul 26, 2017 at 07:07:51PM +0200, Rafael J. Wysocki wrote:
> On Wednesday, July 26, 2017 10:21:54 AM Alan Stern wrote:
> > On Tue, 25 Jul 2017, Rafael J. Wysocki wrote:
> > 
> > > From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> > > 
> > > Make usb_hc_died() clear the HCD_FLAG_RH_RUNNING flag for the shared
> > > HCD and set HCD_FLAG_DEAD for it, in analogy with what is done for
> > > the primary one.
> > > 
> > > Among other thigs, this prevents check_root_hub_suspended() from
> > > returning -EBUSY for dead HCDs which helps to work around system
> > > suspend issues in some situations.
> > > 
> > > This actually fixes occasional suspend failures on one of my test
> > > machines.
> > > 
> > > Suggested-by: Alan Stern <stern@rowland.harvard.edu>
> > > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> > > ---
> > >  drivers/usb/core/hcd.c |    2 ++
> > >  1 file changed, 2 insertions(+)
> > > 
> > > Index: linux-pm/drivers/usb/core/hcd.c
> > > ===================================================================
> > > --- linux-pm.orig/drivers/usb/core/hcd.c
> > > +++ linux-pm/drivers/usb/core/hcd.c
> > > @@ -2485,6 +2485,8 @@ void usb_hc_died (struct usb_hcd *hcd)
> > >  	}
> > >  	if (usb_hcd_is_primary_hcd(hcd) && hcd->shared_hcd) {
> > >  		hcd = hcd->shared_hcd;
> > > +		clear_bit(HCD_FLAG_RH_RUNNING, &hcd->flags);
> > > +		set_bit(HCD_FLAG_DEAD, &hcd->flags);
> > >  		if (hcd->rh_registered) {
> > >  			clear_bit(HCD_FLAG_POLL_RH, &hcd->flags);
> > 
> > Acked-by: Alan Stern <stern@rowland.harvard.edu>
> > 
> 
> Thanks!
> 
> I guess this should go in via USB, so Felipe & Greg, please apply or let me
> know if you prefer me to handle it.

I'll take it, thanks.

greg k-h

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web