Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dc6f3265 authored by Azhar Shaikh's avatar Azhar Shaikh Committed by Gerrit - the friendly Code Review server
Browse files

usb: gadget: ether: Reduce max number of scatter/gather packets



The DWC3 controller cannot process more than 7 chained TRBs if the
total payload is less than maxPacketSize. Since this can occur if multiple
small network packets (e.g. TCP ACKs) are being aggregated together using
u_ether's scatter-gather optimization, reduce the maximum number of packet
aggregation accordingly. For RmNet, instead of 10, change it to 7.
For RNDIS, since each packet becomes a header+payload pair, the maximum can
only be 3.

CRs-fixed: 755801
Change-Id: I96b567bbb64bfd9ef0c87ad455162b730eba17b5
Signed-off-by: default avatarAzhar Shaikh <azhars@codeaurora.org>
parent 7aad09de
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -22,6 +22,11 @@
#include "u_rmnet.h"
#include "gadget_chips.h"

static unsigned int rmnet_dl_max_pkt_per_xfer = 7;
module_param(rmnet_dl_max_pkt_per_xfer, uint, S_IRUGO | S_IWUSR);
MODULE_PARM_DESC(rmnet_dl_max_pkt_per_xfer,
	"Maximum packets per transfer for DL aggregation");

#define RMNET_NOTIFY_INTERVAL	5
#define RMNET_MAX_NOTIFY_SIZE	sizeof(struct usb_cdc_notification)

@@ -531,7 +536,8 @@ static int gport_rmnet_connect(struct f_rmnet *dev, unsigned intf)

			return PTR_ERR(net);
		}
		gether_update_dl_max_pkts_per_xfer(&dev->gether_port, 10);
		gether_update_dl_max_pkts_per_xfer(&dev->gether_port,
			rmnet_dl_max_pkt_per_xfer);
		gether_update_dl_max_xfer_size(&dev->gether_port, 16384);
		break;
	case USB_GADGET_XPORT_NONE:
+1 −2
Original line number Diff line number Diff line
@@ -511,7 +511,6 @@ static void rndis_response_complete(struct usb_ep *ep, struct usb_request *req)
	}
}

#define MAX_PKTS_PER_XFER	10
static void rndis_command_complete(struct usb_ep *ep, struct usb_request *req)
{
	struct f_rndis			*rndis = req->context;
@@ -543,7 +542,7 @@ static void rndis_command_complete(struct usb_ep *ep, struct usb_request *req)
			 * together too quickly. However, module param
			 * is not honored.
			 */
			rndis->port.dl_max_pkts_per_xfer = 5;
			rndis->port.dl_max_pkts_per_xfer = 3;

			gether_update_dl_max_pkts_per_xfer(&rndis->port,
					 rndis->port.dl_max_pkts_per_xfer);