On Fri, 14 Oct 2005, Nitin Mahajan wrote:

> The reason for this I have found out as follows.
> When we call 
> usb_buffer_free (udev, sizeof (struct
> usb_ctrlrequest),
>                     urb [i]->setup_packet,
>                     urb [i]->setup_dma);
> in function test_ctrl_queue in usbtest.c, the value of
> urb[i]->setup_dma is different from the correspoding
> value when this dma buffer was allocated.
> This value has got changed due to call to
> dma_map_single, but a correspoding dma_unmap_single
> has not happened when we are attempting to free. Thus
> the error message from dma_pool_free.
> Could anyone please tell me what would be a correct
> way from the usb driver(usbtest.c) to trigger an
> approprite dma_unmap_single or this is a shortcoming
> in some part of USB host side stack.

It looks like a line of code got left out by mistake.  This patch should 
fix the problem by preventing the call to dma_map_single.  Let me know if 
it works.

Alan Stern


Index: usb-2.6/drivers/usb/misc/usbtest.c
===================================================================
--- usb-2.6.orig/drivers/usb/misc/usbtest.c
+++ usb-2.6/drivers/usb/misc/usbtest.c
@@ -983,6 +983,7 @@ test_ctrl_queue (struct usbtest_dev *dev
                reqp->number = i % NUM_SUBCASES;
                reqp->expected = expected;
                u->setup_packet = (char *) &reqp->setup;
+               u->transfer_flags |= URB_NO_SETUP_DMA_MAP;
 
                u->context = &context;
                u->complete = ctrl_complete;



-------------------------------------------------------
This SF.Net email is sponsored by:
Power Architecture Resource Center: Free content, downloads, discussions,
and more. http://solutions.newsforge.com/ibmarch.tmpl
_______________________________________________
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