[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <Pine.LNX.4.44L0.1104210958560.1939-100000@iolanthe.rowland.org>
Date: Thu, 21 Apr 2011 10:03:34 -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 Tue, 19 Apr 2011, Paul Stewart wrote:
> Set a flag if the interrupt URB completes with ENOENT as this
> occurs legitimately during system suspend. When the
> usbnet_resume is called, test this flag and try once to resubmit
> the interrupt URB.
I still don't think this is the best way to go.
> This version of the patch moves the urb submit directly into
> usbnet_resume. Is it okay to submit a GFP_KERNEL urb from
> usbnet_resume()?
Yes, it is.
> Signed-off-by: Paul Stewart <pstew@...omium.org>
> ---
> drivers/net/usb/usbnet.c | 13 ++++++++++++-
> include/linux/usb/usbnet.h | 1 +
> 2 files changed, 13 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c
> index 02d25c7..3651a48 100644
> --- a/drivers/net/usb/usbnet.c
> +++ b/drivers/net/usb/usbnet.c
> @@ -482,6 +482,7 @@ static void intr_complete (struct urb *urb)
> case -ESHUTDOWN: /* hardware gone */
> if (netif_msg_ifdown (dev))
> devdbg (dev, "intr shutdown, code %d", status);
> + set_bit(EVENT_INTR_HALT, &dev->flags);
Is this new flag really needed?
> return;
>
> /* NOTE: not throttling like RX/TX, since this endpoint
> @@ -1294,9 +1295,19 @@ int usbnet_resume (struct usb_interface *intf)
> {
> struct usbnet *dev = usb_get_intfdata(intf);
>
> - if (!--dev->suspend_count)
> + if (!--dev->suspend_count) {
> tasklet_schedule (&dev->bh);
>
> + /* resubmit interrupt URB if it was halted by suspend */
> + if (dev->interrupt && netif_running(dev->net) &&
> + netif_device_present(dev->net) &&
> + test_bit(EVENT_INTR_HALT, &dev->flags)) {
Why do you need the test_bit()? If the other conditions are all true,
don't you want to resubmit the interrupt URB regardless?
> + clear_bit(EVENT_INTR_HALT, &dev->flags);
> + usb_submit_urb(dev->interrupt, GFP_KERNEL);
> + }
> + }
> +}
> +
> return 0;
> }
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