[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <Pine.LNX.4.44L0.1104211205090.1939-100000@iolanthe.rowland.org>
Date: Thu, 21 Apr 2011 12:27:21 -0400 (EDT)
From: Alan Stern <stern@...land.harvard.edu>
To: Paul Stewart <pstew@...omium.org>
cc: netdev@...r.kernel.org, <linux-usb@...r.kernel.org>,
<davem@...emloft.net>, <greg@...ah.com>
Subject: Re: [PATCHv4] usbnet: Resubmit interrupt URB once if halted
On Thu, 21 Apr 2011, Paul Stewart wrote:
> I'm trying to handle two separate issues, one of which I can't say I
> fully understand. The first, which is the most straightforward, is
> for systems in which USB devices remained powered across
> suspend-resume. For this case for sure, we don't need a flag. The
> interrupt URBs are halted (either done so by the HCD as I've observed,
> or the drive can choose to kill them in usbnet_suspend()). On system
> resume, we're guaranteed URBs have stopped, and we can just submit
> one.
Okay, good.
> In a second scenario, for other systems USB devices go unpowered
> during suspend.
As happens during hibernation, for example.
> At resume time, there's a quick succession where the
> device appears to detach and reattach and enumerate.
Right. It's called reset-resume, and drivers have a special method for
it, distinct from regular resume. In theory it shouldn't make any
difference.
> This is where
> things get strange. It appears that since the enumeration happens in
> the course of system resume, when usbnet_open() gets called, and
> usb_autopm_get_interface(), there's a call path that leads to
> usbnet_resume().
Only if the interface was suspended when usbnet_open() was called. It
might have gotten suspended automatically following the system resume,
if it wasn't in use. But this should work out the same whether or not
there was a reset-rseume.
> If there's no flag, then we submit the interrupt urb
> from usbnet_resume(), so the submit_urb() in usbnet_open() fails in an
> error. This makes actions like "ifconfig eth0 up" fail on the
> interface after resume from suspend.
The driver needs better coordination between open/stop and
resume/suspend. The interrupt and receive URBs are supposed to be
active whenever the interface is up and not suspended, right? Which
means that usbnet_resume() shouldn't submit anything if the interface
isn't up.
Alan Stern
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists