linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Re: [PATCH] net: usb: qmi_wwan: Fix for packets being rejected in the ring buffer used by the xHCI controller.
       [not found] <CA+4pmEueEiz0Act8X6t4y3+4LOaOh_-ZfzScH0CbOKT99x91NA@mail.gmail.com>
@ 2020-03-08 15:26 ` Bjørn Mork
  2020-03-08 19:07   ` Daniele Palmas
  0 siblings, 1 reply; 6+ messages in thread
From: Bjørn Mork @ 2020-03-08 15:26 UTC (permalink / raw)
  To: Paul Gildea; +Cc: davem, netdev, linux-kernel

Paul Gildea <paul.gildea@gmail.com> writes:

> When MTU of modem is set to less than 1500 and a packet larger than MTU
> arrives in Linux from a modem, it is discarded with -EOVERFLOW error
> (Babble error). This is seen on USB3.0 and USB2.0 busses. This is
> essentially because the MRU (Max Receive Size) is not a separate entity to
> the MTU (Max Transmit Size) and the received packets can be larger than
> those transmitted. Following the babble error there were an endless supply
> of zero-length URBs which are rejected with -EPROTO (increasing the rx
> input error counter each time). This is only seen on USB3.0. These continue
> to come ad infinitum until the modem is shutdown, rendering the modem
> unusable. There is a bug in the core USB handling code in Linux that
> doesn't deal well with network MTUs smaller than 1500 bytes. By default the
> dev->hard_mtu (the "real" MTU) is in lockstep with dev->rx_urb_size
> (essentially an MRU), and it's the latter that is causing trouble. This has
> nothing to do with the modems; the issue can be reproduced by getting a
> USB-Ethernet dongle, setting the MTU to 1430, and pinging with size greater
> than 1406.
>
> Signed-off-by: Paul Gildea <Paul.Gildea@gmail.com>
> ---
> drivers/net/usb/qmi_wwan.c | 7 +++++++
>  1 file changed, 7 insertions(+)
>
> diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
> index 5754bb6..545c772 100644
> --- a/drivers/net/usb/qmi_wwan.c
> +++ b/drivers/net/usb/qmi_wwan.c
> @@ -815,6 +815,13 @@ static int qmi_wwan_bind(struct usbnet *dev, struct
> usb_interface *intf)
>     }
>     dev->net->netdev_ops = &qmi_wwan_netdev_ops;
>     dev->net->sysfs_groups[0] = &qmi_wwan_sysfs_attr_group;
> +    /* LTE Networks don't always respect their own MTU on receive side;
> +    * e.g. AT&T pushes 1430 MTU but still allows 1500 byte packets from
> +    * far-end network. Make receive buffer large enough to accommodate
> +    * them, and add four bytes so MTU does not equal MRU on network
> +    * with 1500 MTU otherwise usbnet_change_mtu() will change both.
> +    */
> +   dev->rx_urb_size = ETH_DATA_LEN + 4;
>  err:
>     return status;
>  }
> --
> 1.9.1


This is fine as a first step towards saner buffer handling in qmi_wwan.
If real world devices use asymmetric MTUs, then we should just deal with
that.

So I was going to add my ack.  But the patch does not apply:


 bjorn@miraculix:/usr/local/src/git/linux$ git am /tmp/l
 Applying: net: usb: qmi_wwan: Fix for packets being rejected in the ring buffer used by the xHCI controller.
 error: corrupt patch at line 10

and checkpatch says why:

 bjorn@miraculix:/usr/local/src/git/linux$ scripts/checkpatch.pl /tmp/l
 ERROR: patch seems to be corrupt (line wrapped?)
 #34: FILE: drivers/net/usb/qmi_wwan.c:814:
 usb_interface *intf)


Could you fix up and resend? You might have to use a different email
client.  See
https://www.kernel.org/doc/html/latest/process/email-clients.html#email-clients


Bjørn

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

* Re: [PATCH] net: usb: qmi_wwan: Fix for packets being rejected in the ring buffer used by the xHCI controller.
  2020-03-08 15:26 ` [PATCH] net: usb: qmi_wwan: Fix for packets being rejected in the ring buffer used by the xHCI controller Bjørn Mork
@ 2020-03-08 19:07   ` Daniele Palmas
  2020-09-07  7:25     ` Kristian Evensen
  0 siblings, 1 reply; 6+ messages in thread
From: Daniele Palmas @ 2020-03-08 19:07 UTC (permalink / raw)
  To: Bjørn Mork; +Cc: Paul Gildea, davem, netdev, linux-kernel

Hi Bjørn and Paul,

Il giorno dom 8 mar 2020 alle ore 16:28 Bjørn Mork <bjorn@mork.no> ha scritto:
>
> Paul Gildea <paul.gildea@gmail.com> writes:
>
> > When MTU of modem is set to less than 1500 and a packet larger than MTU
> > arrives in Linux from a modem, it is discarded with -EOVERFLOW error
> > (Babble error). This is seen on USB3.0 and USB2.0 busses. This is
> > essentially because the MRU (Max Receive Size) is not a separate entity to
> > the MTU (Max Transmit Size) and the received packets can be larger than
> > those transmitted. Following the babble error there were an endless supply
> > of zero-length URBs which are rejected with -EPROTO (increasing the rx
> > input error counter each time). This is only seen on USB3.0. These continue
> > to come ad infinitum until the modem is shutdown, rendering the modem
> > unusable. There is a bug in the core USB handling code in Linux that
> > doesn't deal well with network MTUs smaller than 1500 bytes. By default the
> > dev->hard_mtu (the "real" MTU) is in lockstep with dev->rx_urb_size
> > (essentially an MRU), and it's the latter that is causing trouble. This has
> > nothing to do with the modems; the issue can be reproduced by getting a
> > USB-Ethernet dongle, setting the MTU to 1430, and pinging with size greater
> > than 1406.
> >
> > Signed-off-by: Paul Gildea <Paul.Gildea@gmail.com>
> > ---
> > drivers/net/usb/qmi_wwan.c | 7 +++++++
> >  1 file changed, 7 insertions(+)
> >
> > diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
> > index 5754bb6..545c772 100644
> > --- a/drivers/net/usb/qmi_wwan.c
> > +++ b/drivers/net/usb/qmi_wwan.c
> > @@ -815,6 +815,13 @@ static int qmi_wwan_bind(struct usbnet *dev, struct
> > usb_interface *intf)
> >     }
> >     dev->net->netdev_ops = &qmi_wwan_netdev_ops;
> >     dev->net->sysfs_groups[0] = &qmi_wwan_sysfs_attr_group;
> > +    /* LTE Networks don't always respect their own MTU on receive side;
> > +    * e.g. AT&T pushes 1430 MTU but still allows 1500 byte packets from
> > +    * far-end network. Make receive buffer large enough to accommodate
> > +    * them, and add four bytes so MTU does not equal MRU on network
> > +    * with 1500 MTU otherwise usbnet_change_mtu() will change both.
> > +    */
> > +   dev->rx_urb_size = ETH_DATA_LEN + 4;

Isn't this going to break the change MTU workaround for dl data
aggregation when using qmap?

Regards,
Daniele

> >  err:
> >     return status;
> >  }
> > --
> > 1.9.1
>
>
> This is fine as a first step towards saner buffer handling in qmi_wwan.
> If real world devices use asymmetric MTUs, then we should just deal with
> that.
>
> So I was going to add my ack.  But the patch does not apply:
>
>
>  bjorn@miraculix:/usr/local/src/git/linux$ git am /tmp/l
>  Applying: net: usb: qmi_wwan: Fix for packets being rejected in the ring buffer used by the xHCI controller.
>  error: corrupt patch at line 10
>
> and checkpatch says why:
>
>  bjorn@miraculix:/usr/local/src/git/linux$ scripts/checkpatch.pl /tmp/l
>  ERROR: patch seems to be corrupt (line wrapped?)
>  #34: FILE: drivers/net/usb/qmi_wwan.c:814:
>  usb_interface *intf)
>
>
> Could you fix up and resend? You might have to use a different email
> client.  See
> https://www.kernel.org/doc/html/latest/process/email-clients.html#email-clients
>
>
> Bjørn

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

* Re: [PATCH] net: usb: qmi_wwan: Fix for packets being rejected in the ring buffer used by the xHCI controller.
  2020-03-08 19:07   ` Daniele Palmas
@ 2020-09-07  7:25     ` Kristian Evensen
  2020-09-07  7:45       ` Bjørn Mork
  0 siblings, 1 reply; 6+ messages in thread
From: Kristian Evensen @ 2020-09-07  7:25 UTC (permalink / raw)
  To: Daniele Palmas; +Cc: Bjørn Mork, Paul Gildea, davem, netdev, linux-kernel

Hi all,

I was able to trigger the same issue as reported by Paul, and came
across this patch (+ Daniele's other patch and thread on the libqmi
mailing list). Applying Paul's fix solved the problem for me, changing
the MTU of the QMI interface now works fine. Thanks a lot to everyone
involved!

I just have one question, is there a specific reason for the patch not
being resubmitted or Daniele's work not resumed? I do not use any of
the aggregation-stuff, so I don't know how that is affected by for
example Paul's change. If there is anything I can do to help, please
let me know.

BR,
Kristian

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

* Re: [PATCH] net: usb: qmi_wwan: Fix for packets being rejected in the ring buffer used by the xHCI controller.
  2020-09-07  7:25     ` Kristian Evensen
@ 2020-09-07  7:45       ` Bjørn Mork
  2020-09-07  8:35         ` Daniele Palmas
  0 siblings, 1 reply; 6+ messages in thread
From: Bjørn Mork @ 2020-09-07  7:45 UTC (permalink / raw)
  To: Kristian Evensen; +Cc: Daniele Palmas, Paul Gildea, davem, netdev, linux-kernel

Kristian Evensen <kristian.evensen@gmail.com> writes:

> Hi all,
>
> I was able to trigger the same issue as reported by Paul, and came
> across this patch (+ Daniele's other patch and thread on the libqmi
> mailing list). Applying Paul's fix solved the problem for me, changing
> the MTU of the QMI interface now works fine. Thanks a lot to everyone
> involved!
>
> I just have one question, is there a specific reason for the patch not
> being resubmitted or Daniele's work not resumed? I do not use any of
> the aggregation-stuff, so I don't know how that is affected by for
> example Paul's change. If there is anything I can do to help, please
> let me know.

Thanks for bringing this back into our collective memory.  The patch
never made it to patchwork, probably due to the formatting issues, and
was just forgotten.

There are no other reasons than Daniele's concerns in the email you are
replying to, AFAIK.  The issue pointed out by Paull should be fixed, but
the fix must not break aggregation..

This is a great opportunity for you to play with QMAP aggregation :-)
Wouldn't it be good to do some measurements to document why it is such a
bad idea?


Bjørn


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

* Re: [PATCH] net: usb: qmi_wwan: Fix for packets being rejected in the ring buffer used by the xHCI controller.
  2020-09-07  7:45       ` Bjørn Mork
@ 2020-09-07  8:35         ` Daniele Palmas
  2020-09-07  8:49           ` Kristian Evensen
  0 siblings, 1 reply; 6+ messages in thread
From: Daniele Palmas @ 2020-09-07  8:35 UTC (permalink / raw)
  To: Bjørn Mork
  Cc: Kristian Evensen, Paul Gildea, davem, netdev, linux-kernel

Hi Kristian and Bjørn,

Il giorno lun 7 set 2020 alle ore 09:45 Bjørn Mork <bjorn@mork.no> ha scritto:
>
> Kristian Evensen <kristian.evensen@gmail.com> writes:
>
> > Hi all,
> >
> > I was able to trigger the same issue as reported by Paul, and came
> > across this patch (+ Daniele's other patch and thread on the libqmi
> > mailing list). Applying Paul's fix solved the problem for me, changing
> > the MTU of the QMI interface now works fine. Thanks a lot to everyone
> > involved!
> >
> > I just have one question, is there a specific reason for the patch not
> > being resubmitted or Daniele's work not resumed? I do not use any of
> > the aggregation-stuff, so I don't know how that is affected by for
> > example Paul's change. If there is anything I can do to help, please
> > let me know.
>
> Thanks for bringing this back into our collective memory.  The patch
> never made it to patchwork, probably due to the formatting issues, and
> was just forgotten.
>
> There are no other reasons than Daniele's concerns in the email you are
> replying to, AFAIK.  The issue pointed out by Paull should be fixed, but
> the fix must not break aggregation..
>
> This is a great opportunity for you to play with QMAP aggregation :-)
> Wouldn't it be good to do some measurements to document why it is such a
> bad idea?
>

there was also another recent thread about this and the final plan was
to simply increase the rx urb size setting to the highest value we are
aware of (see https://www.spinics.net/lists/linux-usb/msg198858.html):
this should solve the babble issue without breaking aggregation.

The change should be simple, I was just waiting to perform some sanity
tests with different models I have. Hope to have it done by this week.

Regards,
Daniele

>
> Bjørn
>

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

* Re: [PATCH] net: usb: qmi_wwan: Fix for packets being rejected in the ring buffer used by the xHCI controller.
  2020-09-07  8:35         ` Daniele Palmas
@ 2020-09-07  8:49           ` Kristian Evensen
  0 siblings, 0 replies; 6+ messages in thread
From: Kristian Evensen @ 2020-09-07  8:49 UTC (permalink / raw)
  To: Daniele Palmas; +Cc: Bjørn Mork, Paul Gildea, davem, netdev, linux-kernel

Hi Daniele,

On Mon, Sep 7, 2020 at 10:35 AM Daniele Palmas <dnlplm@gmail.com> wrote:
> there was also another recent thread about this and the final plan was
> to simply increase the rx urb size setting to the highest value we are
> aware of (see https://www.spinics.net/lists/linux-usb/msg198858.html):
> this should solve the babble issue without breaking aggregation.
>
> The change should be simple, I was just waiting to perform some sanity
> tests with different models I have. Hope to have it done by this week.

Thanks for letting me know. Looking forward to the patch and dropping
my own work-around :)

Kristian

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

end of thread, other threads:[~2020-09-07  8:49 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <CA+4pmEueEiz0Act8X6t4y3+4LOaOh_-ZfzScH0CbOKT99x91NA@mail.gmail.com>
2020-03-08 15:26 ` [PATCH] net: usb: qmi_wwan: Fix for packets being rejected in the ring buffer used by the xHCI controller Bjørn Mork
2020-03-08 19:07   ` Daniele Palmas
2020-09-07  7:25     ` Kristian Evensen
2020-09-07  7:45       ` Bjørn Mork
2020-09-07  8:35         ` Daniele Palmas
2020-09-07  8:49           ` Kristian Evensen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).