Re: [PATCH] usbip: Fix the error limitation on max_hw_sectors for usbip device

From: Zongmin Zhou
Date: Wed Apr 02 2025 - 04:34:40 EST



On 2025/3/29 05:14, Shuah Khan wrote:
On 3/13/25 04:02, Zongmin Zhou wrote:

On 2025/3/11 00:49, Shuah Khan wrote:
On 3/5/25 03:03, Zongmin Zhou wrote:
At 2025-03-05 03:45:28, "Shuah Khan" <skhan@xxxxxxxxxxxxxxxxxxx> wrote:

On 3/2/25 05:37, Zongmin Zhou wrote:
Dear shuah,


Yes, I agree with you.It would be better if there have a more simpler fixes than This patch.

I can just think of the two possible solutions that mentioned before.

 >What are the two possible solutions?
1. The patch we are discussing now,have to change the API between the kernel and user-space.

2. Simply set vhci-hcd dma mask to 64 by default,just modify the vhci-hcd driver. Then dma_max_mapping_size() will always return SIZE_MAX.

I prefer option #2 - What are the downsides if any with this option?

If set vhci-hcd dma mask to 64 by default,I can't predict what will happen when the real USB controller support less than 64bit?

After all, the data flows from vhci-hcd to usbip-host and finally to the USB controller to which the device is actually connected.

the data is ultimately processed through the real USB controller?

Sorry for the delay.

That is the case. I have to check the code to see what the host
would do if it receives larger buffers from the client (vhci)

However, the default setting to 64-bit is equivalent to eliminating the impact of

the patch(commit d74ffae8b8dd) on usbip protocol devices, sounds feasible?

I am not very professional in this field, waiting for your evaluation.

We can give this a try. Send me the patch with default testing the
following cases:

Host - swiotlb enabled and disabled in your environment to see what
happens when there is a mismatch swiotlb enabled case and client
side doesn't limit the size.

If you want to test swiotlb disabled mode, you can modify the kernel cmd to force disable swiotlb:

modify the grub.cfg, add the swiotlb=noforce parameter to kernel command line,and reboot.

cat /proc/cmdline to check whether modified successfully.


The patch set vhci-hcd dma mask to 64 by default like below:

---
 drivers/usb/usbip/vhci_hcd.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/usb/usbip/vhci_hcd.c b/drivers/usb/usbip/vhci_hcd.c
index e70fba9f55d6..fca3a4a6e94d 100644
--- a/drivers/usb/usbip/vhci_hcd.c
+++ b/drivers/usb/usbip/vhci_hcd.c
@@ -1345,6 +1345,9 @@ static int vhci_hcd_probe(struct platform_device *pdev)

     usbip_dbg_vhci_hc("name %s id %d\n", pdev->name, pdev->id);

+    /* Set the dma mask to support 64bit for vhci-hcd driver. */
+    dma_set_mask(&pdev->dev, DMA_BIT_MASK(64));
+
     /*
      * Allocate and initialize hcd.
      * Our private data is also allocated automatically.
--
2.34.1


thanks,
-- Shuah