Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1613226

[PATCH net 01/19] net: hns: Fix the implementation of irq affinity function

From Salil Mehta <salil.mehta@huawei.com>
Newsgroups linux.kernel
Subject [PATCH net 01/19] net: hns: Fix the implementation of irq affinity function
Date 2017-03-30 17:50 +0200
Message-ID <tqKuJ-8ry-1@gated-at.bofh.it> (permalink)
References <tqKl3-8nZ-3@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


From: lipeng <lipeng321@huawei.com>

This patch fixes the implementation of the IRQ affinity
function. This function is used to create the cpu mask
which eventually is used to initialize the cpu<->queue
association for XPS(Transmit Packet Steering).

Signed-off-by: lipeng <lipeng321@huawei.com>
Signed-off-by: Kejian Yan <yankejian@huawei.com>
Reviewed-by: Yisen Zhuang <yisen.zhuang@huawei.com>
Signed-off-by: Salil Mehta <salil.mehta@huawei.com>
---
 drivers/net/ethernet/hisilicon/hns/hns_enet.c | 75 +++++++++++----------------
 drivers/net/ethernet/hisilicon/hns/hns_enet.h |  1 +
 2 files changed, 30 insertions(+), 46 deletions(-)

diff --git a/drivers/net/ethernet/hisilicon/hns/hns_enet.c b/drivers/net/ethernet/hisilicon/hns/hns_enet.c
index fca37e2..73ec8c8 100644
--- a/drivers/net/ethernet/hisilicon/hns/hns_enet.c
+++ b/drivers/net/ethernet/hisilicon/hns/hns_enet.c
@@ -1196,54 +1196,31 @@ static void hns_nic_ring_close(struct net_device *netdev, int idx)
 	napi_disable(&priv->ring_data[idx].napi);
 }
 
-static void hns_set_irq_affinity(struct hns_nic_priv *priv)
+static int hns_nic_init_affinity_mask(int q_num, int ring_idx,
+				      struct hnae_ring *ring, cpumask_t *mask)
 {
-	struct hnae_handle *h = priv->ae_handle;
-	struct hns_nic_ring_data *rd;
-	int i;
 	int cpu;
-	cpumask_var_t mask;
 
-	if (!alloc_cpumask_var(&mask, GFP_KERNEL))
-		return;
-
-	/*diffrent irq banlance for 16core and 32core*/
-	if (h->q_num == num_possible_cpus()) {
-		for (i = 0; i < h->q_num * 2; i++) {
-			rd = &priv->ring_data[i];
-			if (cpu_online(rd->queue_index)) {
-				cpumask_clear(mask);
-				cpu = rd->queue_index;
-				cpumask_set_cpu(cpu, mask);
-				(void)irq_set_affinity_hint(rd->ring->irq,
-							    mask);
-			}
-		}
+	/* Diffrent irq banlance between 16core and 32core.
+	 * The cpu mask set by ring index according to the ring flag
+	 * which indicate the ring is tx or rx.
+	 */
+	if (q_num == num_possible_cpus()) {
+		if (is_tx_ring(ring))
+			cpu = ring_idx;
+		else
+			cpu = ring_idx - q_num;
 	} else {
-		for (i = 0; i < h->q_num; i++) {
-			rd = &priv->ring_data[i];
-			if (cpu_online(rd->queue_index * 2)) {
-				cpumask_clear(mask);
-				cpu = rd->queue_index * 2;
-				cpumask_set_cpu(cpu, mask);
-				(void)irq_set_affinity_hint(rd->ring->irq,
-							    mask);
-			}
-		}
-
-		for (i = h->q_num; i < h->q_num * 2; i++) {
-			rd = &priv->ring_data[i];
-			if (cpu_online(rd->queue_index * 2 + 1)) {
-				cpumask_clear(mask);
-				cpu = rd->queue_index * 2 + 1;
-				cpumask_set_cpu(cpu, mask);
-				(void)irq_set_affinity_hint(rd->ring->irq,
-							    mask);
-			}
-		}
+		if (is_tx_ring(ring))
+			cpu = ring_idx * 2;
+		else
+			cpu = (ring_idx - q_num) * 2 + 1;
 	}
 
-	free_cpumask_var(mask);
+	cpumask_clear(mask);
+	cpumask_set_cpu(cpu, mask);
+
+	return cpu;
 }
 
 static int hns_nic_init_irq(struct hns_nic_priv *priv)
@@ -1252,6 +1229,7 @@ static int hns_nic_init_irq(struct hns_nic_priv *priv)
 	struct hns_nic_ring_data *rd;
 	int i;
 	int ret;
+	int cpu;
 
 	for (i = 0; i < h->q_num * 2; i++) {
 		rd = &priv->ring_data[i];
@@ -1261,7 +1239,7 @@ static int hns_nic_init_irq(struct hns_nic_priv *priv)
 
 		snprintf(rd->ring->ring_name, RCB_RING_NAME_LEN,
 			 "%s-%s%d", priv->netdev->name,
-			 (i < h->q_num ? "tx" : "rx"), rd->queue_index);
+			 (is_tx_ring(rd->ring) ? "tx" : "rx"), rd->queue_index);
 
 		rd->ring->ring_name[RCB_RING_NAME_LEN - 1] = '\0';
 
@@ -1273,12 +1251,17 @@ static int hns_nic_init_irq(struct hns_nic_priv *priv)
 			return ret;
 		}
 		disable_irq(rd->ring->irq);
+
+		cpu = hns_nic_init_affinity_mask(h->q_num, i,
+						 rd->ring, &rd->mask);
+
+		if (cpu_online(cpu))
+			irq_set_affinity_hint(rd->ring->irq,
+					      &rd->mask);
+
 		rd->ring->irq_init_flag = RCB_IRQ_INITED;
 	}
 
-	/*set cpu affinity*/
-	hns_set_irq_affinity(priv);
-
 	return 0;
 }
 
diff --git a/drivers/net/ethernet/hisilicon/hns/hns_enet.h b/drivers/net/ethernet/hisilicon/hns/hns_enet.h
index 5b412de..fff8f8a 100644
--- a/drivers/net/ethernet/hisilicon/hns/hns_enet.h
+++ b/drivers/net/ethernet/hisilicon/hns/hns_enet.h
@@ -37,6 +37,7 @@ enum hns_nic_state {
 struct hns_nic_ring_data {
 	struct hnae_ring *ring;
 	struct napi_struct napi;
+	cpumask_t mask; /* affinity mask */
 	int queue_index;
 	int (*poll_one)(struct hns_nic_ring_data *, int, void *);
 	void (*ex_process)(struct hns_nic_ring_data *, struct sk_buff *);
-- 
2.7.4

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH net 00/19] net: hns: Misc. HNS Bug Fixes & Code Improvements Salil Mehta <salil.mehta@huawei.com> - 2017-03-30 17:40 +0200
  [PATCH net 17/19] net: hns: Adjust the SBM module buffer threshold Salil Mehta <salil.mehta@huawei.com> - 2017-03-30 17:40 +0200
  [PATCH net 16/19] net: hns: Simplify the exception sequence in hns_ppe_init() Salil Mehta <salil.mehta@huawei.com> - 2017-03-30 17:40 +0200
  [PATCH net 12/19] net: hns: Remove redundant mac_get_id() Salil Mehta <salil.mehta@huawei.com> - 2017-03-30 17:40 +0200
  [PATCH net 05/19] net: hns: Remove redundant memset during buffer release Salil Mehta <salil.mehta@huawei.com> - 2017-03-30 17:40 +0200
  [PATCH net 13/19] net: hns: Remove redundant mac table operations Salil Mehta <salil.mehta@huawei.com> - 2017-03-30 17:40 +0200
  [PATCH net 02/19] net: hns: Modify GMAC init TX threshold value Salil Mehta <salil.mehta@huawei.com> - 2017-03-30 17:40 +0200
  [PATCH net 04/19] net: hns: Change the TX queue selection algorithm Salil Mehta <salil.mehta@huawei.com> - 2017-03-30 17:40 +0200
  [PATCH net 19/19] net: hns: Some checkpatch.pl script & warning fixes Salil Mehta <salil.mehta@huawei.com> - 2017-03-30 17:40 +0200
  [PATCH net 15/19] net: hns: Optimise the code in hns_mdio_wait_ready() Salil Mehta <salil.mehta@huawei.com> - 2017-03-30 17:40 +0200
  [PATCH net 07/19] net: hns: Optimize hns_nic_common_poll for better performance Salil Mehta <salil.mehta@huawei.com> - 2017-03-30 17:40 +0200
  [PATCH net 06/19] net: hns: bug fix of ethtool show the speed Salil Mehta <salil.mehta@huawei.com> - 2017-03-30 17:40 +0200
  [PATCH net 08/19] net: hns: Fix to adjust buf_size of ring according to mtu Salil Mehta <salil.mehta@huawei.com> - 2017-03-30 17:40 +0200
    Re: [PATCH net 08/19] net: hns: Fix to adjust buf_size of ring  according to mtu kbuild test robot <lkp@intel.com> - 2017-04-01 02:00 +0200
    [PATCH] net: hns: fix boolreturn.cocci warnings kbuild test robot <lkp@intel.com> - 2017-04-01 02:00 +0200
      Re: [PATCH] net: hns: fix boolreturn.cocci warnings David Miller <davem@davemloft.net> - 2017-04-03 04:50 +0200
        Re: [kbuild-all] [PATCH] net: hns: fix boolreturn.cocci warnings Fengguang Wu <lkp@intel.com> - 2017-04-03 05:00 +0200
  [PATCH net 09/19] net: hns: Replace netif_tx_lock to ring spin lock Salil Mehta <salil.mehta@huawei.com> - 2017-03-30 17:40 +0200
  [PATCH net 10/19] net: hns: Correct HNS RSS key set function Salil Mehta <salil.mehta@huawei.com> - 2017-03-30 17:40 +0200
  [PATCH net 03/19] net: hns: Optimize the code for GMAC pad and crc Config Salil Mehta <salil.mehta@huawei.com> - 2017-03-30 17:40 +0200
  [PATCH net 14/19] net: hns: Clean redundant code from hns_mdio.c file Salil Mehta <salil.mehta@huawei.com> - 2017-03-30 17:40 +0200
  [PATCH net 01/19] net: hns: Fix the implementation of irq affinity function Salil Mehta <salil.mehta@huawei.com> - 2017-03-30 17:50 +0200
  Re: [PATCH net 00/19] net: hns: Misc. HNS Bug Fixes & Code  Improvements David Miller <davem@davemloft.net> - 2017-03-30 19:10 +0200
    RE: [PATCH net 00/19] net: hns: Misc. HNS Bug Fixes & Code  Improvements Salil Mehta <salil.mehta@huawei.com> - 2017-03-30 19:30 +0200
      Re: [PATCH net 00/19] net: hns: Misc. HNS Bug Fixes & Code  Improvements David Miller <davem@davemloft.net> - 2017-03-30 19:30 +0200
        RE: [PATCH net 00/19] net: hns: Misc. HNS Bug Fixes & Code  Improvements Salil Mehta <salil.mehta@huawei.com> - 2017-03-30 19:30 +0200
  Re: [PATCH net 00/19] net: hns: Misc. HNS Bug Fixes & Code  Improvements David Miller <davem@davemloft.net> - 2017-03-31 05:10 +0200
    RE: [PATCH net 00/19] net: hns: Misc. HNS Bug Fixes & Code  Improvements Salil Mehta <salil.mehta@huawei.com> - 2017-03-31 12:00 +0200

csiph-web