aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Duyck <alexander.h.duyck@intel.com>2017-12-29 08:48:53 -0500
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2018-01-26 16:23:46 -0500
commita3f9fb5ef34e2f01a77a74c359e655b64cb1a6ae (patch)
tree62ca3a8971029c93c36df6c1dbfe265212081503
parent40339af33c703bacb336493157d43c86a8bf2fed (diff)
i40e/i40evf: Record ITR register location in the q_vector
The drivers for i40e and i40evf had a reg_idx value stored in the q_vector that was going completely unused. I can only assume this was copied over from ixgbe and nobody knew how to use it. I'm going to make use of the value to avoid having to compute the vector and thus the register index for multiple paths throughout the drivers. Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com> Tested-by: Andrew Bowers <andrewx.bowers@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
-rw-r--r--drivers/net/ethernet/intel/i40e/i40e_main.c1
-rw-r--r--drivers/net/ethernet/intel/i40e/i40e_txrx.c12
-rw-r--r--drivers/net/ethernet/intel/i40evf/i40e_txrx.c12
-rw-r--r--drivers/net/ethernet/intel/i40evf/i40evf.h4
-rw-r--r--drivers/net/ethernet/intel/i40evf/i40evf_main.c1
5 files changed, 12 insertions, 18 deletions
diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
index 25087e21a051..827c082c4356 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_main.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
@@ -4122,6 +4122,7 @@ static void i40e_vsi_map_rings_to_vectors(struct i40e_vsi *vsi)
4122 num_ringpairs = DIV_ROUND_UP(qp_remaining, q_vectors - v_start); 4122 num_ringpairs = DIV_ROUND_UP(qp_remaining, q_vectors - v_start);
4123 4123
4124 q_vector->num_ringpairs = num_ringpairs; 4124 q_vector->num_ringpairs = num_ringpairs;
4125 q_vector->reg_idx = q_vector->v_idx + vsi->base_vector - 1;
4125 4126
4126 q_vector->rx.count = 0; 4127 q_vector->rx.count = 0;
4127 q_vector->tx.count = 0; 4128 q_vector->tx.count = 0;
diff --git a/drivers/net/ethernet/intel/i40e/i40e_txrx.c b/drivers/net/ethernet/intel/i40e/i40e_txrx.c
index 8d2275830a40..e554aa6cf070 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_txrx.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_txrx.c
@@ -956,7 +956,7 @@ static void i40e_enable_wb_on_itr(struct i40e_vsi *vsi,
956 I40E_PFINT_DYN_CTLN_ITR_INDX_MASK; /* set noitr */ 956 I40E_PFINT_DYN_CTLN_ITR_INDX_MASK; /* set noitr */
957 957
958 wr32(&vsi->back->hw, 958 wr32(&vsi->back->hw,
959 I40E_PFINT_DYN_CTLN(q_vector->v_idx + vsi->base_vector - 1), 959 I40E_PFINT_DYN_CTLN(q_vector->reg_idx),
960 val); 960 val);
961 } else { 961 } else {
962 val = I40E_PFINT_DYN_CTL0_WB_ON_ITR_MASK | 962 val = I40E_PFINT_DYN_CTL0_WB_ON_ITR_MASK |
@@ -983,8 +983,7 @@ void i40e_force_wb(struct i40e_vsi *vsi, struct i40e_q_vector *q_vector)
983 /* allow 00 to be written to the index */ 983 /* allow 00 to be written to the index */
984 984
985 wr32(&vsi->back->hw, 985 wr32(&vsi->back->hw,
986 I40E_PFINT_DYN_CTLN(q_vector->v_idx + 986 I40E_PFINT_DYN_CTLN(q_vector->reg_idx), val);
987 vsi->base_vector - 1), val);
988 } else { 987 } else {
989 u32 val = I40E_PFINT_DYN_CTL0_INTENA_MASK | 988 u32 val = I40E_PFINT_DYN_CTL0_INTENA_MASK |
990 I40E_PFINT_DYN_CTL0_ITR_INDX_MASK | /* set noitr */ 989 I40E_PFINT_DYN_CTL0_ITR_INDX_MASK | /* set noitr */
@@ -2311,7 +2310,6 @@ static inline void i40e_update_enable_itr(struct i40e_vsi *vsi,
2311 struct i40e_hw *hw = &vsi->back->hw; 2310 struct i40e_hw *hw = &vsi->back->hw;
2312 bool rx = false, tx = false; 2311 bool rx = false, tx = false;
2313 u32 rxval, txval; 2312 u32 rxval, txval;
2314 int vector;
2315 int idx = q_vector->v_idx; 2313 int idx = q_vector->v_idx;
2316 int rx_itr_setting, tx_itr_setting; 2314 int rx_itr_setting, tx_itr_setting;
2317 2315
@@ -2321,8 +2319,6 @@ static inline void i40e_update_enable_itr(struct i40e_vsi *vsi,
2321 return; 2319 return;
2322 } 2320 }
2323 2321
2324 vector = (q_vector->v_idx + vsi->base_vector);
2325
2326 /* avoid dynamic calculation if in countdown mode OR if 2322 /* avoid dynamic calculation if in countdown mode OR if
2327 * all dynamic is disabled 2323 * all dynamic is disabled
2328 */ 2324 */
@@ -2371,12 +2367,12 @@ static inline void i40e_update_enable_itr(struct i40e_vsi *vsi,
2371 */ 2367 */
2372 rxval |= BIT(31); 2368 rxval |= BIT(31);
2373 /* don't check _DOWN because interrupt isn't being enabled */ 2369 /* don't check _DOWN because interrupt isn't being enabled */
2374 wr32(hw, INTREG(vector - 1), rxval); 2370 wr32(hw, INTREG(q_vector->reg_idx), rxval);
2375 } 2371 }
2376 2372
2377enable_int: 2373enable_int:
2378 if (!test_bit(__I40E_VSI_DOWN, vsi->state)) 2374 if (!test_bit(__I40E_VSI_DOWN, vsi->state))
2379 wr32(hw, INTREG(vector - 1), txval); 2375 wr32(hw, INTREG(q_vector->reg_idx), txval);
2380 2376
2381 if (q_vector->itr_countdown) 2377 if (q_vector->itr_countdown)
2382 q_vector->itr_countdown--; 2378 q_vector->itr_countdown--;
diff --git a/drivers/net/ethernet/intel/i40evf/i40e_txrx.c b/drivers/net/ethernet/intel/i40evf/i40e_txrx.c
index c7831f7f7761..357d6051281f 100644
--- a/drivers/net/ethernet/intel/i40evf/i40e_txrx.c
+++ b/drivers/net/ethernet/intel/i40evf/i40e_txrx.c
@@ -369,8 +369,7 @@ static void i40e_enable_wb_on_itr(struct i40e_vsi *vsi,
369 I40E_VFINT_DYN_CTLN1_ITR_INDX_MASK; /* set noitr */ 369 I40E_VFINT_DYN_CTLN1_ITR_INDX_MASK; /* set noitr */
370 370
371 wr32(&vsi->back->hw, 371 wr32(&vsi->back->hw,
372 I40E_VFINT_DYN_CTLN1(q_vector->v_idx + 372 I40E_VFINT_DYN_CTLN1(q_vector->reg_idx), val);
373 vsi->base_vector - 1), val);
374 q_vector->arm_wb_state = true; 373 q_vector->arm_wb_state = true;
375} 374}
376 375
@@ -389,7 +388,7 @@ void i40evf_force_wb(struct i40e_vsi *vsi, struct i40e_q_vector *q_vector)
389 /* allow 00 to be written to the index */; 388 /* allow 00 to be written to the index */;
390 389
391 wr32(&vsi->back->hw, 390 wr32(&vsi->back->hw,
392 I40E_VFINT_DYN_CTLN1(q_vector->v_idx + vsi->base_vector - 1), 391 I40E_VFINT_DYN_CTLN1(q_vector->reg_idx),
393 val); 392 val);
394} 393}
395 394
@@ -1498,12 +1497,9 @@ static inline void i40e_update_enable_itr(struct i40e_vsi *vsi,
1498 struct i40e_hw *hw = &vsi->back->hw; 1497 struct i40e_hw *hw = &vsi->back->hw;
1499 bool rx = false, tx = false; 1498 bool rx = false, tx = false;
1500 u32 rxval, txval; 1499 u32 rxval, txval;
1501 int vector;
1502 int idx = q_vector->v_idx; 1500 int idx = q_vector->v_idx;
1503 int rx_itr_setting, tx_itr_setting; 1501 int rx_itr_setting, tx_itr_setting;
1504 1502
1505 vector = (q_vector->v_idx + vsi->base_vector);
1506
1507 /* avoid dynamic calculation if in countdown mode OR if 1503 /* avoid dynamic calculation if in countdown mode OR if
1508 * all dynamic is disabled 1504 * all dynamic is disabled
1509 */ 1505 */
@@ -1552,12 +1548,12 @@ static inline void i40e_update_enable_itr(struct i40e_vsi *vsi,
1552 */ 1548 */
1553 rxval |= BIT(31); 1549 rxval |= BIT(31);
1554 /* don't check _DOWN because interrupt isn't being enabled */ 1550 /* don't check _DOWN because interrupt isn't being enabled */
1555 wr32(hw, INTREG(vector - 1), rxval); 1551 wr32(hw, INTREG(q_vector->reg_idx), rxval);
1556 } 1552 }
1557 1553
1558enable_int: 1554enable_int:
1559 if (!test_bit(__I40E_VSI_DOWN, vsi->state)) 1555 if (!test_bit(__I40E_VSI_DOWN, vsi->state))
1560 wr32(hw, INTREG(vector - 1), txval); 1556 wr32(hw, INTREG(q_vector->reg_idx), txval);
1561 1557
1562 if (q_vector->itr_countdown) 1558 if (q_vector->itr_countdown)
1563 q_vector->itr_countdown--; 1559 q_vector->itr_countdown--;
diff --git a/drivers/net/ethernet/intel/i40evf/i40evf.h b/drivers/net/ethernet/intel/i40evf/i40evf.h
index 33c0ffcc8b13..9690c1ea019e 100644
--- a/drivers/net/ethernet/intel/i40evf/i40evf.h
+++ b/drivers/net/ethernet/intel/i40evf/i40evf.h
@@ -114,14 +114,14 @@ struct i40e_q_vector {
114 struct i40evf_adapter *adapter; 114 struct i40evf_adapter *adapter;
115 struct i40e_vsi *vsi; 115 struct i40e_vsi *vsi;
116 struct napi_struct napi; 116 struct napi_struct napi;
117 unsigned long reg_idx;
118 struct i40e_ring_container rx; 117 struct i40e_ring_container rx;
119 struct i40e_ring_container tx; 118 struct i40e_ring_container tx;
120 u32 ring_mask; 119 u32 ring_mask;
121 u8 num_ringpairs; /* total number of ring pairs in vector */ 120 u8 num_ringpairs; /* total number of ring pairs in vector */
122#define ITR_COUNTDOWN_START 100 121#define ITR_COUNTDOWN_START 100
123 u8 itr_countdown; /* when 0 or 1 update ITR */ 122 u8 itr_countdown; /* when 0 or 1 update ITR */
124 int v_idx; /* vector index in list */ 123 u16 v_idx; /* index in the vsi->q_vector array. */
124 u16 reg_idx; /* register index of the interrupt */
125 char name[IFNAMSIZ + 15]; 125 char name[IFNAMSIZ + 15];
126 bool arm_wb_state; 126 bool arm_wb_state;
127 cpumask_t affinity_mask; 127 cpumask_t affinity_mask;
diff --git a/drivers/net/ethernet/intel/i40evf/i40evf_main.c b/drivers/net/ethernet/intel/i40evf/i40evf_main.c
index d59bf060196b..16989ad2ca90 100644
--- a/drivers/net/ethernet/intel/i40evf/i40evf_main.c
+++ b/drivers/net/ethernet/intel/i40evf/i40evf_main.c
@@ -1387,6 +1387,7 @@ static int i40evf_alloc_q_vectors(struct i40evf_adapter *adapter)
1387 q_vector->adapter = adapter; 1387 q_vector->adapter = adapter;
1388 q_vector->vsi = &adapter->vsi; 1388 q_vector->vsi = &adapter->vsi;
1389 q_vector->v_idx = q_idx; 1389 q_vector->v_idx = q_idx;
1390 q_vector->reg_idx = q_idx;
1390 cpumask_copy(&q_vector->affinity_mask, cpu_possible_mask); 1391 cpumask_copy(&q_vector->affinity_mask, cpu_possible_mask);
1391 netif_napi_add(adapter->netdev, &q_vector->napi, 1392 netif_napi_add(adapter->netdev, &q_vector->napi,
1392 i40evf_napi_poll, NAPI_POLL_WEIGHT); 1393 i40evf_napi_poll, NAPI_POLL_WEIGHT);