[NEUS7920-477] [9610] wlbt: Parametrize and reduce redistribution time
authorAlbert Cano <a.canocamps@samsung.com>
Tue, 21 May 2019 09:57:37 +0000 (10:57 +0100)
committerKim Gunho <gunho.kim@samsung.com>
Fri, 28 Jun 2019 14:46:23 +0000 (23:46 +0900)
It has been observed tput drops when [m]DNS or TCP SYNC
packets are transmitted on high tput scenerarios.

Current driver changes the AC category to VO
on [m]DNS and TCP SYNC frames. When AC VO is selected, balance
of traffic will assign mbulk memory to this AC by halving
the available memory. That effectivily means that on high tput
scenarios the memory available is halved and tput drops (less
frames sent to FW before flow control triggers).

BoT algorithm is able to redistribute mbulk memory if one of
the subqueues is not used. However the current algorithm checks
if the queues has not been used for 5 seconds. This time is high
when we require high tput.

The patch addresses the issue by parametrizing the time to
redistribute and setting a value of 0 ms.

Change-Id: I22bcb33a5b39e55c90f25ced2582babe55eb9faf
SCSC-Bug-Id: SSB-52811
Signed-off-by: Albert Cano <a.canocamps@samsung.com
drivers/net/wireless/scsc/scsc_wifi_fcq.c

index 2a0a1c32fae02d6caef7b34447f934fbb101d84b..71a2b2532a07d4f0fb9d79a0925f3a462ab6c99f 100755 (executable)
@@ -67,6 +67,10 @@ uint scsc_wifi_fcq_minimum_smod = 50;
 module_param(scsc_wifi_fcq_minimum_smod, uint, S_IRUGO | S_IWUSR);
 MODULE_PARM_DESC(scsc_wifi_fcq_minimum_smod, "Initial value of minimum smod - peer normal (default = 50)");
 
+uint scsc_wifi_fcq_distribution_delay_ms;
+module_param(scsc_wifi_fcq_distribution_delay_ms, uint, S_IRUGO | S_IWUSR);
+MODULE_PARM_DESC(scsc_wifi_fcq_distribution_delay_ms, "Distribution time in ms (default = 0)");
+
 #define SCSC_WIFI_FCQ_SMOD_RESUME_HYSTERESIS 10
 #define SCSC_WIFI_FCQ_QMOD_RESUME_HYSTERESIS 10
 #define SCSC_WIFI_FCQ_GMOD_RESUME_HYSTERESIS 30
@@ -231,7 +235,7 @@ static bool fcq_redistribute_qmod_before_stopping(struct scsc_wifi_fcq_data_qset
        for (i = 1; i < SLSI_NETIF_Q_PER_PEER; i++) {
                queue = &qs->ac_q[i].head;
                if (queue->can_be_distributed &&
-                   (ktime_compare(ktime_get(), ktime_add_ms(queue->empty_t, 5000)) > 0)) {
+                   (ktime_compare(ktime_get(), ktime_add_ms(queue->empty_t, scsc_wifi_fcq_distribution_delay_ms)) > 0)) {
                        /* This queue could be redistributed */
                        qs->ac_inuse &= ~(1 << i);
                        /* To prevent further reallocation */