i40e: avoid divide by zero
authorMitch Williams <mitch.a.williams@intel.com>
Mon, 18 Dec 2017 10:15:25 +0000 (05:15 -0500)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Tue, 23 Jan 2018 19:29:19 +0000 (11:29 -0800)
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.williams@intel.com>
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/i40e/i40e_main.c

index e29d42c67fa913708c5a06a76b81915af0eb6a6c..db7dd812c1dfceadf066a3af39c1216949afc8c7 100644 (file)
@@ -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)