> > > > > > You still need to fix this to use dma_alloc_coherent(), and its
> > > > > > sibling function to use dma_free_coherent().
> > > > > >
> > > > > > ...
> > > > >
> > > > > This buffer is synced using dma_sync_single_*/dma_(un)map_single when
> > > > > the request is queued and when the transmission is complete.  To
> > > >
> > > > No.  See <linux/usb_gadget.h> for the definition of 
> > > > usb_ep_alloc_buffer();
> > > > it says explicitly that such mapping calls are not required.
> > > >
> > > > The only portable way to guarantee that is to allocate coherent memory.
> > >
> > > Then I can remove the dma_sync_single calls from ep_queue() and done()?
> > 
> > Not a good idea.  There are two ways that a DMA address gets
> > provided to the lower level code:  (a) coherent buffer allocation,
> > as above, and (b) mapping done by driver, and re-used.  The former
> > doesn't need dma_sync_single().  The latter does.
> 
> Do you mean that the buf of a usb_request could be allocated other than
> calling usb_ep_alloc_buffer()? 

Yes, see case (b) above ...


> I mean if usb_ep_alloc_buffer() is required and only used in allocating 
> buffer to be processed by ep_queue() and done().  We can choose to use
> one of the ways you mentioned above, not both.  In this case, I preferred 
> to choose the second way for better performance.   

But it's not **CORRRECT** except in the case I noted ... which is not
gauranteed, or assumed, elsewhere in the driver.


-------------------------------------------------------------------------
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