public inbox for linux-media@vger.kernel.org
 help / color / mirror / Atom feed
From: Sean Young <sean@mess.org>
To: Martin Kittel <linux@martin-kittel.de>
Cc: Mauro Carvalho Chehab <m.chehab@samsung.com>,
	linux-media@vger.kernel.org, Jarod Wilson <jwilson@redhat.com>
Subject: Re: Patch mceusb: fix invalid urb interval
Date: Sun, 19 Jan 2014 21:56:48 +0000	[thread overview]
Message-ID: <20140119215648.GA15388@pequod.mess.org> (raw)
In-Reply-To: <52DC3E0B.6010202@martin-kittel.de>

On Sun, Jan 19, 2014 at 10:05:15PM +0100, Martin Kittel wrote:
> Hi Mauro, hi Sean,
> 
> On 01/15/2014 06:59 PM, Mauro Carvalho Chehab wrote:
> > Em Wed, 15 Jan 2014 16:52:45 +0000
> > Sean Young <sean@mess.org> escreveu:
> > 
> >> On Wed, Jan 15, 2014 at 01:49:17PM -0200, Mauro Carvalho Chehab wrote:
> >>> Hi Martin,
> >>>
> >>> Em Wed, 11 Dec 2013 21:34:55 +0100
> >>> Martin Kittel <linux@martin-kittel.de> escreveu:
> >>>
> >>>> Hi Mauro, hi Sean,
> >>>>
> >>>> thanks for considering the patch. I have added an updated version at the
> >>>> end of this mail.
> >>>>
> >>>> Regarding the info Sean was requesting, it is indeed an xhci hub. I also
> >>>> added the details of the remote itself.
> >>>>
> >>>> Please let me know if there is anything missing.
> >>>>
> >>>> Best wishes,
> >>>>
> >>>> Martin.
> >>>>
> >>>>
> >>>> lsusb -vvv
> >>>> ------
> >>>> Bus 001 Device 002: ID 2304:0225 Pinnacle Systems, Inc. Remote Kit
> >>>> Infrared Transceiver
> >>>> Device Descriptor:
> >>>>   bLength		 18
> >>>>   bDescriptorType	  1
> >>>>   bcdUSB	       2.00
> >>>>   bDeviceClass		  0 (Defined at Interface level)
> >>>>   bDeviceSubClass	  0
> >>>>   bDeviceProtocol	  0
> >>>>   bMaxPacketSize0	  8
> >>>>   idVendor	     0x2304 Pinnacle Systems, Inc.
> >>>>   idProduct	     0x0225 Remote Kit Infrared Transceiver
> >>>>   bcdDevice	       0.01
> >>>>   iManufacturer		  1 Pinnacle Systems
> >>>>   iProduct		  2 PCTV Remote USB
> >>>>   iSerial		  5 7FFFFFFFFFFFFFFF
> >>>>   bNumConfigurations	  1
> >>>>   Configuration Descriptor:
> >>>>     bLength		    9
> >>>>     bDescriptorType	    2
> >>>>     wTotalLength	   32
> >>>>     bNumInterfaces	    1
> >>>>     bConfigurationValue	    1
> >>>>     iConfiguration	    3 StandardConfiguration
> >>>>     bmAttributes	 0xa0
> >>>>       (Bus Powered)
> >>>>       Remote Wakeup
> >>>>     MaxPower		  100mA
> >>>>     Interface Descriptor:
> >>>>       bLength		      9
> >>>>       bDescriptorType	      4
> >>>>       bInterfaceNumber	      0
> >>>>       bAlternateSetting	      0
> >>>>       bNumEndpoints	      2
> >>>>       bInterfaceClass	    255 Vendor Specific Class
> >>>>       bInterfaceSubClass      0
> >>>>       bInterfaceProtocol      0
> >>>>       iInterface	      4 StandardInterface
> >>>>       Endpoint Descriptor:
> >>>> 	bLength			7
> >>>> 	bDescriptorType		5
> >>>> 	bEndpointAddress     0x81  EP 1 IN
> >>>> 	bmAttributes		2
> >>>> 	  Transfer Type		   Bulk
> >>>> 	  Synch Type		   None
> >>>> 	  Usage Type		   Data
> >>>> 	wMaxPacketSize	   0x0040  1x 64 bytes
> >>>> 	bInterval	       10
> >>>
> >>> Hmm... interval is equal to 10, e. g. 125us * 2^(10 - 1) = 64 ms.
> >>>
> >>> I'm wandering why mceusb is just forcing the interval to 1 (125ms). That
> >>> sounds wrong, except, of course, if the endpoint descriptor is wrong.
> >>
> >> Note that the endpoint descriptor describes it as a bulk endpoint, but
> >> it is used as a interrupt endpoint by the driver. For bulk endpoints,
> >> the interval should not be used (?).
> >>
> >> Maybe the correct solution would be to use the endpoints as bulk endpoints
> >> if that is what the endpoint says? mceusb devices come in interrupt and 
> >> bulk flavours.
> > 
> > Yes, this could be a possible fix.
> > 
> 
> I have tried this and the driver is working fine without my initial fix.
> I haven't been running with the bulk setting for long, but so far I
> haven't seen the spurious 'xhci_queue_intr_tx: <number> callbacks
> suppressed' messages like I have before.
> 
> The current version of the patch against 3.13-rc8 is below.
> 
> Please let me know if there is anything else I should check or further
> rework is needed.
> 
> Thanks for your help and best wishes,
> 
> Martin.
> 
> -----------
> 
> >From a71676dad29adef9cafb08598e693ec308ba2e95 Mon Sep 17 00:00:00 2001
> From: Martin Kittel <linux@martin-kittel.de>
> Date: Sun, 19 Jan 2014 21:24:55 +0100
> Subject: [PATCH] mceusb: use endpoint xfer mode as advertised
> 
> mceusb always sets endpoints to interrupt transfer mode no matter
> what the device itself is advertising. This causes trouble on xhci
> hubs. This patch changes the behavior to honor the device endpoint
> settings.

This patch is wrong. I get:

[   60.962727] ------------[ cut here ]------------
[   60.962729] WARNING: CPU: 0 PID: 0 at drivers/usb/core/urb.c:452 usb_submit_u
rb+0x1fd/0x5b0()
[   60.962730] usb 3-2: BOGUS urb xfer, pipe 1 != type 3

This is because the patch no longer sets the endpoints to interrupt
endpoints, but still uses the interrupt functions like
usb_fill_int_urb().

> 
> Signed-off-by: Martin Kittel <linux@martin-kittel.de>
> ---
>  drivers/media/rc/mceusb.c | 51
> ++++++++++++++++++++++++++---------------------
>  1 file changed, 28 insertions(+), 23 deletions(-)
> 
> diff --git a/drivers/media/rc/mceusb.c b/drivers/media/rc/mceusb.c
> index a25bb15..67df9a6 100644
> --- a/drivers/media/rc/mceusb.c
> +++ b/drivers/media/rc/mceusb.c
> @@ -1277,32 +1277,37 @@ static int mceusb_dev_probe(struct usb_interface
> *intf,
> 
>  		if ((ep_in == NULL)
>  			&& ((ep->bEndpointAddress & USB_ENDPOINT_DIR_MASK)
> -			    == USB_DIR_IN)
> -			&& (((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
> -			    == USB_ENDPOINT_XFER_BULK)
> -			|| ((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
> -			    == USB_ENDPOINT_XFER_INT))) {
> -
> -			ep_in = ep;
> -			ep_in->bmAttributes = USB_ENDPOINT_XFER_INT;
> -			ep_in->bInterval = 1;
> -			mce_dbg(&intf->dev, "acceptable inbound endpoint "
> -				"found\n");
> +			    == USB_DIR_IN)) {
> +			if ((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
> +			    == USB_ENDPOINT_XFER_BULK) {
> +				ep_in = ep;
> +				mce_dbg(&intf->dev, "acceptable bulk inbound endpoint "
> +					"found\n");
> +			}
> +			if ((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
> +			    == USB_ENDPOINT_XFER_INT) {
> +				ep_in = ep;
> +				ep_in->bInterval = 1;
> +				mce_dbg(&intf->dev, "acceptable interrupt inbound endpoint "
> +					"found\n");
> +			}
>  		}
> -
>  		if ((ep_out == NULL)
>  			&& ((ep->bEndpointAddress & USB_ENDPOINT_DIR_MASK)
> -			    == USB_DIR_OUT)
> -			&& (((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
> -			    == USB_ENDPOINT_XFER_BULK)
> -			|| ((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
> -			    == USB_ENDPOINT_XFER_INT))) {
> -
> -			ep_out = ep;
> -			ep_out->bmAttributes = USB_ENDPOINT_XFER_INT;
> -			ep_out->bInterval = 1;
> -			mce_dbg(&intf->dev, "acceptable outbound endpoint "
> -				"found\n");
> +			    == USB_DIR_OUT)) {
> +			if ((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
> +			    == USB_ENDPOINT_XFER_BULK) {
> +				ep_out = ep;
> +				mce_dbg(&intf->dev, "acceptable bulk outbound endpoint "
> +					"found\n");
> +			}
> +			if ((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
> +			    == USB_ENDPOINT_XFER_INT) {
> +				ep_out = ep;
> +				ep_out->bInterval = 1;
> +				mce_dbg(&intf->dev, "acceptable interrupt outbound endpoint "
> +					"found\n");
> +			}
>  		}
>  	}
>  	if (ep_in == NULL) {
> -- 
> 1.8.4.rc3
> 
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-media" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

  reply	other threads:[~2014-01-19 21:56 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-11-10 10:50 Patch mceusb: fix invalid urb interval Martin Kittel
2013-12-10 16:20 ` Mauro Carvalho Chehab
2013-12-11 13:17 ` Sean Young
2013-12-11 20:34   ` Martin Kittel
2014-01-15 15:49     ` Mauro Carvalho Chehab
2014-01-15 16:52       ` Sean Young
2014-01-15 17:59         ` Mauro Carvalho Chehab
2014-01-19 21:05           ` Martin Kittel
2014-01-19 21:56             ` Sean Young [this message]
2014-01-20 17:36               ` Jarod Wilson
2014-11-03 16:49                 ` Mauro Carvalho Chehab
2014-11-04 21:25                   ` Sean Young
2014-11-04 22:39                     ` Mauro Carvalho Chehab
2014-01-16  2:55         ` Jarod Wilson
2014-01-20 21:29           ` Sean Young

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=20140119215648.GA15388@pequod.mess.org \
    --to=sean@mess.org \
    --cc=jwilson@redhat.com \
    --cc=linux-media@vger.kernel.org \
    --cc=linux@martin-kittel.de \
    --cc=m.chehab@samsung.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox