Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1613226
| 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 |
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 | Next — Previous in thread | Next in thread | Find similar | Unroll 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