qcacld-2.0: Prohibit powersave in downloading FW during SSR
am: 3b57ca8d24

Change-Id: I776595d3d54a98b3fa32cc4043d10b1892dfad57
diff --git a/arch/arm/configs/msmcortex-perf_defconfig b/arch/arm/configs/msmcortex-perf_defconfig
index 30cbd94..fcd27b5 100644
--- a/arch/arm/configs/msmcortex-perf_defconfig
+++ b/arch/arm/configs/msmcortex-perf_defconfig
@@ -348,12 +348,12 @@
 CONFIG_GPIO_SYSFS=y
 CONFIG_GPIO_QPNP_PIN=y
 CONFIG_POWER_SUPPLY=y
-# CONFIG_SMB1351_USB_CHARGER is not set
-# CONFIG_SMB135X_CHARGER is not set
+CONFIG_SMB1351_USB_CHARGER=y
+CONFIG_SMB135X_CHARGER=y
 CONFIG_QPNP_SMBCHARGER=y
-# CONFIG_QPNP_FG is not set
-# CONFIG_BATTERY_BCL is not set
-# CONFIG_QPNP_LINEAR_CHARGER is not set
+CONFIG_QPNP_FG=y
+CONFIG_BATTERY_BCL=y
+CONFIG_QPNP_LINEAR_CHARGER=y
 CONFIG_QPNP_TYPEC=y
 CONFIG_MSM_BCL_CTL=y
 CONFIG_MSM_BCL_PERIPHERAL_CTL=y
diff --git a/arch/arm/configs/msmcortex_defconfig b/arch/arm/configs/msmcortex_defconfig
index 4ef84c3..47621f9 100644
--- a/arch/arm/configs/msmcortex_defconfig
+++ b/arch/arm/configs/msmcortex_defconfig
@@ -336,12 +336,12 @@
 CONFIG_GPIO_SYSFS=y
 CONFIG_GPIO_QPNP_PIN=y
 CONFIG_POWER_SUPPLY=y
-# CONFIG_SMB1351_USB_CHARGER is not set
-# CONFIG_SMB135X_CHARGER is not set
+CONFIG_SMB1351_USB_CHARGER=y
+CONFIG_SMB135X_CHARGER=y
 CONFIG_QPNP_SMBCHARGER=y
-# CONFIG_QPNP_FG is not set
-# CONFIG_BATTERY_BCL is not set
-# CONFIG_QPNP_LINEAR_CHARGER is not set
+CONFIG_QPNP_FG=y
+CONFIG_BATTERY_BCL=y
+CONFIG_QPNP_LINEAR_CHARGER=y
 CONFIG_QPNP_TYPEC=y
 CONFIG_MSM_BCL_CTL=y
 CONFIG_MSM_BCL_PERIPHERAL_CTL=y
diff --git a/drivers/staging/qcacld-2.0/CORE/MAC/inc/sirApi.h b/drivers/staging/qcacld-2.0/CORE/MAC/inc/sirApi.h
index 91dfeac..5a319cd 100644
--- a/drivers/staging/qcacld-2.0/CORE/MAC/inc/sirApi.h
+++ b/drivers/staging/qcacld-2.0/CORE/MAC/inc/sirApi.h
@@ -768,7 +768,7 @@
     //offset of the ieFields from bssId.
     tANI_U16             length;
     tSirMacAddr          bssId;
-    v_TIME_t             scansystimensec;
+    tANI_U64             scansystimensec;
     tANI_U32             timeStamp[2];
     tANI_U16             beaconInterval;
     tANI_U16             capabilityInfo;
diff --git a/drivers/staging/qcacld-2.0/CORE/MAC/src/pe/lim/limSerDesUtils.c b/drivers/staging/qcacld-2.0/CORE/MAC/src/pe/lim/limSerDesUtils.c
index 795e42c..752d5fd 100644
--- a/drivers/staging/qcacld-2.0/CORE/MAC/src/pe/lim/limSerDesUtils.c
+++ b/drivers/staging/qcacld-2.0/CORE/MAC/src/pe/lim/limSerDesUtils.c
@@ -127,9 +127,9 @@
 
     // Extract timer
     vos_mem_copy( (tANI_U8 *) (&pBssDescription->scansystimensec),
-                               pBuf, sizeof(v_TIME_t));
-    pBuf += sizeof(v_TIME_t);
-    len  -= sizeof(v_TIME_t);
+                               pBuf, sizeof(tANI_U64));
+    pBuf += sizeof(tANI_U64);
+    len  -= sizeof(tANI_U64);
     if (limCheckRemainingLength(pMac, len) == eSIR_FAILURE)
         return eSIR_FAILURE;
 
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
index cc7f940..8414642 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -4647,6 +4647,7 @@
 static void tcp_collapse_ofo_queue(struct sock *sk)
 {
 	struct tcp_sock *tp = tcp_sk(sk);
+	u32 range_truesize, sum_tiny = 0;
 	struct sk_buff *skb = skb_peek(&tp->out_of_order_queue);
 	struct sk_buff *head;
 	u32 start, end;
@@ -4656,6 +4657,7 @@
 
 	start = TCP_SKB_CB(skb)->seq;
 	end = TCP_SKB_CB(skb)->end_seq;
+	range_truesize = skb->truesize;
 	head = skb;
 
 	for (;;) {
@@ -4670,14 +4672,24 @@
 		if (!skb ||
 		    after(TCP_SKB_CB(skb)->seq, end) ||
 		    before(TCP_SKB_CB(skb)->end_seq, start)) {
-			tcp_collapse(sk, &tp->out_of_order_queue,
-				     head, skb, start, end);
+			/* Do not attempt collapsing tiny skbs */
+			if (range_truesize != head->truesize ||
+			    end - start >= SKB_WITH_OVERHEAD(SK_MEM_QUANTUM)) {
+				tcp_collapse(sk, &tp->out_of_order_queue,
+					     head, skb, start, end);
+			} else {
+				sum_tiny += range_truesize;
+				if (sum_tiny > sk->sk_rcvbuf >> 3)
+					return;
+			}
+
 			head = skb;
 			if (!skb)
 				break;
 			/* Start new segment */
 			start = TCP_SKB_CB(skb)->seq;
 			end = TCP_SKB_CB(skb)->end_seq;
+			range_truesize = skb->truesize;
 		} else {
 			if (before(TCP_SKB_CB(skb)->seq, start))
 				start = TCP_SKB_CB(skb)->seq;
@@ -4733,6 +4745,9 @@
 	else if (sk_under_memory_pressure(sk))
 		tp->rcv_ssthresh = min(tp->rcv_ssthresh, 4U * tp->advmss);
 
+	if (atomic_read(&sk->sk_rmem_alloc) <= sk->sk_rcvbuf)
+		return 0;
+
 	tcp_collapse_ofo_queue(sk);
 	if (!skb_queue_empty(&sk->sk_receive_queue))
 		tcp_collapse(sk, &sk->sk_receive_queue,