Rndis: Don't request Host to send aggregated RNDIS packets
Currently MaxPacketsPerTransfer is set to 3 due to which
Windows 7 Host is sending aggregated RNDIS packets. RNDIS driver
is not having de-aggregation support and due to that multi-packet
RNDIS data are not getting decoded properly and those packets are
being discarded. This is leading to degradation in TCP UPLINK
throughput. Hence set MaxPacketsPerTransfer to 1 and accordingly
set MaxTransferSize for accepting 1 RNDIS packet.
CRs-Fixed: 392052
Signed-off-by: Mayank Rana <mrana@codeaurora.org>
(cherry picked from commit e5d2b3da2f8583f7b7625085234309f912a96c14)
Change-Id: I59e5f35084b546d2d72d3f87446f0775f80941b2
Signed-off-by: Sudhir Sharma <sudsha@codeaurora.org>
diff --git a/drivers/usb/gadget/rndis.c b/drivers/usb/gadget/rndis.c
index e0520c7..087c928 100644
--- a/drivers/usb/gadget/rndis.c
+++ b/drivers/usb/gadget/rndis.c
@@ -586,11 +586,11 @@
resp->DeviceFlags = cpu_to_le32(RNDIS_DF_CONNECTIONLESS);
resp->Medium = cpu_to_le32(RNDIS_MEDIUM_802_3);
resp->MaxPacketsPerTransfer = cpu_to_le32(params->max_pkt_per_xfer);
- resp->MaxTransferSize = cpu_to_le32(params->max_pkt_per_xfer *
- (params->dev->mtu
+ resp->MaxTransferSize = cpu_to_le32(
+ params->dev->mtu
+ sizeof(struct ethhdr)
+ sizeof(struct rndis_packet_msg_type)
- + 22));
+ + 22);
resp->PacketAlignmentFactor = cpu_to_le32(0);
resp->AFListOffset = cpu_to_le32(0);
resp->AFListSize = cpu_to_le32(0);
@@ -902,8 +902,7 @@
rndis_per_dev_params[i].used = 1;
rndis_per_dev_params[i].resp_avail = resp_avail;
rndis_per_dev_params[i].v = v;
- rndis_per_dev_params[i].max_pkt_per_xfer =
- TX_SKB_HOLD_THRESHOLD;
+ rndis_per_dev_params[i].max_pkt_per_xfer = 1;
pr_debug("%s: configNr = %d\n", __func__, i);
return i;
}