David Brownell wrote:
> I think I see what's going on.  Since requests passed into
> usb_ep_queue() must have a completion handler, I thought your
> original code -- testing for a null handler -- was wrong.
>
> But I didn't notice that your internal GET_STATUS request
> didn't have a completion handler.  Good thing I didn't add
> a test for non-null completion in  m66592_queue()!
>
> A better fix would be to supply a NOP completion handler
> for that internal request.  That way there would be less risk
> of code working on m66592-udc which would not work with other
> controllers.

Thank you very much for your comment.

I thought that I should have written down such a comment
when I submitted it first.

> When looking at this, I observed a glitch in the locking
> I added ... I'm assuming you still didn't run with locking
> checks enabled, or you would have seen that issue.
>
> Does the following patch behave, with all the locking test
> options in the kernel debug menu enabled?

I applied this patch and I tested on following kernel debug
menu enabled.
 - CONFIG_DEBUG_MUTEXES
 - CONFIG_DEBUG_SPINLOCK
 - CONFIG_DEBUG_LOCK_ALLOC
 - CONFIG_DEBUG_SPINLOCK_SLEEP
 - CONFIG_PROVE_LOCKING
When I tested CONFIG_DEBUG_LOCKDEP enabled, A kernel did not
boot at all in my development environment...

When I tested "usbtest", there was the problem that
NULL pointer access in get_status().
I made the following patch.

Thanks,
Y.Shimoda



====== CUT HERE
Fix the problem that accesses NULL pointer in get_status().

Signed-off-by: Yoshihiro Shimoda <[EMAIL PROTECTED]>
---
 drivers/usb/gadget/m66592-udc.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- linux-2.6.org/drivers/usb/gadget/m66592-udc.c       2007-07-14 
19:58:31.000000000 +0900
+++ linux-2.6/drivers/usb/gadget/m66592-udc.c   2007-07-14 20:01:03.000000000 
+0900
@@ -946,9 +946,9 @@ __acquires(m66592->lock)
        *m66592->ep0_buf = status;
        m66592->ep0_req->buf = m66592->ep0_buf;
        m66592->ep0_req->length = 2;
-       spin_unlock(&ep->m66592->lock);
+       spin_unlock(&m66592->lock);
        m66592_queue(m66592->gadget.ep0, m66592->ep0_req, GFP_KERNEL);
-       spin_lock(&ep->m66592->lock);
+       spin_lock(&m66592->lock);
 }

 static void clear_feature(struct m66592 *m66592, struct usb_ctrlrequest *ctrl)


-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
linux-usb-devel@lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to