net: hns3: refactor GL update function
authorFuyun Liang <liangfuyun1@huawei.com>
Fri, 12 Jan 2018 08:23:12 +0000 (16:23 +0800)
committerDavid S. Miller <davem@davemloft.net>
Fri, 12 Jan 2018 15:12:32 +0000 (10:12 -0500)
The GL update function uses the max GL value between tx_int_gl and
rx_int_gl to set both new tx_int_gl and new rx_int_gl. Therefore, User
can not enable TX GL self-adaptive or RX GL self-adaptive individually.

This patch refactors the code to update the TX GL and the RX GL
separately, making user can enable TX GL self-adaptive or RX GL
self-adaptive individually.

Signed-off-by: Fuyun Liang <liangfuyun1@huawei.com>
Signed-off-by: Peng Li <lipeng321@huawei.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/hisilicon/hns3/hns3_enet.c

index 59d8d9f..2a139ef 100644 (file)
@@ -2459,25 +2459,22 @@ static bool hns3_get_new_int_gl(struct hns3_enet_ring_group *ring_group)
 
 static void hns3_update_new_int_gl(struct hns3_enet_tqp_vector *tqp_vector)
 {
-       u16 rx_int_gl, tx_int_gl;
-       bool rx, tx;
-
-       rx = hns3_get_new_int_gl(&tqp_vector->rx_group);
-       tx = hns3_get_new_int_gl(&tqp_vector->tx_group);
-       rx_int_gl = tqp_vector->rx_group.int_gl;
-       tx_int_gl = tqp_vector->tx_group.int_gl;
-       if (rx && tx) {
-               if (rx_int_gl > tx_int_gl) {
-                       tqp_vector->tx_group.int_gl = rx_int_gl;
-                       tqp_vector->tx_group.flow_level =
-                               tqp_vector->rx_group.flow_level;
-                       hns3_set_vector_coalesc_gl(tqp_vector, rx_int_gl);
-               } else {
-                       tqp_vector->rx_group.int_gl = tx_int_gl;
-                       tqp_vector->rx_group.flow_level =
-                               tqp_vector->tx_group.flow_level;
-                       hns3_set_vector_coalesc_gl(tqp_vector, tx_int_gl);
-               }
+       struct hns3_enet_ring_group *rx_group = &tqp_vector->rx_group;
+       struct hns3_enet_ring_group *tx_group = &tqp_vector->tx_group;
+       bool rx_update, tx_update;
+
+       if (rx_group->gl_adapt_enable) {
+               rx_update = hns3_get_new_int_gl(rx_group);
+               if (rx_update)
+                       hns3_set_vector_coalesce_rx_gl(tqp_vector,
+                                                      rx_group->int_gl);
+       }
+
+       if (tx_group->gl_adapt_enable) {
+               tx_update = hns3_get_new_int_gl(&tqp_vector->tx_group);
+               if (tx_update)
+                       hns3_set_vector_coalesce_tx_gl(tqp_vector,
+                                                      tx_group->int_gl);
        }
 }