* [Intel-wired-lan] [next PATCH S40 00/13] i40e/i40evf updates
@ 2016-07-25 23:15 Bimmy Pujari
2016-07-25 23:15 ` [Intel-wired-lan] [next PATCH S40 01/13] i40e: Fix a bug where a client close can be called before an open is complete Bimmy Pujari
` (12 more replies)
0 siblings, 13 replies; 20+ messages in thread
From: Bimmy Pujari @ 2016-07-25 23:15 UTC (permalink / raw)
To: intel-wired-lan
Akeem G Abodunrin adds code to increase minimum number of allocated VSI.
Anjali Singhai Jain fixes a bug where a client close can be called
before an open is complete.
Avinash Dayanand adds code to force register writes to mitigate sync issues
with iwarp VF driver & adds code to not notify client of VF reset during VF
creation.
Alan Brady fixes lookup table when RSS disabled/enabled.
Carolyn Wyborny adds code to allow RSS Hash set with less than four parameters.
Catherine Sullivan adds code to reset vlan filter count when resetting and
adds code to reset RX csum error stat with other pf stats.
Dave Ertman fixes static analysis tool warning.
Jacob Keller adds code for missing rtnl_lock() around i40evf_set_interrupt_
capability and adds code to not allow reduction of channels below active FD
rules.
Mitch Williams fixes memory leak.
drivers/net/ethernet/intel/i40e/i40e.h | 5 +-
drivers/net/ethernet/intel/i40e/i40e_client.c | 5 +-
drivers/net/ethernet/intel/i40e/i40e_ethtool.c | 232 ++++++++++++++-------
drivers/net/ethernet/intel/i40e/i40e_main.c | 33 ++-
drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c | 9 +-
drivers/net/ethernet/intel/i40evf/i40evf_main.c | 4 +-
6 files changed, 199 insertions(+), 89 deletions(-)
--
2.4.11
^ permalink raw reply [flat|nested] 20+ messages in thread
* [Intel-wired-lan] [next PATCH S40 01/13] i40e: Fix a bug where a client close can be called before an open is complete
2016-07-25 23:15 [Intel-wired-lan] [next PATCH S40 00/13] i40e/i40evf updates Bimmy Pujari
@ 2016-07-25 23:15 ` Bimmy Pujari
2016-07-26 17:56 ` Jeff Kirsher
2016-07-25 23:15 ` [Intel-wired-lan] [next PATCH S40 02/13] i40e/i40evf: Reset vlan filter count when resetting Bimmy Pujari
` (11 subsequent siblings)
12 siblings, 1 reply; 20+ messages in thread
From: Bimmy Pujari @ 2016-07-25 23:15 UTC (permalink / raw)
To: intel-wired-lan
From: Anjali Singhai Jain <anjali.singhai@intel.com>
The client->open call in this path was not protected with the
client instance mutex. And hence the client->close can get initiated
before the open completes.
Signed-off-by: Anjali Singhai Jain <anjali.singhai@intel.com>
Change-Id: I0ed60c38868dd3f44966b6ed49a063d0e5b7edf5
---
drivers/net/ethernet/intel/i40e/i40e_client.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/net/ethernet/intel/i40e/i40e_client.c b/drivers/net/ethernet/intel/i40e/i40e_client.c
index a3d6bb4..e8d9e47 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_client.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_client.c
@@ -561,6 +561,7 @@ void i40e_client_subtask(struct i40e_pf *pf)
pf->hw.bus.device, pf->hw.bus.func);
}
+ mutex_lock(&i40e_client_instance_mutex);
/* Send an Open request to the client */
atomic_inc(&cdev->ref_cnt);
if (client->ops && client->ops->open)
@@ -574,6 +575,7 @@ void i40e_client_subtask(struct i40e_pf *pf)
atomic_dec(&client->ref_cnt);
continue;
}
+ mutex_unlock(&i40e_client_instance_mutex);
}
mutex_unlock(&i40e_client_mutex);
}
--
2.4.11
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [Intel-wired-lan] [next PATCH S40 02/13] i40e/i40evf: Reset vlan filter count when resetting
2016-07-25 23:15 [Intel-wired-lan] [next PATCH S40 00/13] i40e/i40evf updates Bimmy Pujari
2016-07-25 23:15 ` [Intel-wired-lan] [next PATCH S40 01/13] i40e: Fix a bug where a client close can be called before an open is complete Bimmy Pujari
@ 2016-07-25 23:15 ` Bimmy Pujari
2016-07-25 23:15 ` [Intel-wired-lan] [next PATCH S40 03/13] i40e: reset RX csum error stat with other pf stats Bimmy Pujari
` (10 subsequent siblings)
12 siblings, 0 replies; 20+ messages in thread
From: Bimmy Pujari @ 2016-07-25 23:15 UTC (permalink / raw)
To: intel-wired-lan
From: Catherine Sullivan <catherine.sullivan@intel.com>
When we do a reset, all the vlan filters get added again. Therefore we also
want to reset the vlan count to 0 or we quickly run out of filters.
Signed-off-by: Catherine Sullivan <catherine.sullivan@intel.com>
Change-ID: I459f26851e22204dc8b8999928ad87cde8170119
---
Testing Hints: Make sure that you don't run out of filters when doing
multiple resets.
drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
index 6fcbf76..0fa050a 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
@@ -992,6 +992,7 @@ complete_reset:
set_bit(I40E_VF_STAT_ACTIVE, &vf->vf_states);
clear_bit(I40E_VF_STAT_DISABLED, &vf->vf_states);
i40e_notify_client_of_vf_reset(pf, abs_vf_id);
+ vf->num_vlan = 0;
}
/* tell the VF the reset is done */
wr32(hw, I40E_VFGEN_RSTAT1(vf->vf_id), I40E_VFR_VFACTIVE);
--
2.4.11
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [Intel-wired-lan] [next PATCH S40 03/13] i40e: reset RX csum error stat with other pf stats
2016-07-25 23:15 [Intel-wired-lan] [next PATCH S40 00/13] i40e/i40evf updates Bimmy Pujari
2016-07-25 23:15 ` [Intel-wired-lan] [next PATCH S40 01/13] i40e: Fix a bug where a client close can be called before an open is complete Bimmy Pujari
2016-07-25 23:15 ` [Intel-wired-lan] [next PATCH S40 02/13] i40e/i40evf: Reset vlan filter count when resetting Bimmy Pujari
@ 2016-07-25 23:15 ` Bimmy Pujari
2016-07-25 23:15 ` [Intel-wired-lan] [next PATCH S40 04/13] i40evf: add missing rtnl_lock() around i40evf_set_interrupt_capability Bimmy Pujari
` (9 subsequent siblings)
12 siblings, 0 replies; 20+ messages in thread
From: Bimmy Pujari @ 2016-07-25 23:15 UTC (permalink / raw)
To: intel-wired-lan
From: Catherine Sullivan <catherine.sullivan@intel.com>
When we are resetting the pf stats we should also reset the RX csum
error stat.
Signed-off-by: Catherine Sullivan <catherine.sullivan@intel.com>
Change-ID: I7af5ee0ec81a10f6deee1a7b8c2082ea068ef620
---
Testing Hints: Make sure the port.rx_csum_bad stat resets in ethtool
after a pfr.
drivers/net/ethernet/intel/i40e/i40e_main.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
index faebadf..b6f9b11 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_main.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
@@ -527,6 +527,7 @@ void i40e_pf_reset_stats(struct i40e_pf *pf)
pf->veb[i]->stat_offsets_loaded = false;
}
}
+ pf->hw_csum_rx_error = 0;
}
/**
--
2.4.11
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [Intel-wired-lan] [next PATCH S40 04/13] i40evf: add missing rtnl_lock() around i40evf_set_interrupt_capability
2016-07-25 23:15 [Intel-wired-lan] [next PATCH S40 00/13] i40e/i40evf updates Bimmy Pujari
` (2 preceding siblings ...)
2016-07-25 23:15 ` [Intel-wired-lan] [next PATCH S40 03/13] i40e: reset RX csum error stat with other pf stats Bimmy Pujari
@ 2016-07-25 23:15 ` Bimmy Pujari
2016-07-25 23:15 ` [Intel-wired-lan] [next PATCH S40 05/13] i40e: Increase minimum number of allocated VSI Bimmy Pujari
` (8 subsequent siblings)
12 siblings, 0 replies; 20+ messages in thread
From: Bimmy Pujari @ 2016-07-25 23:15 UTC (permalink / raw)
To: intel-wired-lan
From: Jacob Keller <jacob.e.keller@intel.com>
The function calls netif_set_real_num_(tx|rx)_queues, both of which
should be done only under rntl lock. Unfortunately the
i40evf_init_task did not hold the rtnl_lock as necessary. This patch
adds the locking needed.
Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Change-ID: Ib72a21c3ce22b71a226b16f9bbe0f5f8cc3e849b
---
drivers/net/ethernet/intel/i40evf/i40evf_main.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/net/ethernet/intel/i40evf/i40evf_main.c b/drivers/net/ethernet/intel/i40evf/i40evf_main.c
index 9aa3342..eaadeef 100644
--- a/drivers/net/ethernet/intel/i40evf/i40evf_main.c
+++ b/drivers/net/ethernet/intel/i40evf/i40evf_main.c
@@ -1420,7 +1420,9 @@ int i40evf_init_interrupt_scheme(struct i40evf_adapter *adapter)
{
int err;
+ rtnl_lock();
err = i40evf_set_interrupt_capability(adapter);
+ rtnl_unlock();
if (err) {
dev_err(&adapter->pdev->dev,
"Unable to setup interrupt capabilities\n");
--
2.4.11
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [Intel-wired-lan] [next PATCH S40 05/13] i40e: Increase minimum number of allocated VSI
2016-07-25 23:15 [Intel-wired-lan] [next PATCH S40 00/13] i40e/i40evf updates Bimmy Pujari
` (3 preceding siblings ...)
2016-07-25 23:15 ` [Intel-wired-lan] [next PATCH S40 04/13] i40evf: add missing rtnl_lock() around i40evf_set_interrupt_capability Bimmy Pujari
@ 2016-07-25 23:15 ` Bimmy Pujari
2016-07-25 23:47 ` Shannon Nelson
2016-07-25 23:15 ` [Intel-wired-lan] [next PATCH S40 06/13] i40e: Fix static analysis tool warning Bimmy Pujari
` (7 subsequent siblings)
12 siblings, 1 reply; 20+ messages in thread
From: Bimmy Pujari @ 2016-07-25 23:15 UTC (permalink / raw)
To: intel-wired-lan
From: Akeem G Abodunrin <akeem.g.abodunrin@intel.com>
This patch increases minimum number of allocated VSIs, so as to resolve
failure adding VSI for VF when 64-VFs assigned to a PF. The driver
supports up to 128 VFs per device, users can decide to enable up to
64-VFs on a single PF, especially 2 X 40 devices. In that scenario, with
VMDq co-existence, there would be starvation of VSIs - with this patch,
supported features would have enough VSIs for configuration now.
Signed-off-by: Akeem G Abodunrin <akeem.g.abodunrin@intel.com>
Change-ID: If084f4cd823667af8fe7fdc11489c705b32039d5
---
drivers/net/ethernet/intel/i40e/i40e.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/intel/i40e/i40e.h b/drivers/net/ethernet/intel/i40e/i40e.h
index 2a88291..06e1835 100644
--- a/drivers/net/ethernet/intel/i40e/i40e.h
+++ b/drivers/net/ethernet/intel/i40e/i40e.h
@@ -74,7 +74,7 @@
#define I40E_MIN_NUM_DESCRIPTORS 64
#define I40E_MIN_MSIX 2
#define I40E_DEFAULT_NUM_VMDQ_VSI 8 /* max 256 VSIs */
-#define I40E_MIN_VSI_ALLOC 51 /* LAN, ATR, FCOE, 32 VF, 16 VMDQ */
+#define I40E_MIN_VSI_ALLOC 83 /* LAN, ATR, FCOE, 32 VF, 16 VMDQ */
/* max 16 qps */
#define i40e_default_queues_per_vmdq(pf) \
(((pf)->flags & I40E_FLAG_RSS_AQ_CAPABLE) ? 4 : 1)
--
2.4.11
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [Intel-wired-lan] [next PATCH S40 06/13] i40e: Fix static analysis tool warning
2016-07-25 23:15 [Intel-wired-lan] [next PATCH S40 00/13] i40e/i40evf updates Bimmy Pujari
` (4 preceding siblings ...)
2016-07-25 23:15 ` [Intel-wired-lan] [next PATCH S40 05/13] i40e: Increase minimum number of allocated VSI Bimmy Pujari
@ 2016-07-25 23:15 ` Bimmy Pujari
2016-07-25 23:51 ` Shannon Nelson
2016-07-25 23:15 ` [Intel-wired-lan] [next PATCH S40 07/13] i40e: don't allow reduction of channels below active FD rules Bimmy Pujari
` (6 subsequent siblings)
12 siblings, 1 reply; 20+ messages in thread
From: Bimmy Pujari @ 2016-07-25 23:15 UTC (permalink / raw)
To: intel-wired-lan
From: Dave Ertman <david.m.ertman@intel.com>
This patch fixes a problem where a static analysis tool generates a warning
for "INVARIANT_CONDITION: Expression 'enabled_tc' used in the condition
always yields the same result."
Without this patch, the driver will not pass the static analysis tool checks
without generating warnings.
This patch fixes the problem by eliminating the irrelevant check and redundant
assignment for the value of enabled_tc.
Signed-off-by: Dave Ertman <david.m.ertman@intel.com>
Change-ID: Ia7d44cb050f507df7de333e96369d322e08bf408
---
drivers/net/ethernet/intel/i40e/i40e_main.c | 2 --
1 file changed, 2 deletions(-)
diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
index b6f9b11..c130149 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_main.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
@@ -4608,8 +4608,6 @@ static u8 i40e_pf_get_num_tc(struct i40e_pf *pf)
else
return 1; /* Only TC0 */
- /* At least have TC0 */
- enabled_tc = (enabled_tc ? enabled_tc : 0x1);
for (i = 0; i < I40E_MAX_TRAFFIC_CLASS; i++) {
if (enabled_tc & BIT(i))
num_tc++;
--
2.4.11
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [Intel-wired-lan] [next PATCH S40 07/13] i40e: don't allow reduction of channels below active FD rules
2016-07-25 23:15 [Intel-wired-lan] [next PATCH S40 00/13] i40e/i40evf updates Bimmy Pujari
` (5 preceding siblings ...)
2016-07-25 23:15 ` [Intel-wired-lan] [next PATCH S40 06/13] i40e: Fix static analysis tool warning Bimmy Pujari
@ 2016-07-25 23:15 ` Bimmy Pujari
2016-07-25 23:15 ` [Intel-wired-lan] [next PATCH S40 08/13] i40e: Force register writes to mitigate sync issues with iwarp VF driver Bimmy Pujari
` (5 subsequent siblings)
12 siblings, 0 replies; 20+ messages in thread
From: Bimmy Pujari @ 2016-07-25 23:15 UTC (permalink / raw)
To: intel-wired-lan
From: Jacob Keller <jacob.e.keller@intel.com>
If a driver is unable to maintain all current user supplied settings
from ethtool (or other sources), it is not ok for a user request to
succeed and silently trample over previous configuration.
To that end, if you change the number of channels, it must not be
allowed to reduce the number of channels (queues) below the current
flow director filter rules targets. In this case, return -EINVAL when
a request to reduce the number of channels would do so. In addition
log a warning to the kernel buffer explaining why we failed, and report
the rules which prevent us from lowering the number of channels.
Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Change-ID: If41464d63d7aab11cedf09e4f3aa1a69e21ffd88
---
drivers/net/ethernet/intel/i40e/i40e_ethtool.c | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/drivers/net/ethernet/intel/i40e/i40e_ethtool.c b/drivers/net/ethernet/intel/i40e/i40e_ethtool.c
index c912e04..a49552f 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_ethtool.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_ethtool.c
@@ -2744,11 +2744,15 @@ static void i40e_get_channels(struct net_device *dev,
static int i40e_set_channels(struct net_device *dev,
struct ethtool_channels *ch)
{
+ const u8 drop = I40E_FILTER_PROGRAM_DESC_DEST_DROP_PACKET;
struct i40e_netdev_priv *np = netdev_priv(dev);
unsigned int count = ch->combined_count;
struct i40e_vsi *vsi = np->vsi;
struct i40e_pf *pf = vsi->back;
+ struct i40e_fdir_filter *rule;
+ struct hlist_node *node2;
int new_count;
+ int err = 0;
/* We do not support setting channels for any other VSI at present */
if (vsi->type != I40E_VSI_MAIN)
@@ -2766,6 +2770,26 @@ static int i40e_set_channels(struct net_device *dev,
if (count > i40e_max_channels(vsi))
return -EINVAL;
+ /* verify that the number of channels does not invalidate any current
+ * flow director rules
+ */
+ hlist_for_each_entry_safe(rule, node2,
+ &pf->fdir_filter_list, fdir_node) {
+ if (rule->dest_ctl != drop && count <= rule->q_index) {
+ dev_warn(&pf->pdev->dev,
+ "Existing user defined filter %d assigns flow to queue %d\n",
+ rule->fd_id, rule->q_index);
+ err = -EINVAL;
+ }
+ }
+
+ if (err) {
+ dev_err(&pf->pdev->dev,
+ "Existing filter rules must be deleted to reduce combined channel count to %d\n",
+ count);
+ return err;
+ }
+
/* update feature limits from largest to smallest supported values */
/* TODO: Flow director limit, DCB etc */
--
2.4.11
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [Intel-wired-lan] [next PATCH S40 08/13] i40e: Force register writes to mitigate sync issues with iwarp VF driver
2016-07-25 23:15 [Intel-wired-lan] [next PATCH S40 00/13] i40e/i40evf updates Bimmy Pujari
` (6 preceding siblings ...)
2016-07-25 23:15 ` [Intel-wired-lan] [next PATCH S40 07/13] i40e: don't allow reduction of channels below active FD rules Bimmy Pujari
@ 2016-07-25 23:15 ` Bimmy Pujari
2016-07-25 23:15 ` [Intel-wired-lan] [next PATCH S40 09/13] i40e: Don't notify client of VF reset during VF creation Bimmy Pujari
` (4 subsequent siblings)
12 siblings, 0 replies; 20+ messages in thread
From: Bimmy Pujari @ 2016-07-25 23:15 UTC (permalink / raw)
To: intel-wired-lan
From: Avinash Dayanand <avinash.dayanand@intel.com>
This patch is a fix for the bug i.e. unable to create iwarp device
in VF. This is a sync issue and the iwarp device open is called even
before the PCI register writes are done.
Forcing the PCI register writes to happen just before it exits the
function.
Signed-off-by: Avinash Dayanand <avinash.dayanand@intel.com>
Change-ID: I60c6a2c709da89e845f2764cc50ce8b7373c8c44
---
drivers/net/ethernet/intel/i40e/i40e_client.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/intel/i40e/i40e_client.c b/drivers/net/ethernet/intel/i40e/i40e_client.c
index e8d9e47..cc7403a 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_client.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_client.c
@@ -815,7 +815,8 @@ static int i40e_client_setup_qvlist(struct i40e_info *ldev,
wr32(hw, I40E_PFINT_AEQCTL, reg);
}
}
-
+ /* Mitigate sync problems with iwarp VF driver */
+ i40e_flush(hw);
return 0;
err:
kfree(ldev->qvlist_info);
--
2.4.11
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [Intel-wired-lan] [next PATCH S40 09/13] i40e: Don't notify client of VF reset during VF creation
2016-07-25 23:15 [Intel-wired-lan] [next PATCH S40 00/13] i40e/i40evf updates Bimmy Pujari
` (7 preceding siblings ...)
2016-07-25 23:15 ` [Intel-wired-lan] [next PATCH S40 08/13] i40e: Force register writes to mitigate sync issues with iwarp VF driver Bimmy Pujari
@ 2016-07-25 23:15 ` Bimmy Pujari
2016-07-25 23:15 ` [Intel-wired-lan] [next PATCH S40 10/13] i40e: fix lookup table when RSS disabled/enabled Bimmy Pujari
` (3 subsequent siblings)
12 siblings, 0 replies; 20+ messages in thread
From: Bimmy Pujari @ 2016-07-25 23:15 UTC (permalink / raw)
To: intel-wired-lan
From: Avinash Dayanand <avinash.dayanand@intel.com>
VF goes through reset path during VF creation which happens to also
have notification of VF reset to client. Adding conditional check to
avoid wrongly notifying VF reset during VF creation.
Also changing the call order of VF enable, calling it after VF creation
rather than before.
Signed-off-by: Avinash Dayanand <avinash.dayanand@intel.com>
Change-ID: I96eabd99deae746a2f0fc465194c886f196178ce
---
drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
index 0fa050a..5ea659c 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
@@ -991,7 +991,9 @@ complete_reset:
i40e_enable_vf_mappings(vf);
set_bit(I40E_VF_STAT_ACTIVE, &vf->vf_states);
clear_bit(I40E_VF_STAT_DISABLED, &vf->vf_states);
- i40e_notify_client_of_vf_reset(pf, abs_vf_id);
+ /* Do not notify the client during VF init */
+ if (vf->pf->num_alloc_vfs)
+ i40e_notify_client_of_vf_reset(pf, abs_vf_id);
vf->num_vlan = 0;
}
/* tell the VF the reset is done */
@@ -1090,7 +1092,6 @@ int i40e_alloc_vfs(struct i40e_pf *pf, u16 num_alloc_vfs)
goto err_iov;
}
}
- i40e_notify_client_of_vf_enable(pf, num_alloc_vfs);
/* allocate memory */
vfs = kcalloc(num_alloc_vfs, sizeof(struct i40e_vf), GFP_KERNEL);
if (!vfs) {
@@ -1114,6 +1115,8 @@ int i40e_alloc_vfs(struct i40e_pf *pf, u16 num_alloc_vfs)
}
pf->num_alloc_vfs = num_alloc_vfs;
+ i40e_notify_client_of_vf_enable(pf, num_alloc_vfs);
+
err_alloc:
if (ret)
i40e_free_vfs(pf);
--
2.4.11
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [Intel-wired-lan] [next PATCH S40 10/13] i40e: fix lookup table when RSS disabled/enabled
2016-07-25 23:15 [Intel-wired-lan] [next PATCH S40 00/13] i40e/i40evf updates Bimmy Pujari
` (8 preceding siblings ...)
2016-07-25 23:15 ` [Intel-wired-lan] [next PATCH S40 09/13] i40e: Don't notify client of VF reset during VF creation Bimmy Pujari
@ 2016-07-25 23:15 ` Bimmy Pujari
2016-07-26 15:48 ` Brady, Alan
2016-07-25 23:15 ` [Intel-wired-lan] [next PATCH S40 11/13] i40e: fix memory leak Bimmy Pujari
` (2 subsequent siblings)
12 siblings, 1 reply; 20+ messages in thread
From: Bimmy Pujari @ 2016-07-25 23:15 UTC (permalink / raw)
To: intel-wired-lan
From: "Alan, Brady" <alan.brady@intel.com>
This patch fixes the bug which causes RSS to continue to work
after being disabled. After disabling RSS, traffic would continue
to be assigned to different queues instead of falling back to a
single queue. Without this patch, attempting to disable RSS would
not work as expected. This patch fixes the bug by clearing the
lookup table used by RSS such that all traffic is assigned to a
single queue. This patch also addresses the issue of reinstating
the lookup table should RSS then be re-enabled.
Signed-off-by: Alan Brady <alan.brady@intel.com>
Change-ID: Ib20c7c6a7e9f1f772bb787370f8a8c664796b141
---
drivers/net/ethernet/intel/i40e/i40e_main.c | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
index c130149..a33e902 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_main.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
@@ -8658,6 +8658,28 @@ bool i40e_set_ntuple(struct i40e_pf *pf, netdev_features_t features)
}
/**
+ * i40e_clear_rss_lut - clear the rx hash lookup table
+ * @vsi: the VSI being configured
+ **/
+static void i40e_clear_rss_lut(struct i40e_vsi *vsi)
+{
+ struct i40e_pf *pf = vsi->back;
+ struct i40e_hw *hw = &pf->hw;
+ u16 vf_id = vsi->vf_id;
+ u8 i;
+
+ if (vsi->type == I40E_VSI_MAIN) {
+ for (i = 0; i <= I40E_PFQF_HLUT_MAX_INDEX; i++)
+ wr32(hw, I40E_PFQF_HLUT(i), 0);
+ } else if (vsi->type == I40E_VSI_SRIOV) {
+ for (i = 0; i <= I40E_VFQF_HLUT_MAX_INDEX; i++)
+ i40e_write_rx_ctl(hw, I40E_VFQF_HLUT1(i, vf_id), 0);
+ } else {
+ dev_err(&pf->pdev->dev, "Cannot set RSS LUT - invalid VSI type\n");
+ }
+}
+
+/**
* i40e_set_features - set the netdev feature flags
* @netdev: ptr to the netdev being adjusted
* @features: the feature set that the stack is suggesting
@@ -8670,6 +8692,12 @@ static int i40e_set_features(struct net_device *netdev,
struct i40e_pf *pf = vsi->back;
bool need_reset;
+ if (features & NETIF_F_RXHASH && !(netdev->features & NETIF_F_RXHASH))
+ i40e_pf_config_rss(pf);
+ else if (!(features & NETIF_F_RXHASH) &&
+ netdev->features & NETIF_F_RXHASH)
+ i40e_clear_rss_lut(vsi);
+
if (features & NETIF_F_HW_VLAN_CTAG_RX)
i40e_vlan_stripping_enable(vsi);
else
--
2.4.11
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [Intel-wired-lan] [next PATCH S40 11/13] i40e: fix memory leak
2016-07-25 23:15 [Intel-wired-lan] [next PATCH S40 00/13] i40e/i40evf updates Bimmy Pujari
` (9 preceding siblings ...)
2016-07-25 23:15 ` [Intel-wired-lan] [next PATCH S40 10/13] i40e: fix lookup table when RSS disabled/enabled Bimmy Pujari
@ 2016-07-25 23:15 ` Bimmy Pujari
2016-07-25 23:15 ` [Intel-wired-lan] [next PATCH S40 12/13] i40e: Allow RSS Hash set with less than four parameters Bimmy Pujari
2016-07-25 23:15 ` [Intel-wired-lan] [next PATCH S40 13/13] i40e/i40evf-Bump version from 1.6.11 to 1.6.12 Bimmy Pujari
12 siblings, 0 replies; 20+ messages in thread
From: Bimmy Pujari @ 2016-07-25 23:15 UTC (permalink / raw)
To: intel-wired-lan
From: Mitch Williams <mitch.a.williams@intel.com>
When we allocate memory, we must free it. It's simple courtesy.
Signed-off-by: Mitch Williams <mitch.a.williams@intel.com>
Change-ID: Id007294096fb53344f1a8b9a0f78eddf9853c5d6
---
Testing Hints : Found by inspection. The VF driver
doesn't currently call this function, so not testable.
drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
index 5ea659c..68e3482 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
@@ -2318,6 +2318,7 @@ err:
/* send the response back to the VF */
aq_ret = i40e_vc_send_msg_to_vf(vf, I40E_VIRTCHNL_OP_GET_RSS_HENA_CAPS,
aq_ret, (u8 *)vrh, len);
+ kfree(vrh);
return aq_ret;
}
--
2.4.11
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [Intel-wired-lan] [next PATCH S40 12/13] i40e: Allow RSS Hash set with less than four parameters
2016-07-25 23:15 [Intel-wired-lan] [next PATCH S40 00/13] i40e/i40evf updates Bimmy Pujari
` (10 preceding siblings ...)
2016-07-25 23:15 ` [Intel-wired-lan] [next PATCH S40 11/13] i40e: fix memory leak Bimmy Pujari
@ 2016-07-25 23:15 ` Bimmy Pujari
2016-07-25 23:15 ` [Intel-wired-lan] [next PATCH S40 13/13] i40e/i40evf-Bump version from 1.6.11 to 1.6.12 Bimmy Pujari
12 siblings, 0 replies; 20+ messages in thread
From: Bimmy Pujari @ 2016-07-25 23:15 UTC (permalink / raw)
To: intel-wired-lan
From: Carolyn Wyborny <carolyn.wyborny@intel.com>
This patch implements a feature change which allows using ethtool to set
rss hash opts using less than four parameters if desired.
Signed-off-by: Carolyn Wyborny <carolyn.wyborny@intel.com>
Signed-off-by: Kiran Patil <kiran.patil@intel.com>
Change-ID: I0fbb91255d81e997c456697c21ac39cc9754821b
---
drivers/net/ethernet/intel/i40e/i40e.h | 3 -
drivers/net/ethernet/intel/i40e/i40e_ethtool.c | 208 +++++++++++++++----------
2 files changed, 130 insertions(+), 81 deletions(-)
diff --git a/drivers/net/ethernet/intel/i40e/i40e.h b/drivers/net/ethernet/intel/i40e/i40e.h
index 06e1835..6329233 100644
--- a/drivers/net/ethernet/intel/i40e/i40e.h
+++ b/drivers/net/ethernet/intel/i40e/i40e.h
@@ -586,9 +586,6 @@ struct i40e_vsi {
/* VSI specific handlers */
irqreturn_t (*irq_handler)(int irq, void *data);
-
- /* current rxnfc data */
- struct ethtool_rxnfc rxnfc; /* current rss hash opts */
} ____cacheline_internodealigned_in_smp;
struct i40e_netdev_priv {
diff --git a/drivers/net/ethernet/intel/i40e/i40e_ethtool.c b/drivers/net/ethernet/intel/i40e/i40e_ethtool.c
index a49552f..5bd3848 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_ethtool.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_ethtool.c
@@ -2141,41 +2141,72 @@ static int i40e_set_per_queue_coalesce(struct net_device *netdev, u32 queue,
**/
static int i40e_get_rss_hash_opts(struct i40e_pf *pf, struct ethtool_rxnfc *cmd)
{
+ struct i40e_hw *hw = &pf->hw;
+ u8 flow_pctype = 0;
+ u64 i_set = 0;
+
cmd->data = 0;
- if (pf->vsi[pf->lan_vsi]->rxnfc.data != 0) {
- cmd->data = pf->vsi[pf->lan_vsi]->rxnfc.data;
- cmd->flow_type = pf->vsi[pf->lan_vsi]->rxnfc.flow_type;
- return 0;
- }
- /* Report default options for RSS on i40e */
switch (cmd->flow_type) {
case TCP_V4_FLOW:
+ flow_pctype = I40E_FILTER_PCTYPE_NONF_IPV4_TCP;
+ break;
case UDP_V4_FLOW:
- cmd->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3;
- /* fall through to add IP fields */
+ flow_pctype = I40E_FILTER_PCTYPE_NONF_IPV4_UDP;
+ break;
+ case TCP_V6_FLOW:
+ flow_pctype = I40E_FILTER_PCTYPE_NONF_IPV6_TCP;
+ break;
+ case UDP_V6_FLOW:
+ flow_pctype = I40E_FILTER_PCTYPE_NONF_IPV6_UDP;
+ break;
case SCTP_V4_FLOW:
case AH_ESP_V4_FLOW:
case AH_V4_FLOW:
case ESP_V4_FLOW:
case IPV4_FLOW:
- cmd->data |= RXH_IP_SRC | RXH_IP_DST;
- break;
- case TCP_V6_FLOW:
- case UDP_V6_FLOW:
- cmd->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3;
- /* fall through to add IP fields */
case SCTP_V6_FLOW:
case AH_ESP_V6_FLOW:
case AH_V6_FLOW:
case ESP_V6_FLOW:
case IPV6_FLOW:
+ /* Default is src/dest for IP, no matter the L4 hashing */
cmd->data |= RXH_IP_SRC | RXH_IP_DST;
break;
default:
return -EINVAL;
}
+ /* Read flow based hash input set register */
+ if (flow_pctype) {
+ i_set = (u64)i40e_read_rx_ctl(hw, I40E_GLQF_HASH_INSET(0,
+ flow_pctype)) |
+ ((u64)i40e_read_rx_ctl(hw, I40E_GLQF_HASH_INSET(1,
+ flow_pctype)) << 32);
+ }
+
+ /* Process bits of hash input set */
+ if (i_set) {
+ if (i_set & I40E_L4_SRC_MASK)
+ cmd->data |= RXH_L4_B_0_1;
+ if (i_set & I40E_L4_DST_MASK)
+ cmd->data |= RXH_L4_B_2_3;
+
+ if (cmd->flow_type == TCP_V4_FLOW ||
+ cmd->flow_type == UDP_V4_FLOW) {
+ if (i_set & I40E_L3_SRC_MASK)
+ cmd->data |= RXH_IP_SRC;
+ if (i_set & I40E_L3_DST_MASK)
+ cmd->data |= RXH_IP_DST;
+ } else if (cmd->flow_type == TCP_V6_FLOW ||
+ cmd->flow_type == UDP_V6_FLOW) {
+ if (i_set & I40E_L3_V6_SRC_MASK)
+ cmd->data |= RXH_IP_SRC;
+ if (i_set & I40E_L3_V6_DST_MASK)
+ cmd->data |= RXH_IP_DST;
+ }
+ }
+
return 0;
}
@@ -2318,6 +2349,51 @@ static int i40e_get_rxnfc(struct net_device *netdev, struct ethtool_rxnfc *cmd,
}
/**
+ * i40e_get_rss_hash_bits - Read RSS Hash bits from register
+ * @nfc: pointer to user request
+ * @i_setc bits currently set
+ *
+ * Returns value of bits to be set per user request
+ **/
+static u64 i40e_get_rss_hash_bits(struct ethtool_rxnfc *nfc, u64 i_setc)
+{
+ u64 i_set = i_setc;
+ u64 src_l3 = 0, dst_l3 = 0;
+
+ if (nfc->data & RXH_L4_B_0_1)
+ i_set |= I40E_L4_SRC_MASK;
+ else
+ i_set &= ~I40E_L4_SRC_MASK;
+ if (nfc->data & RXH_L4_B_2_3)
+ i_set |= I40E_L4_DST_MASK;
+ else
+ i_set &= ~I40E_L4_DST_MASK;
+
+ if (nfc->flow_type == TCP_V6_FLOW || nfc->flow_type == UDP_V6_FLOW) {
+ src_l3 = I40E_L3_V6_SRC_MASK;
+ dst_l3 = I40E_L3_V6_DST_MASK;
+ } else if (nfc->flow_type == TCP_V4_FLOW ||
+ nfc->flow_type == UDP_V4_FLOW) {
+ src_l3 = I40E_L3_SRC_MASK;
+ dst_l3 = I40E_L3_DST_MASK;
+ } else {
+ /* Any other flow type are not supported here */
+ return i_set;
+ }
+
+ if (nfc->data & RXH_IP_SRC)
+ i_set |= src_l3;
+ else
+ i_set &= ~src_l3;
+ if (nfc->data & RXH_IP_DST)
+ i_set |= dst_l3;
+ else
+ i_set &= ~dst_l3;
+
+ return i_set;
+}
+
+/**
* i40e_set_rss_hash_opt - Enable/Disable flow types for RSS hash
* @pf: pointer to the physical function struct
* @cmd: ethtool rxnfc command
@@ -2329,6 +2405,8 @@ static int i40e_set_rss_hash_opt(struct i40e_pf *pf, struct ethtool_rxnfc *nfc)
struct i40e_hw *hw = &pf->hw;
u64 hena = (u64)i40e_read_rx_ctl(hw, I40E_PFQF_HENA(0)) |
((u64)i40e_read_rx_ctl(hw, I40E_PFQF_HENA(1)) << 32);
+ u8 flow_pctype = 0;
+ u64 i_set, i_setc;
/* RSS does not support anything other than hashing
* to queues on src and dst IPs and ports
@@ -2337,75 +2415,39 @@ static int i40e_set_rss_hash_opt(struct i40e_pf *pf, struct ethtool_rxnfc *nfc)
RXH_L4_B_0_1 | RXH_L4_B_2_3))
return -EINVAL;
- /* We need@least the IP SRC and DEST fields for hashing */
- if (!(nfc->data & RXH_IP_SRC) ||
- !(nfc->data & RXH_IP_DST))
- return -EINVAL;
-
switch (nfc->flow_type) {
case TCP_V4_FLOW:
- switch (nfc->data & (RXH_L4_B_0_1 | RXH_L4_B_2_3)) {
- case 0:
- return -EINVAL;
- case (RXH_L4_B_0_1 | RXH_L4_B_2_3):
- if (pf->flags & I40E_FLAG_MULTIPLE_TCP_UDP_RSS_PCTYPE)
- hena |=
- BIT_ULL(I40E_FILTER_PCTYPE_NONF_IPV4_TCP_SYN_NO_ACK);
-
- hena |= BIT_ULL(I40E_FILTER_PCTYPE_NONF_IPV4_TCP);
- break;
- default:
- return -EINVAL;
- }
+ flow_pctype = I40E_FILTER_PCTYPE_NONF_IPV4_TCP;
+ if (pf->flags & I40E_FLAG_MULTIPLE_TCP_UDP_RSS_PCTYPE)
+ hena |=
+ BIT_ULL(I40E_FILTER_PCTYPE_NONF_IPV4_TCP_SYN_NO_ACK);
break;
case TCP_V6_FLOW:
- switch (nfc->data & (RXH_L4_B_0_1 | RXH_L4_B_2_3)) {
- case 0:
- return -EINVAL;
- case (RXH_L4_B_0_1 | RXH_L4_B_2_3):
- if (pf->flags & I40E_FLAG_MULTIPLE_TCP_UDP_RSS_PCTYPE)
- hena |=
- BIT_ULL(I40E_FILTER_PCTYPE_NONF_IPV6_TCP_SYN_NO_ACK);
-
- hena |= BIT_ULL(I40E_FILTER_PCTYPE_NONF_IPV6_TCP);
- break;
- default:
- return -EINVAL;
- }
+ flow_pctype = I40E_FILTER_PCTYPE_NONF_IPV6_TCP;
+ if (pf->flags & I40E_FLAG_MULTIPLE_TCP_UDP_RSS_PCTYPE)
+ hena |=
+ BIT_ULL(I40E_FILTER_PCTYPE_NONF_IPV4_TCP_SYN_NO_ACK);
+ if (pf->flags & I40E_FLAG_MULTIPLE_TCP_UDP_RSS_PCTYPE)
+ hena |=
+ BIT_ULL(I40E_FILTER_PCTYPE_NONF_IPV6_TCP_SYN_NO_ACK);
break;
case UDP_V4_FLOW:
- switch (nfc->data & (RXH_L4_B_0_1 | RXH_L4_B_2_3)) {
- case 0:
- return -EINVAL;
- case (RXH_L4_B_0_1 | RXH_L4_B_2_3):
- if (pf->flags & I40E_FLAG_MULTIPLE_TCP_UDP_RSS_PCTYPE)
- hena |=
- BIT_ULL(I40E_FILTER_PCTYPE_NONF_UNICAST_IPV4_UDP) |
- BIT_ULL(I40E_FILTER_PCTYPE_NONF_MULTICAST_IPV4_UDP);
-
- hena |= (BIT_ULL(I40E_FILTER_PCTYPE_NONF_IPV4_UDP) |
- BIT_ULL(I40E_FILTER_PCTYPE_FRAG_IPV4));
- break;
- default:
- return -EINVAL;
- }
+ flow_pctype = I40E_FILTER_PCTYPE_NONF_IPV4_UDP;
+ if (pf->flags & I40E_FLAG_MULTIPLE_TCP_UDP_RSS_PCTYPE)
+ hena |=
+ BIT_ULL(I40E_FILTER_PCTYPE_NONF_UNICAST_IPV4_UDP) |
+ BIT_ULL(I40E_FILTER_PCTYPE_NONF_MULTICAST_IPV4_UDP);
+
+ hena |= BIT_ULL(I40E_FILTER_PCTYPE_FRAG_IPV4);
break;
case UDP_V6_FLOW:
- switch (nfc->data & (RXH_L4_B_0_1 | RXH_L4_B_2_3)) {
- case 0:
- return -EINVAL;
- case (RXH_L4_B_0_1 | RXH_L4_B_2_3):
- if (pf->flags & I40E_FLAG_MULTIPLE_TCP_UDP_RSS_PCTYPE)
- hena |=
- BIT_ULL(I40E_FILTER_PCTYPE_NONF_UNICAST_IPV6_UDP) |
- BIT_ULL(I40E_FILTER_PCTYPE_NONF_MULTICAST_IPV6_UDP);
-
- hena |= (BIT_ULL(I40E_FILTER_PCTYPE_NONF_IPV6_UDP) |
- BIT_ULL(I40E_FILTER_PCTYPE_FRAG_IPV6));
- break;
- default:
- return -EINVAL;
- }
+ flow_pctype = I40E_FILTER_PCTYPE_NONF_IPV6_UDP;
+ if (pf->flags & I40E_FLAG_MULTIPLE_TCP_UDP_RSS_PCTYPE)
+ hena |=
+ BIT_ULL(I40E_FILTER_PCTYPE_NONF_UNICAST_IPV6_UDP) |
+ BIT_ULL(I40E_FILTER_PCTYPE_NONF_MULTICAST_IPV6_UDP);
+
+ hena |= BIT_ULL(I40E_FILTER_PCTYPE_FRAG_IPV6);
break;
case AH_ESP_V4_FLOW:
case AH_V4_FLOW:
@@ -2437,13 +2479,23 @@ static int i40e_set_rss_hash_opt(struct i40e_pf *pf, struct ethtool_rxnfc *nfc)
return -EINVAL;
}
+ if (flow_pctype) {
+ i_setc = (u64)i40e_read_rx_ctl(hw, I40E_GLQF_HASH_INSET(0,
+ flow_pctype)) |
+ ((u64)i40e_read_rx_ctl(hw, I40E_GLQF_HASH_INSET(1,
+ flow_pctype)) << 32);
+ i_set = i40e_get_rss_hash_bits(nfc, i_setc);
+ i40e_write_rx_ctl(hw, I40E_GLQF_HASH_INSET(0, flow_pctype),
+ (u32)i_set);
+ i40e_write_rx_ctl(hw, I40E_GLQF_HASH_INSET(1, flow_pctype),
+ (u32)(i_set >> 32));
+ hena |= BIT_ULL(flow_pctype);
+ }
+
i40e_write_rx_ctl(hw, I40E_PFQF_HENA(0), (u32)hena);
i40e_write_rx_ctl(hw, I40E_PFQF_HENA(1), (u32)(hena >> 32));
i40e_flush(hw);
- /* Save setting for future output/update */
- pf->vsi[pf->lan_vsi]->rxnfc = *nfc;
-
return 0;
}
--
2.4.11
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [Intel-wired-lan] [next PATCH S40 13/13] i40e/i40evf-Bump version from 1.6.11 to 1.6.12
2016-07-25 23:15 [Intel-wired-lan] [next PATCH S40 00/13] i40e/i40evf updates Bimmy Pujari
` (11 preceding siblings ...)
2016-07-25 23:15 ` [Intel-wired-lan] [next PATCH S40 12/13] i40e: Allow RSS Hash set with less than four parameters Bimmy Pujari
@ 2016-07-25 23:15 ` Bimmy Pujari
12 siblings, 0 replies; 20+ messages in thread
From: Bimmy Pujari @ 2016-07-25 23:15 UTC (permalink / raw)
To: intel-wired-lan
Signed-off-by: Bimmy Pujari <Bimmy.pujari@intel.com>
---
drivers/net/ethernet/intel/i40e/i40e_main.c | 2 +-
drivers/net/ethernet/intel/i40evf/i40evf_main.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
index a33e902..d90ad77 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_main.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
@@ -41,7 +41,7 @@ static const char i40e_driver_string[] =
#define DRV_VERSION_MAJOR 1
#define DRV_VERSION_MINOR 6
-#define DRV_VERSION_BUILD 11
+#define DRV_VERSION_BUILD 12
#define DRV_VERSION __stringify(DRV_VERSION_MAJOR) "." \
__stringify(DRV_VERSION_MINOR) "." \
__stringify(DRV_VERSION_BUILD) DRV_KERN
diff --git a/drivers/net/ethernet/intel/i40evf/i40evf_main.c b/drivers/net/ethernet/intel/i40evf/i40evf_main.c
index eaadeef..24f88ec 100644
--- a/drivers/net/ethernet/intel/i40evf/i40evf_main.c
+++ b/drivers/net/ethernet/intel/i40evf/i40evf_main.c
@@ -38,7 +38,7 @@ static const char i40evf_driver_string[] =
#define DRV_VERSION_MAJOR 1
#define DRV_VERSION_MINOR 6
-#define DRV_VERSION_BUILD 11
+#define DRV_VERSION_BUILD 12
#define DRV_VERSION __stringify(DRV_VERSION_MAJOR) "." \
__stringify(DRV_VERSION_MINOR) "." \
__stringify(DRV_VERSION_BUILD) \
--
2.4.11
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [Intel-wired-lan] [next PATCH S40 05/13] i40e: Increase minimum number of allocated VSI
2016-07-25 23:15 ` [Intel-wired-lan] [next PATCH S40 05/13] i40e: Increase minimum number of allocated VSI Bimmy Pujari
@ 2016-07-25 23:47 ` Shannon Nelson
2016-07-26 1:53 ` Abodunrin, Akeem G
0 siblings, 1 reply; 20+ messages in thread
From: Shannon Nelson @ 2016-07-25 23:47 UTC (permalink / raw)
To: intel-wired-lan
On 07/25/2016 04:15 PM, Bimmy Pujari wrote:
> From: Akeem G Abodunrin <akeem.g.abodunrin@intel.com>
>
> This patch increases minimum number of allocated VSIs, so as to resolve
> failure adding VSI for VF when 64-VFs assigned to a PF. The driver
> supports up to 128 VFs per device, users can decide to enable up to
> 64-VFs on a single PF, especially 2 X 40 devices. In that scenario, with
> VMDq co-existence, there would be starvation of VSIs - with this patch,
> supported features would have enough VSIs for configuration now.
>
> Signed-off-by: Akeem G Abodunrin <akeem.g.abodunrin@intel.com>
> Change-ID: If084f4cd823667af8fe7fdc11489c705b32039d5
> ---
> drivers/net/ethernet/intel/i40e/i40e.h | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/net/ethernet/intel/i40e/i40e.h b/drivers/net/ethernet/intel/i40e/i40e.h
> index 2a88291..06e1835 100644
> --- a/drivers/net/ethernet/intel/i40e/i40e.h
> +++ b/drivers/net/ethernet/intel/i40e/i40e.h
> @@ -74,7 +74,7 @@
> #define I40E_MIN_NUM_DESCRIPTORS 64
> #define I40E_MIN_MSIX 2
> #define I40E_DEFAULT_NUM_VMDQ_VSI 8 /* max 256 VSIs */
> -#define I40E_MIN_VSI_ALLOC 51 /* LAN, ATR, FCOE, 32 VF, 16 VMDQ */
> +#define I40E_MIN_VSI_ALLOC 83 /* LAN, ATR, FCOE, 32 VF, 16 VMDQ */
You should update the comment here to reflect 64 VFs.
Since VMDq is not really supported, perhaps you can remove those 16 from
this calculation?
sln
> /* max 16 qps */
> #define i40e_default_queues_per_vmdq(pf) \
> (((pf)->flags & I40E_FLAG_RSS_AQ_CAPABLE) ? 4 : 1)
^ permalink raw reply [flat|nested] 20+ messages in thread
* [Intel-wired-lan] [next PATCH S40 06/13] i40e: Fix static analysis tool warning
2016-07-25 23:15 ` [Intel-wired-lan] [next PATCH S40 06/13] i40e: Fix static analysis tool warning Bimmy Pujari
@ 2016-07-25 23:51 ` Shannon Nelson
0 siblings, 0 replies; 20+ messages in thread
From: Shannon Nelson @ 2016-07-25 23:51 UTC (permalink / raw)
To: intel-wired-lan
On 07/25/2016 04:15 PM, Bimmy Pujari wrote:
> From: Dave Ertman <david.m.ertman@intel.com>
>
> This patch fixes a problem where a static analysis tool generates a warning
> for "INVARIANT_CONDITION: Expression 'enabled_tc' used in the condition
> always yields the same result."
>
> Without this patch, the driver will not pass the static analysis tool checks
> without generating warnings.
That checker is obviously seeing that i40e_get_iscsi_tc_map() is
defaulting the map to 0x1 which I believe wasn't the case when this was
first written. If that is ever changed it could now cause a bug here.
You might default enabled_tc here in i40e_pf_get_num_tc() just to be
sure there's no problem in the future.
sln
>
> This patch fixes the problem by eliminating the irrelevant check and redundant
> assignment for the value of enabled_tc.
>
> Signed-off-by: Dave Ertman <david.m.ertman@intel.com>
> Change-ID: Ia7d44cb050f507df7de333e96369d322e08bf408
> ---
> drivers/net/ethernet/intel/i40e/i40e_main.c | 2 --
> 1 file changed, 2 deletions(-)
>
> diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
> index b6f9b11..c130149 100644
> --- a/drivers/net/ethernet/intel/i40e/i40e_main.c
> +++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
> @@ -4608,8 +4608,6 @@ static u8 i40e_pf_get_num_tc(struct i40e_pf *pf)
> else
> return 1; /* Only TC0 */
>
> - /* At least have TC0 */
> - enabled_tc = (enabled_tc ? enabled_tc : 0x1);
> for (i = 0; i < I40E_MAX_TRAFFIC_CLASS; i++) {
> if (enabled_tc & BIT(i))
> num_tc++;
^ permalink raw reply [flat|nested] 20+ messages in thread
* [Intel-wired-lan] [next PATCH S40 05/13] i40e: Increase minimum number of allocated VSI
2016-07-25 23:47 ` Shannon Nelson
@ 2016-07-26 1:53 ` Abodunrin, Akeem G
0 siblings, 0 replies; 20+ messages in thread
From: Abodunrin, Akeem G @ 2016-07-26 1:53 UTC (permalink / raw)
To: intel-wired-lan
Thanks Shannon!
Sure, we might not need to mention VMDq for upstream, Linux patch - since VMDq is not supported.
Yes, original patch contains comment about 64 VFs, not sure how it got lost on the way here...
Regards,
~Akeem
> -----Original Message-----
> From: Shannon Nelson [mailto:sln at onemain.com]
> Sent: Monday, July 25, 2016 4:47 PM
> To: Pujari, Bimmy <bimmy.pujari@intel.com>; intel-wired-lan at lists.osuosl.org
> Cc: Abodunrin, Akeem G <akeem.g.abodunrin@intel.com>
> Subject: Re: [Intel-wired-lan] [next PATCH S40 05/13] i40e: Increase minimum
> number of allocated VSI
>
>
>
> On 07/25/2016 04:15 PM, Bimmy Pujari wrote:
> > From: Akeem G Abodunrin <akeem.g.abodunrin@intel.com>
> >
> > This patch increases minimum number of allocated VSIs, so as to
> > resolve failure adding VSI for VF when 64-VFs assigned to a PF. The
> > driver supports up to 128 VFs per device, users can decide to enable
> > up to 64-VFs on a single PF, especially 2 X 40 devices. In that
> > scenario, with VMDq co-existence, there would be starvation of VSIs -
> > with this patch, supported features would have enough VSIs for configuration
> now.
> >
> > Signed-off-by: Akeem G Abodunrin <akeem.g.abodunrin@intel.com>
> > Change-ID: If084f4cd823667af8fe7fdc11489c705b32039d5
> > ---
> > drivers/net/ethernet/intel/i40e/i40e.h | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/drivers/net/ethernet/intel/i40e/i40e.h
> > b/drivers/net/ethernet/intel/i40e/i40e.h
> > index 2a88291..06e1835 100644
> > --- a/drivers/net/ethernet/intel/i40e/i40e.h
> > +++ b/drivers/net/ethernet/intel/i40e/i40e.h
> > @@ -74,7 +74,7 @@
> > #define I40E_MIN_NUM_DESCRIPTORS 64
> > #define I40E_MIN_MSIX 2
> > #define I40E_DEFAULT_NUM_VMDQ_VSI 8 /* max 256 VSIs */
> > -#define I40E_MIN_VSI_ALLOC 51 /* LAN, ATR, FCOE, 32 VF, 16 VMDQ
> */
> > +#define I40E_MIN_VSI_ALLOC 83 /* LAN, ATR, FCOE, 32 VF, 16 VMDQ
> */
>
> You should update the comment here to reflect 64 VFs.
>
> Since VMDq is not really supported, perhaps you can remove those 16 from this
> calculation?
>
> sln
>
> > /* max 16 qps */
> > #define i40e_default_queues_per_vmdq(pf) \
> > (((pf)->flags & I40E_FLAG_RSS_AQ_CAPABLE) ? 4 : 1)
^ permalink raw reply [flat|nested] 20+ messages in thread
* [Intel-wired-lan] [next PATCH S40 10/13] i40e: fix lookup table when RSS disabled/enabled
2016-07-25 23:15 ` [Intel-wired-lan] [next PATCH S40 10/13] i40e: fix lookup table when RSS disabled/enabled Bimmy Pujari
@ 2016-07-26 15:48 ` Brady, Alan
2016-07-26 20:39 ` Jeff Kirsher
0 siblings, 1 reply; 20+ messages in thread
From: Brady, Alan @ 2016-07-26 15:48 UTC (permalink / raw)
To: intel-wired-lan
ACK
-----Original Message-----
From: Pujari, Bimmy
Sent: Monday, July 25, 2016 4:16 PM
To: intel-wired-lan@lists.osuosl.org
Cc: Brady, Alan <alan.brady@intel.com>
Subject: [next PATCH S40 10/13] i40e: fix lookup table when RSS disabled/enabled
From: "Alan, Brady" <alan.brady@intel.com>
This patch fixes the bug which causes RSS to continue to work after being disabled. After disabling RSS, traffic would continue to be assigned to different queues instead of falling back to a single queue. Without this patch, attempting to disable RSS would not work as expected. This patch fixes the bug by clearing the lookup table used by RSS such that all traffic is assigned to a single queue. This patch also addresses the issue of reinstating the lookup table should RSS then be re-enabled.
Signed-off-by: Alan Brady <alan.brady@intel.com>
Change-ID: Ib20c7c6a7e9f1f772bb787370f8a8c664796b141
---
drivers/net/ethernet/intel/i40e/i40e_main.c | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
index c130149..a33e902 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_main.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
@@ -8658,6 +8658,28 @@ bool i40e_set_ntuple(struct i40e_pf *pf, netdev_features_t features) }
/**
+ * i40e_clear_rss_lut - clear the rx hash lookup table
+ * @vsi: the VSI being configured
+ **/
+static void i40e_clear_rss_lut(struct i40e_vsi *vsi) {
+ struct i40e_pf *pf = vsi->back;
+ struct i40e_hw *hw = &pf->hw;
+ u16 vf_id = vsi->vf_id;
+ u8 i;
+
+ if (vsi->type == I40E_VSI_MAIN) {
+ for (i = 0; i <= I40E_PFQF_HLUT_MAX_INDEX; i++)
+ wr32(hw, I40E_PFQF_HLUT(i), 0);
+ } else if (vsi->type == I40E_VSI_SRIOV) {
+ for (i = 0; i <= I40E_VFQF_HLUT_MAX_INDEX; i++)
+ i40e_write_rx_ctl(hw, I40E_VFQF_HLUT1(i, vf_id), 0);
+ } else {
+ dev_err(&pf->pdev->dev, "Cannot set RSS LUT - invalid VSI type\n");
+ }
+}
+
+/**
* i40e_set_features - set the netdev feature flags
* @netdev: ptr to the netdev being adjusted
* @features: the feature set that the stack is suggesting @@ -8670,6 +8692,12 @@ static int i40e_set_features(struct net_device *netdev,
struct i40e_pf *pf = vsi->back;
bool need_reset;
+ if (features & NETIF_F_RXHASH && !(netdev->features & NETIF_F_RXHASH))
+ i40e_pf_config_rss(pf);
+ else if (!(features & NETIF_F_RXHASH) &&
+ netdev->features & NETIF_F_RXHASH)
+ i40e_clear_rss_lut(vsi);
+
if (features & NETIF_F_HW_VLAN_CTAG_RX)
i40e_vlan_stripping_enable(vsi);
else
--
2.4.11
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [Intel-wired-lan] [next PATCH S40 01/13] i40e: Fix a bug where a client close can be called before an open is complete
2016-07-25 23:15 ` [Intel-wired-lan] [next PATCH S40 01/13] i40e: Fix a bug where a client close can be called before an open is complete Bimmy Pujari
@ 2016-07-26 17:56 ` Jeff Kirsher
0 siblings, 0 replies; 20+ messages in thread
From: Jeff Kirsher @ 2016-07-26 17:56 UTC (permalink / raw)
To: intel-wired-lan
On Mon, 2016-07-25 at 16:15 -0700, Bimmy Pujari wrote:
> From: Anjali Singhai Jain <anjali.singhai@intel.com>
>
> The client->open call in this path was not protected with the
> client instance mutex. And hence the client->close can get initiated
> before the open completes.
>
> Signed-off-by: Anjali Singhai Jain <anjali.singhai@intel.com>
> Change-Id: I0ed60c38868dd3f44966b6ed49a063d0e5b7edf5
> ---
> ?drivers/net/ethernet/intel/i40e/i40e_client.c | 2 ++
> ?1 file changed, 2 insertions(+)
This does not apply cleanly to the current net-next tree. ?It appears that
this series was based on an old/stale version of my next-queue branch. ?So
I am dropping the series, please update/rebase your series to my current
next-queue branch and resubmit.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: This is a digitally signed message part
URL: <http://lists.osuosl.org/pipermail/intel-wired-lan/attachments/20160726/dab9ffb0/attachment.asc>
^ permalink raw reply [flat|nested] 20+ messages in thread
* [Intel-wired-lan] [next PATCH S40 10/13] i40e: fix lookup table when RSS disabled/enabled
2016-07-26 15:48 ` Brady, Alan
@ 2016-07-26 20:39 ` Jeff Kirsher
0 siblings, 0 replies; 20+ messages in thread
From: Jeff Kirsher @ 2016-07-26 20:39 UTC (permalink / raw)
To: intel-wired-lan
On Tue, 2016-07-26 at 15:48 +0000, Brady, Alan wrote:
> ACK
>
> -----Original Message-----
> From: Pujari, Bimmy?
> Sent: Monday, July 25, 2016 4:16 PM
> To: intel-wired-lan at lists.osuosl.org
> Cc: Brady, Alan <alan.brady@intel.com>
> Subject: [next PATCH S40 10/13] i40e: fix lookup table when RSS
> disabled/enabled
>
> From: "Alan, Brady" <alan.brady@intel.com>
>
> This patch fixes the bug which causes RSS to continue to work after being
> disabled.? After disabling RSS, traffic would continue to be assigned to
> different queues instead of falling back to a single queue. Without this
> patch, attempting to disable RSS would not work as expected. This patch
> fixes the bug by clearing the lookup table used by RSS such that all
> traffic is assigned to a single queue.? This patch also addresses the
> issue of reinstating? the lookup table should RSS then be re-enabled.
>
> Signed-off-by: Alan Brady <alan.brady@intel.com>
> Change-ID: Ib20c7c6a7e9f1f772bb787370f8a8c664796b141
> ---
> ?drivers/net/ethernet/intel/i40e/i40e_main.c | 28
> ++++++++++++++++++++++++++++
> ?1 file changed, 28 insertions(+)
First why are you ACK'ing your own patch, which you already Signed-off-by
on? ?Second, never top post.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: This is a digitally signed message part
URL: <http://lists.osuosl.org/pipermail/intel-wired-lan/attachments/20160726/0a26257e/attachment.asc>
^ permalink raw reply [flat|nested] 20+ messages in thread
end of thread, other threads:[~2016-07-26 20:39 UTC | newest]
Thread overview: 20+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-07-25 23:15 [Intel-wired-lan] [next PATCH S40 00/13] i40e/i40evf updates Bimmy Pujari
2016-07-25 23:15 ` [Intel-wired-lan] [next PATCH S40 01/13] i40e: Fix a bug where a client close can be called before an open is complete Bimmy Pujari
2016-07-26 17:56 ` Jeff Kirsher
2016-07-25 23:15 ` [Intel-wired-lan] [next PATCH S40 02/13] i40e/i40evf: Reset vlan filter count when resetting Bimmy Pujari
2016-07-25 23:15 ` [Intel-wired-lan] [next PATCH S40 03/13] i40e: reset RX csum error stat with other pf stats Bimmy Pujari
2016-07-25 23:15 ` [Intel-wired-lan] [next PATCH S40 04/13] i40evf: add missing rtnl_lock() around i40evf_set_interrupt_capability Bimmy Pujari
2016-07-25 23:15 ` [Intel-wired-lan] [next PATCH S40 05/13] i40e: Increase minimum number of allocated VSI Bimmy Pujari
2016-07-25 23:47 ` Shannon Nelson
2016-07-26 1:53 ` Abodunrin, Akeem G
2016-07-25 23:15 ` [Intel-wired-lan] [next PATCH S40 06/13] i40e: Fix static analysis tool warning Bimmy Pujari
2016-07-25 23:51 ` Shannon Nelson
2016-07-25 23:15 ` [Intel-wired-lan] [next PATCH S40 07/13] i40e: don't allow reduction of channels below active FD rules Bimmy Pujari
2016-07-25 23:15 ` [Intel-wired-lan] [next PATCH S40 08/13] i40e: Force register writes to mitigate sync issues with iwarp VF driver Bimmy Pujari
2016-07-25 23:15 ` [Intel-wired-lan] [next PATCH S40 09/13] i40e: Don't notify client of VF reset during VF creation Bimmy Pujari
2016-07-25 23:15 ` [Intel-wired-lan] [next PATCH S40 10/13] i40e: fix lookup table when RSS disabled/enabled Bimmy Pujari
2016-07-26 15:48 ` Brady, Alan
2016-07-26 20:39 ` Jeff Kirsher
2016-07-25 23:15 ` [Intel-wired-lan] [next PATCH S40 11/13] i40e: fix memory leak Bimmy Pujari
2016-07-25 23:15 ` [Intel-wired-lan] [next PATCH S40 12/13] i40e: Allow RSS Hash set with less than four parameters Bimmy Pujari
2016-07-25 23:15 ` [Intel-wired-lan] [next PATCH S40 13/13] i40e/i40evf-Bump version from 1.6.11 to 1.6.12 Bimmy Pujari
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.