diff mbox series

mt76: handle protocol error to proper deinit rx_tasklet

Message ID 20181123213724.14018-1-eduardoabinader@gmail.com (mailing list archive)
State Changes Requested
Delegated to: Kalle Valo
Headers show
Series mt76: handle protocol error to proper deinit rx_tasklet | expand

Commit Message

Eduardo Abinader Nov. 23, 2018, 9:37 p.m. UTC
During removal of usb dongle, noticed many unhandled rx urb
below. This this patch, make it possible and early completion
of the rx tasklet.

mt76x2u 1-3.4.3.1.2:1.0: rx urb failed: -71
mt76x2u 1-3.4.3.1.2:1.0: rx urb failed: -71
mt76x2u 1-3.4.3.1.2:1.0: rx urb failed: -71
mt76x2u 1-3.4.3.1.2:1.0: rx urb failed: -71
...

Signed-off-by: Eduardo Abinader <eduardoabinader@gmail.com>
---
 drivers/net/wireless/mediatek/mt76/usb.c | 1 +
 1 file changed, 1 insertion(+)

Comments

Lorenzo Bianconi Nov. 24, 2018, 9:25 a.m. UTC | #1
> During removal of usb dongle, noticed many unhandled rx urb
> below. This this patch, make it possible and early completion
> of the rx tasklet.
>
> mt76x2u 1-3.4.3.1.2:1.0: rx urb failed: -71
> mt76x2u 1-3.4.3.1.2:1.0: rx urb failed: -71
> mt76x2u 1-3.4.3.1.2:1.0: rx urb failed: -71
> mt76x2u 1-3.4.3.1.2:1.0: rx urb failed: -71
> ...

Hi Eduardo,

I think EPROTO is a more general error (it is not strictly related to
device removal)
and it could happen even during normal operation. In this case I guess we should
reinsert the urb to usb-core.

Regards,
Lorenzo

>
> Signed-off-by: Eduardo Abinader <eduardoabinader@gmail.com>
> ---
>  drivers/net/wireless/mediatek/mt76/usb.c | 1 +
>  1 file changed, 1 insertion(+)
>
> diff --git a/drivers/net/wireless/mediatek/mt76/usb.c b/drivers/net/wireless/mediatek/mt76/usb.c
> index 5f0faf07c346..dc33df9cd155 100644
> --- a/drivers/net/wireless/mediatek/mt76/usb.c
> +++ b/drivers/net/wireless/mediatek/mt76/usb.c
> @@ -446,6 +446,7 @@ static void mt76u_complete_rx(struct urb *urb)
>         case -ECONNRESET:
>         case -ESHUTDOWN:
>         case -ENOENT:
> +       case -EPROTO:
>                 return;
>         default:
>                 dev_err(dev->dev, "rx urb failed: %d\n", urb->status);
> --
> 2.19.1
>
Stanislaw Gruszka Nov. 26, 2018, 9:59 a.m. UTC | #2
On Sat, Nov 24, 2018 at 10:25:52AM +0100, Lorenzo Bianconi wrote:
> > During removal of usb dongle, noticed many unhandled rx urb
> > below. This this patch, make it possible and early completion
> > of the rx tasklet.
> >
> > mt76x2u 1-3.4.3.1.2:1.0: rx urb failed: -71
> > mt76x2u 1-3.4.3.1.2:1.0: rx urb failed: -71
> > mt76x2u 1-3.4.3.1.2:1.0: rx urb failed: -71
> > mt76x2u 1-3.4.3.1.2:1.0: rx urb failed: -71

If problem here is just printing errors, I think we are ok. If problem
is some hung or infinity loop, it should be fixed.

> Hi Eduardo,
> 
> I think EPROTO is a more general error (it is not strictly related to
> device removal)
> and it could happen even during normal operation. In this case I guess we should
> reinsert the urb to usb-core.

Some (out of tree) usb host drivers returns EPROTO all the time
in some error conditions. On rt2x00 resubmitting urb resulted in
infinity loop:
https://marc.info/?t=153375128700002&r=1&w=2

Fix I proposed for that was counting EPROTO errors and 
mark device as removed if 10 of them happened in row:
https://marc.info/?l=linux-wireless&m=153441755529960&w=2

Thanks
Stanislaw
Eduardo Abinader Nov. 26, 2018, 9:15 p.m. UTC | #3
On Mon, 26 Nov 2018 at 10:59, Stanislaw Gruszka <sgruszka@redhat.com> wrote:
>
> On Sat, Nov 24, 2018 at 10:25:52AM +0100, Lorenzo Bianconi wrote:
> > > During removal of usb dongle, noticed many unhandled rx urb
> > > below. This this patch, make it possible and early completion
> > > of the rx tasklet.
> > >
> > > mt76x2u 1-3.4.3.1.2:1.0: rx urb failed: -71
> > > mt76x2u 1-3.4.3.1.2:1.0: rx urb failed: -71
> > > mt76x2u 1-3.4.3.1.2:1.0: rx urb failed: -71
> > > mt76x2u 1-3.4.3.1.2:1.0: rx urb failed: -71
>
> If problem here is just printing errors, I think we are ok. If problem
> is some hung or infinity loop, it should be fixed.
>
> > Hi Eduardo,
> >
> > I think EPROTO is a more general error (it is not strictly related to
> > device removal)
> > and it could happen even during normal operation. In this case I guess we should
> > reinsert the urb to usb-core.
>
> Some (out of tree) usb host drivers returns EPROTO all the time
> in some error conditions. On rt2x00 resubmitting urb resulted in
> infinity loop:
> https://marc.info/?t=153375128700002&r=1&w=2
>
> Fix I proposed for that was counting EPROTO errors and
> mark device as removed if 10 of them happened in row:
> https://marc.info/?l=linux-wireless&m=153441755529960&w=2

Thanks for the feedback, guys.

Would it be ok for you if I respin the patch with the suggested
approach by Stanislaw?

Regards,
Eduardo
>
> Thanks
> Stanislaw
Lorenzo Bianconi Nov. 26, 2018, 9:31 p.m. UTC | #4
> > > > During removal of usb dongle, noticed many unhandled rx urb
> > > > below. This this patch, make it possible and early completion
> > > > of the rx tasklet.

[...]

> > > Hi Eduardo,
> > >
> > > I think EPROTO is a more general error (it is not strictly related to
> > > device removal)
> > > and it could happen even during normal operation. In this case I guess we should
> > > reinsert the urb to usb-core.
> >
> > Some (out of tree) usb host drivers returns EPROTO all the time
> > in some error conditions. On rt2x00 resubmitting urb resulted in
> > infinity loop:
> > https://marc.info/?t=153375128700002&r=1&w=2
> >
> > Fix I proposed for that was counting EPROTO errors and
> > mark device as removed if 10 of them happened in row:
> > https://marc.info/?l=linux-wireless&m=153441755529960&w=2
>
> Thanks for the feedback, guys.
>
> Would it be ok for you if I respin the patch with the suggested
> approach by Stanislaw?

Hi Eduardo,

AFAIU the -EPROTO error is reported only during device removal or just
sporadically
(you have never experienced any infinity loop). Is it correct?
If so I guess we do not need to develop any intrusive workaround since
it is just an annoying log message

Regards,
Lorenzo

>
> Regards,
> Eduardo
> >
> > Thanks
> > Stanislaw
Eduardo Abinader Nov. 26, 2018, 9:37 p.m. UTC | #5
On Mon, 26 Nov 2018 at 22:31, Lorenzo Bianconi
<lorenzo.bianconi@redhat.com> wrote:
>
> > > > > During removal of usb dongle, noticed many unhandled rx urb
> > > > > below. This this patch, make it possible and early completion
> > > > > of the rx tasklet.
>
> [...]
>
> > > > Hi Eduardo,
> > > >
> > > > I think EPROTO is a more general error (it is not strictly related to
> > > > device removal)
> > > > and it could happen even during normal operation. In this case I guess we should
> > > > reinsert the urb to usb-core.
> > >
> > > Some (out of tree) usb host drivers returns EPROTO all the time
> > > in some error conditions. On rt2x00 resubmitting urb resulted in
> > > infinity loop:
> > > https://marc.info/?t=153375128700002&r=1&w=2
> > >
> > > Fix I proposed for that was counting EPROTO errors and
> > > mark device as removed if 10 of them happened in row:
> > > https://marc.info/?l=linux-wireless&m=153441755529960&w=2
> >
> > Thanks for the feedback, guys.
> >
> > Would it be ok for you if I respin the patch with the suggested
> > approach by Stanislaw?
>
> Hi Eduardo,
>
> AFAIU the -EPROTO error is reported only during device removal or just
> sporadically
> (you have never experienced any infinity loop). Is it correct?
> If so I guess we do not need to develop any intrusive workaround since
> it is just an annoying log message
>

It is reported only during device removal as I've been seen with my
comfast dongle.
The device removal does not lead to an infinity loop, but there's a
bouncing around 100 urb failed msgs...

Thanks,
Eduardo

> Regards,
> Lorenzo
>
> >
> > Regards,
> > Eduardo
> > >
> > > Thanks
> > > Stanislaw
Lorenzo Bianconi Nov. 26, 2018, 9:58 p.m. UTC | #6
> On Mon, 26 Nov 2018 at 22:31, Lorenzo Bianconi
> <lorenzo.bianconi@redhat.com> wrote:

[...]

> > Hi Eduardo,
> >
> > AFAIU the -EPROTO error is reported only during device removal or just
> > sporadically
> > (you have never experienced any infinity loop). Is it correct?
> > If so I guess we do not need to develop any intrusive workaround since
> > it is just an annoying log message
> >
>
> It is reported only during device removal as I've been seen with my
> comfast dongle.
> The device removal does not lead to an infinity loop, but there's a
> bouncing around 100 urb failed msgs...
>

Thx for the clarification Eduardo. So is it better to mute all -EPROTO errors
or tolerate these annoying messages during dongle removal? I would prefer the
second choice since would be useful to know if the controller reports
that kind of errors.

Regards,
Lorenzo
> Thanks,
> Eduardo
>
> > Regards,
> > Lorenzo
> >
> > >
> > > Regards,
> > > Eduardo
> > > >
> > > > Thanks
> > > > Stanislaw
diff mbox series

Patch

diff --git a/drivers/net/wireless/mediatek/mt76/usb.c b/drivers/net/wireless/mediatek/mt76/usb.c
index 5f0faf07c346..dc33df9cd155 100644
--- a/drivers/net/wireless/mediatek/mt76/usb.c
+++ b/drivers/net/wireless/mediatek/mt76/usb.c
@@ -446,6 +446,7 @@  static void mt76u_complete_rx(struct urb *urb)
 	case -ECONNRESET:
 	case -ESHUTDOWN:
 	case -ENOENT:
+	case -EPROTO:
 		return;
 	default:
 		dev_err(dev->dev, "rx urb failed: %d\n", urb->status);