On Thu, 25 Mar 2004, Colin Leroy wrote:

> > > usb 3-1: new full speed USB device using address 3
> > > Oops: kernel access of bad area, sig: 11 [#1]
> > For info: reverting this change fixes it. Didn't find out why, yet.
> >
> >
> http://linux.bkbits.net:8080/linux-2.5/diffs/drivers/usb/class/[EMAIL 
> PROTECTED]|src/|src/drivers|src/drivers/usb|src/drivers/usb/class|hist/drivers/usb/class/cdc-acm.c
> 
> Maybe that's due to this change in drivers/usb/core/message.c:
> @@ -1056,8 +1055,20 @@
>   /* re-init hc/hcd interface/endpoint state */
>   for (i = 0; i < config->desc.bNumInterfaces; i++) {
>    struct usb_interface *intf = config->interface[i];
> +  struct usb_host_interface *alt;
> +
> +  alt = usb_altnum_to_altsetting(intf, 0);
> +
> +  /* No altsetting 0?  We'll assume the first altsetting.
> +   * We could use a GetInterface call, but if a device is
> +   * so non-compliant that it doesn't have altsetting 0
> +   * then I wouldn't trust its reply anyway.
> +   */
> +  if (!alt)
> +   alt = &intf->altsetting[0];
> 
> -  intf->act_altsetting = 0;
> +  intf->cur_altsetting = alt;
> +  intf->act_altsetting = alt - intf->altsetting;
>    usb_enable_interface(dev, intf);
>   }
>   return 0;
> If I understand it well, this changes the previous default behaviour;
> intf->cur_altsetting will be intf->altsetting[0], like before, only if
> there's no intf->altsetting[i].desc.bAlternateSetting == 0.

That's right.  However, the oops you saw shouldn't happen so long as
intf->cur_altsetting points to something valid.  I got the impression that
in the cdc-acm probe routine maybe it was a null pointer.  Can you insert
a statement in the cdc-acm probe function to print out the values of ifcom
and ifdata, to check that they aren't NULL?  While you're at it also try
printing out the value of ifcom->desc.bNumEndpoints; if that is 0 it will
cause an oops.

> I'm not sure the change in cdc-acm (which no longer uses index 0
> altsetting) is correct. Or is this another bug in my phone (motorola C350)
> which should be handled differently than other cdc-acm devices ?

It's hard to say without more information.  The contents of 
/proc/bus/usb/devices or the output of lsusb with the phone plugged in 
would help.

Alan Stern



-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to