usb: misc: usbtest: fix pattern tests for scatterlists.
authorMathias Nyman <mathias.nyman@linux.intel.com>
Mon, 2 May 2016 08:39:03 +0000 (11:39 +0300)
committerSasha Levin <sasha.levin@oracle.com>
Fri, 3 Jun 2016 15:30:33 +0000 (11:30 -0400)
[ Upstream commit cdc77c82a8286b1181b81b6e5ef60c8e83ded7bc ]

The current implemenentation restart the sent pattern for each entry in
the sg list. The receiving end expects a continuous pattern, and test
will fail unless scatterilst entries happen to be aligned with the
pattern

Fix this by calculating the pattern byte based on total sent size
instead of just the current sg entry.

Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
Fixes: 8b5249019352 ("[PATCH] USB: usbtest: scatterlist OUT data pattern testing")
Cc: <stable@vger.kernel.org> # v2.6.18+
Acked-by: Felipe Balbi <felipe.balbi@linux.intel.com>
Acked-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <sasha.levin@oracle.com>
drivers/usb/misc/usbtest.c

index 46bb062dbdf3ec20ce8d177c50835c987c86a53d..bbddc44ce8bc7859099d1d6360059aae6aa54e79 100644 (file)
@@ -492,6 +492,7 @@ static struct scatterlist *
 alloc_sglist(int nents, int max, int vary, struct usbtest_dev *dev, int pipe)
 {
        struct scatterlist      *sg;
+       unsigned int            n_size = 0;
        unsigned                i;
        unsigned                size = max;
        unsigned                maxpacket =
@@ -524,7 +525,8 @@ alloc_sglist(int nents, int max, int vary, struct usbtest_dev *dev, int pipe)
                        break;
                case 1:
                        for (j = 0; j < size; j++)
-                               *buf++ = (u8) ((j % maxpacket) % 63);
+                               *buf++ = (u8) (((j + n_size) % maxpacket) % 63);
+                       n_size += size;
                        break;
                }