From: Mitch Williams <mitch.a.willi...@intel.com>

In some weird circumstances with DCB enabled, the firmware can fail to
configure the VSI, leaving us with zero traffic classes. Check for this
state when we configure RSS to avoid a panic.

Signed-off-by: Mitch Williams <mitch.a.willi...@intel.com>
Tested-by: Andrew Bowers <andrewx.bow...@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirs...@intel.com>
---
 drivers/net/ethernet/intel/i40e/i40e_main.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c 
b/drivers/net/ethernet/intel/i40e/i40e_main.c
index e29d42c67fa9..db7dd812c1df 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_main.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
@@ -10783,8 +10783,13 @@ static int i40e_pf_config_rss(struct i40e_pf *pf)
        /* Determine the RSS size of the VSI */
        if (!vsi->rss_size) {
                u16 qcount;
-
-               qcount = vsi->num_queue_pairs / vsi->tc_config.numtc;
+               /* If the firmware does something weird during VSI init, we
+                * could end up with zero TCs. Check for that to avoid
+                * divide-by-zero. It probably won't pass traffic, but it also
+                * won't panic.
+                */
+               qcount = vsi->num_queue_pairs /
+                        (vsi->tc_config.numtc ? vsi->tc_config.numtc : 1);
                vsi->rss_size = min_t(int, pf->alloc_rss_size, qcount);
        }
        if (!vsi->rss_size)
-- 
2.14.3

Reply via email to