mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-18 22:14:16 +00:00
usbip: Accept arbitrarily long scatter-gather list
Fixes issue where memory will fail to be allocated for larger bulk transfers, ~1 MB or more. This occurs because userland libraries, such as libusb, send the entire USB data buffer when SG support is detected. The assumption is that the driver knows how to properly split the data up before sending it out. By hardcoding a limit, bigger transfers that exceed the SG tablesize limit of 32 will be unable to use SG. This results in an attempt to allocate contiguous pages which, unsurprisingly, will fail too and returns an ENOMEM. It looks like other drivers that support SG allow for any length of SG lists. Accepting any SG size allows the driver to properly handle large bulk transfer situations. Tested bulk read and write operations using the following devices: - Logitech Webcam Pro 9000 - USB 2.0 - SanDisk Ultra - USB 3.0 - Logitech M500s Mouse Signed-off-by: Jason Long <jasonlongball@gmail.com> Reviewed-by: Shuah Khan <skhan@linuxfoundation.org> Link: https://lore.kernel.org/r/20241218161344.202637-1-jasonlongball@gmail.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
8cda395b79
commit
ca5d736b74
1 changed files with 2 additions and 6 deletions
|
@ -1161,12 +1161,8 @@ static int vhci_setup(struct usb_hcd *hcd)
|
|||
hcd->self.root_hub->speed = USB_SPEED_SUPER_PLUS;
|
||||
}
|
||||
|
||||
/*
|
||||
* Support SG.
|
||||
* sg_tablesize is an arbitrary value to alleviate memory pressure
|
||||
* on the host.
|
||||
*/
|
||||
hcd->self.sg_tablesize = 32;
|
||||
/* accept arbitrarily long scatter-gather lists */
|
||||
hcd->self.sg_tablesize = ~0;
|
||||
hcd->self.no_sg_constraint = 1;
|
||||
|
||||
return 0;
|
||||
|
|
Loading…
Add table
Reference in a new issue