All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alex Courbot <acourbot@nvidia.com>
To: "Bjørn Mork" <bjorn@mork.no>
Cc: USB list <linux-usb@vger.kernel.org>,
	"linux-pm@vger.kernel.org" <linux-pm@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	Alexandre Courbot <gnurou@gmail.com>
Subject: Re: usb_wwan_write() called while device still being resumed
Date: Fri, 15 Feb 2013 17:23:59 +0900	[thread overview]
Message-ID: <511DF09F.3070401@nvidia.com> (raw)
In-Reply-To: <87ehgivlmg.fsf@nemi.mork.no>

Hi Bjørn, thanks for the reply!

On 02/15/2013 02:41 AM, Bjørn Mork wrote:
> I believe the usb_autopm_get_interface_async() failing is OK in this
> case, but that should not cause the modem to stop working.
>
> Wonder if this patch solves the problem? :
>
> From: =?UTF-8?q?Bj=C3=B8rn=20Mork?= <bjorn@mork.no>
> Date: Thu, 14 Feb 2013 18:34:48 +0100
> Subject: [PATCH] USB: usb_wwan: clear port busy state on error
> MIME-Version: 1.0
> Content-Type: text/plain; charset=UTF-8
> Content-Transfer-Encoding: 8bit
>
> Reported-by: Alex Courbot <acourbot@nvidia.com>
> Signed-off-by: Bjørn Mork <bjorn@mork.no>
> ---
>   drivers/usb/serial/usb_wwan.c |    4 +++-
>   1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/usb/serial/usb_wwan.c b/drivers/usb/serial/usb_wwan.c
> index 01c94aa..44e106d 100644
> --- a/drivers/usb/serial/usb_wwan.c
> +++ b/drivers/usb/serial/usb_wwan.c
> @@ -230,8 +230,10 @@ int usb_wwan_write(struct tty_struct *tty, struct usb_serial_port *port,
>   			usb_pipeendpoint(this_urb->pipe), i);
>
>   		err = usb_autopm_get_interface_async(port->serial->interface);
> -		if (err < 0)
> +		if (err < 0) {
> +			clear_bit(i, &portdata->out_busy);
>   			break;
> +		}
>
>   		/* send the data */
>   		memcpy(this_urb->transfer_buffer, buf, todo);
>

Unfortunately it does not, and fails the same way. On the other hand, I 
do not see the issue when doing the following:

diff --git a/drivers/usb/serial/usb_wwan.c b/drivers/usb/serial/usb_wwan.c
index e4fad5e..1490029 100644
--- a/drivers/usb/serial/usb_wwan.c
+++ b/drivers/usb/serial/usb_wwan.c
@@ -238,8 +238,6 @@ int usb_wwan_write(struct tty_struct *tty, struct 
usb_serial_port *port,
                     usb_pipeendpoint(this_urb->pipe), i);

                 err = 
usb_autopm_get_interface_async(port->serial->interface);
-               if (err < 0)
-                       break;

                 /* send the data */
                 memcpy(this_urb->transfer_buffer, buf, todo);

After doing this I don't see this issue anymore. It looks wrong though. 
But it seems to work despite the obvious unbalance in autopm calls that 
results.

If I understand you correctly, usb_wwan_write() failing here is not a 
problem in itself, and the ack should just be sent again later?

 > that should not cause the modem to stop working.

Actually it might also be that the network stack ends up in a bad state 
and remains stuck in it. I don't think the modem by itself is affected. 
All I observe is that no network traffic takes place after this. I'm not 
familiar enough with networking to make any stronger assumption.

FWIW, when usb_autopm_get_interface_async() returns -EACCES, the power 
parameters of port->serial->interface->dev are as follows:

disable_depth = 1
is_suspended = 1
runtime_status = 2 (RPM_SUSPENDED)

Thanks,
Alex.


  reply	other threads:[~2013-02-15  8:24 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-02-14 10:31 usb_wwan_write() called while device still being resumed Alex Courbot
2013-02-14 17:41 ` Bjørn Mork
2013-02-14 17:41   ` Bjørn Mork
2013-02-15  8:23   ` Alex Courbot [this message]
     [not found]     ` <511DF09F.3070401-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-02-15 11:05       ` Bjørn Mork
2013-02-15 11:05         ` Bjørn Mork
2013-02-17 11:31         ` Alex Courbot
2013-02-18  3:20         ` Alex Courbot

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=511DF09F.3070401@nvidia.com \
    --to=acourbot@nvidia.com \
    --cc=bjorn@mork.no \
    --cc=gnurou@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.