Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 2 Sep 2016 08:44:15 +0000 (UTC)
From:      Hans Petter Selasky <hselasky@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r305284 - head/lib/libusb
Message-ID:  <201609020844.u828iF3L023921@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: hselasky
Date: Fri Sep  2 08:44:14 2016
New Revision: 305284
URL: https://svnweb.freebsd.org/changeset/base/305284

Log:
  Fix array size issue when using the pre-scaling feature for
  ISOCHRONOUS USB transfers. Make sure enough length and buffer pointers
  are allocated when setting up the libusb transfer structure to support
  the maximum number of frames the kernel can handle.
  
  MFC after:	1 week

Modified:
  head/lib/libusb/libusb20.c

Modified: head/lib/libusb/libusb20.c
==============================================================================
--- head/lib/libusb/libusb20.c	Fri Sep  2 08:17:43 2016	(r305283)
+++ head/lib/libusb/libusb20.c	Fri Sep  2 08:44:14 2016	(r305284)
@@ -176,6 +176,12 @@ libusb20_tr_open_stream(struct libusb20_
 		return (LIBUSB20_ERROR_BUSY);
 	if (MaxFrameCount & LIBUSB20_MAX_FRAME_PRE_SCALE) {
 		MaxFrameCount &= ~LIBUSB20_MAX_FRAME_PRE_SCALE;
+		/*
+		 * The kernel can setup 8 times more frames when
+		 * pre-scaling ISOCHRONOUS transfers. Make sure the
+		 * length and pointer buffers are big enough:
+		 */
+		MaxFrameCount *= 8;
 		pre_scale = 1;
 	} else {
 		pre_scale = 0;
@@ -200,8 +206,13 @@ libusb20_tr_open_stream(struct libusb20_
 	}
 	memset(xfer->ppBuffer, 0, size);
 
-	error = xfer->pdev->methods->tr_open(xfer, MaxBufSize,
-	    MaxFrameCount, ep_no, stream_id, pre_scale);
+	if (pre_scale) {
+		error = xfer->pdev->methods->tr_open(xfer, MaxBufSize,
+		    MaxFrameCount / 8, ep_no, stream_id, 1);
+	} else {
+		error = xfer->pdev->methods->tr_open(xfer, MaxBufSize,
+		    MaxFrameCount, ep_no, stream_id, 0);
+	}
 
 	if (error) {
 		free(xfer->ppBuffer);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201609020844.u828iF3L023921>