OSDN Git Service

net: hns3: add xps setting support for hns3 driver
authorYunsheng Lin <linyunsheng@huawei.com>
Sat, 23 Feb 2019 09:22:08 +0000 (17:22 +0800)
committerDavid S. Miller <davem@davemloft.net>
Mon, 25 Feb 2019 04:27:49 +0000 (20:27 -0800)
This patch adds xps setting support for hns3 driver based on
the interrupt affinity info.

Signed-off-by: Yunsheng Lin <linyunsheng@huawei.com>
Signed-off-by: Huazhong Tan <tanhuazhong@huawei.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/hisilicon/hns3/hns3_enet.c

index 40b1722..d75977c 100644 (file)
@@ -378,6 +378,29 @@ out_start_err:
        return ret;
 }
 
+static void hns3_config_xps(struct hns3_nic_priv *priv)
+{
+       int i;
+
+       for (i = 0; i < priv->vector_num; i++) {
+               struct hns3_enet_tqp_vector *tqp_vector = &priv->tqp_vector[i];
+               struct hns3_enet_ring *ring = tqp_vector->tx_group.ring;
+
+               while (ring) {
+                       int ret;
+
+                       ret = netif_set_xps_queue(priv->netdev,
+                                                 &tqp_vector->affinity_mask,
+                                                 ring->tqp->tqp_index);
+                       if (ret)
+                               netdev_warn(priv->netdev,
+                                           "set xps queue failed: %d", ret);
+
+                       ring = ring->next;
+               }
+       }
+}
+
 static int hns3_nic_net_open(struct net_device *netdev)
 {
        struct hns3_nic_priv *priv = netdev_priv(netdev);
@@ -410,6 +433,7 @@ static int hns3_nic_net_open(struct net_device *netdev)
        if (h->ae_algo->ops->set_timer_task)
                h->ae_algo->ops->set_timer_task(priv->ae_handle, true);
 
+       hns3_config_xps(priv);
        return 0;
 }