linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/2] usbip: Implement SG support
@ 2019-07-05 16:43 Suwan Kim
  2019-07-05 16:43 ` [PATCH v2 1/2] usbip: Skip DMA mapping and unmapping for urb at vhci Suwan Kim
                   ` (2 more replies)
  0 siblings, 3 replies; 17+ messages in thread
From: Suwan Kim @ 2019-07-05 16:43 UTC (permalink / raw)
  To: shuah, valentina.manea.m, stern, gregkh
  Cc: linux-usb, linux-kernel, Suwan Kim

There are bugs on vhci with usb 3.0 storage device. Originally, vhci
doesn't supported SG, so USB storage driver on vhci breaks SG list
into multiple URBs and it causes error that a transfer got terminated
too early because the transfer length for one of the URBs was not
divisible by the maxpacket size.

To support SG, vhci doesn't map and unmap URB for DMA to use native
SG list (urb->num_sgs). In DMA mapping function of vhci, it sets
URB_DMA_MAP_SG flag in urb->transfer_flags if URB has SG list and
this flag will tell the stub driver to use SG list.

In this patch, vhci basically support SG and it sends each SG list
entry to the stub driver. Then, the stub driver sees the total length
of the buffer and allocates SG table and pages according to the total
buffer length calling sgl_alloc(). After the stub driver receives
completed URB, it again sends each SG list entry to vhci.

If HCD of the server doesn't support SG, the stub driver breaks a
single SG reqeust into several URBs and submit them to the server's
HCD. When all the split URBs are completed, the stub driver
reassembles the URBs into a single return command and sends it to
vhci.

Alan fixed vhci bug with the USB 3.0 storage device by modifying
USB storage driver.
("usb-storage: Set virt_boundary_mask to avoid SG overflows")
But the fundamental solution of it is to add SG support to vhci.

This patch works well with the USB 3.0 storage devices without Alan's
patch, and we can revert Alan's patch if it causes some troubles.

Suwan Kim (2):
  usbip: Skip DMA mapping and unmapping for urb at vhci
  usbip: Implement SG support to vhci

 drivers/usb/usbip/stub.h         |   7 +-
 drivers/usb/usbip/stub_main.c    |  52 +++++---
 drivers/usb/usbip/stub_rx.c      | 207 ++++++++++++++++++++++---------
 drivers/usb/usbip/stub_tx.c      | 108 +++++++++++-----
 drivers/usb/usbip/usbip_common.c |  60 +++++++--
 drivers/usb/usbip/vhci_hcd.c     |  29 ++++-
 drivers/usb/usbip/vhci_tx.c      |  49 ++++++--
 7 files changed, 391 insertions(+), 121 deletions(-)

-- 
2.20.1


^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2019-08-02 16:46 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-07-05 16:43 [PATCH v2 0/2] usbip: Implement SG support Suwan Kim
2019-07-05 16:43 ` [PATCH v2 1/2] usbip: Skip DMA mapping and unmapping for urb at vhci Suwan Kim
2019-07-22 20:26   ` shuah
2019-07-23 13:40     ` Suwan Kim
2019-07-05 16:43 ` [PATCH v2 2/2] usbip: Implement SG support to vhci Suwan Kim
2019-07-23  3:51   ` shuah
2019-07-23 13:56     ` Suwan Kim
2019-07-24  0:21   ` shuah
2019-07-29 14:52     ` Suwan Kim
2019-07-29 16:32       ` shuah
2019-08-01  6:38         ` Suwan Kim
2019-08-01 14:03           ` shuah
2019-08-02  7:41             ` Suwan Kim
2019-08-02 13:33               ` shuah
2019-08-02 16:46                 ` Suwan Kim
2019-07-19 22:04 ` [PATCH v2 0/2] usbip: Implement SG support shuah
2019-07-21  9:01   ` Suwan Kim

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).