RE: Issue with file transfers to a mass storage device on SMP system

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> -----Original Message-----
> From: Russell King - ARM Linux [mailto:linux@xxxxxxxxxxxxxxxx]
> Sent: Tuesday, July 27, 2010 3:31 PM
> To: Shilimkar, Santosh
> Cc: Mankad, Maulik Ojas; linux-usb@xxxxxxxxxxxxxxx; linux-
> omap@xxxxxxxxxxxxxxx; linux-arm-kernel@xxxxxxxxxxxxxxxxxxx
> Subject: Re: Issue with file transfers to a mass storage device on SMP
> system
> 
> On Tue, Jul 27, 2010 at 03:08:54PM +0530, Shilimkar, Santosh wrote:
> > As discussed, the main reason is the cache maintenance isn't done on
> >  "bcb->CDB"  buffers and hence the data remains in CPU write buffer
> > instead of the physical memory on which DMA operates.
> 
> struct bulk_cb_wrap {
>         __le32  Signature;              /* contains 'USBC' */
>         __u32   Tag;                    /* unique per command id */
>         __le32  DataTransferLength;     /* size of data */
>         __u8    Flags;                  /* direction in bit 0 */
>         __u8    Lun;                    /* LUN normally 0 */
>         __u8    Length;                 /* of of the CDB */
>         __u8    CDB[16];                /* max command */
> };
> 
> So, CDB is contained within bcb...bcb+sizeof(*bcb).
> 
> The bcb is passed to usb_stor_bulk_transfer_buf:
> 
>         result = usb_stor_bulk_transfer_buf(us, us->send_bulk_pipe,
>                                 bcb, cbwlen, NULL);
> 
> which fills it into a URB:
> 
>         usb_fill_bulk_urb(us->current_urb, us->pusb_dev, pipe, buf,
> length,
>                       usb_stor_blocking_completion, NULL);
> 
> This sets the URB buffer pointers:
> 
>         urb->transfer_buffer = transfer_buffer;
>         urb->transfer_buffer_length = buffer_length;
> 
> And this buffer should be dma-mapped and dma-unmapped as appropriate.
> 
> Wasn't there an issue with the DMA mapping being used with a PIO USB
> host recently?  Is that the problem here?
That's correct.
The last issue was otherway round where we were doing map/unmpap on PIO buffer.
This issue is because "CDB[16]", is not cleaned up before merging it into CBW.

Regards,
Santosh


--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux