Hi Linus,

Could you please apply this patch. It is against 2.3.99-pre3-8

Thanks,

greg k-h
(temporary Linux USB maintainer)


----- Forwarded message from Aki M Laukkanen <[EMAIL PROTECTED]> -----

Date: Thu, 23 Mar 2000 11:51:58 +0200 (EET)
To: "Gregory P. Smith" <[EMAIL PROTECTED]>
cc: David Brownell <[EMAIL PROTECTED]>, Bob Cutler <[EMAIL PROTECTED]>,
        [EMAIL PROTECTED]
Subject: Re: [linux-usb] OHCI crash

On Wed, 22 Mar 2000, Gregory P. Smith wrote:
> Would it make sense to hypothesize [without looking at the code] that
> Roman's driver may be forgetting a virt_to_bus call somewhere when filling
> in an address for an ED or TD?  Some controllers may magically not barf

[DISCLAIMER] I'd call myself beginner with regards to USB and
OHCI. Ok, I glanced through the OHCI documents just now. :)

I tried to search for all the accesses to (td|ed)->hw[a-zA-Z]+ and
couldn't find a missing virt_to_bus or bus_to_virt for that matter.

However even if this is a non-issue I'd like to get an explanation to
this. sohci_submit_urb calls td_submit_urb:

        td_submit_urb (urb);

which if I understood signals that HC is free to do its stuff by writing
appropriate bits in the cmdStatus register. Then however there is this
code

        if (ed->state != ED_OPER) 
                ep_link (ohci, ed);

seems to mess with the eds and tds which I thought was a big no-no when HC
is working?

I am at work so can't test this but how about if we switch these two
statements: 
diff -Naur -X dontdiff linux-2.3.99-pre3-8/drivers/usb/usb-ohci.c 
linux-2.3.99-pre3-8-greg/drivers/usb/usb-ohci.c
--- linux-2.3.99-pre3-8/drivers/usb/usb-ohci.c  Thu Mar 23 14:22:09 2000
+++ linux-2.3.99-pre3-8-greg/drivers/usb/usb-ohci.c     Thu Mar 23 14:50:31 2000
@@ -339,10 +339,11 @@
                                                                (le16_to_cpu 
(ohci->hcca.frame_no) + 10)) & 0xffff;
        }       
        
-       td_submit_urb (urb); /* fill the TDs and link it to the ed */
-                                               
        if (ed->state != ED_OPER)  /* link the ed into a chain if is not already */
                ep_link (ohci, ed);
+       
+       td_submit_urb (urb); /* fill the TDs and link it to the ed */
+
        spin_unlock_irqrestore (&usb_ed_lock, flags);
        
        urb->status = USB_ST_URB_PENDING; 

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to