Message ID | HK0PR01MB21630071FC7DAA5B3189A40EADD20@HK0PR01MB2163.apcprd01.prod.exchangelabs.com |
---|---|
State | Accepted |
Delegated to: | Jeff Kirsher |
Headers | show |
Series | intel: ice: Do not enable NAPI on q_vectors that have no rings | expand |
On Thu, 2018-11-29 at 01:54 +0000, Yang Xiao wrote: > From: Young Xiao <YangX92@hotmail.com> > > If ice driver has q_vectors w/ active NAPI that has no rings, > then this will result in a divide by zero error. To correct it > I am updating the driver code so that we only support NAPI on > q_vectors that have 1 or more rings allocated to them. > > See commit 13a8cd191a2b ("i40e: Do not enable NAPI on q_vectors > that have no rings") for detail. > > Signed-off-by: Young Xiao <YangX92@hotmail.com> > --- > drivers/net/ethernet/intel/ice/ice_main.c | 16 ++++++++++++---- > 1 file changed, 12 insertions(+), 4 deletions(-) > > diff --git a/drivers/net/ethernet/intel/ice/ice_main.c > b/drivers/net/ethernet/intel/ice/ice_main.c > index 333312a..9450004 100644 > --- a/drivers/net/ethernet/intel/ice/ice_main.c > +++ b/drivers/net/ethernet/intel/ice/ice_main.c > @@ -2563,8 +2563,12 @@ static void ice_napi_enable_all(struct ice_vsi > *vsi) > if (!vsi->netdev) > return; > > - for (q_idx = 0; q_idx < vsi->num_q_vectors; q_idx++) > - napi_enable(&vsi->q_vectors[q_idx]->napi); > + for (q_idx = 0; q_idx < vsi->num_q_vectors; q_idx++) { > + struct ice_q_vector *q_vector = vsi- > >q_vectors[q_idx]; > + > + if (q_vector->rx.ring || q_vector->tx.ring) > + napi_enable(&q_vector->napi); > + } > } > > /** > @@ -2931,8 +2935,12 @@ static void ice_napi_disable_all(struct > ice_vsi *vsi) > if (!vsi->netdev) > return; > > - for (q_idx = 0; q_idx < vsi->num_q_vectors; q_idx++) > - napi_disable(&vsi->q_vectors[q_idx]->napi); > + for (q_idx = 0; q_idx < vsi->num_q_vectors; q_idx++) { > + struct ice_q_vector *q_vector = vsi- > >q_vectors[q_idx]; > + > + if (q_vector->rx.ring || q_vector->tx.ring) > + napi_disable(&q_vector->napi); > + } > } > > /** Acked-by: Anirudh Venkataramanan <anirudh.venkataramanan@intel.com> Thanks for the patch, Yang! - Ani
> -----Original Message----- > From: Intel-wired-lan [mailto:intel-wired-lan-bounces@osuosl.org] On > Behalf Of Yang Xiao > Sent: Wednesday, November 28, 2018 5:54 PM > To: Kirsher, Jeffrey T <jeffrey.t.kirsher@intel.com>; davem@davemloft.net > Cc: netdev@vger.kernel.org; intel-wired-lan@lists.osuosl.org; Yang Xiao > <YangX92@hotmail.com> > Subject: [Intel-wired-lan] [PATCH] intel: ice: Do not enable NAPI on > q_vectors that have no rings > > From: Young Xiao <YangX92@hotmail.com> > > If ice driver has q_vectors w/ active NAPI that has no rings, then this will > result in a divide by zero error. To correct it I am updating the driver code so > that we only support NAPI on q_vectors that have 1 or more rings allocated > to them. > > See commit 13a8cd191a2b ("i40e: Do not enable NAPI on q_vectors that have > no rings") for detail. > > Signed-off-by: Young Xiao <YangX92@hotmail.com> > --- > drivers/net/ethernet/intel/ice/ice_main.c | 16 ++++++++++++---- > 1 file changed, 12 insertions(+), 4 deletions(-) Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
diff --git a/drivers/net/ethernet/intel/ice/ice_main.c b/drivers/net/ethernet/intel/ice/ice_main.c index 333312a..9450004 100644 --- a/drivers/net/ethernet/intel/ice/ice_main.c +++ b/drivers/net/ethernet/intel/ice/ice_main.c @@ -2563,8 +2563,12 @@ static void ice_napi_enable_all(struct ice_vsi *vsi) if (!vsi->netdev) return; - for (q_idx = 0; q_idx < vsi->num_q_vectors; q_idx++) - napi_enable(&vsi->q_vectors[q_idx]->napi); + for (q_idx = 0; q_idx < vsi->num_q_vectors; q_idx++) { + struct ice_q_vector *q_vector = vsi->q_vectors[q_idx]; + + if (q_vector->rx.ring || q_vector->tx.ring) + napi_enable(&q_vector->napi); + } } /** @@ -2931,8 +2935,12 @@ static void ice_napi_disable_all(struct ice_vsi *vsi) if (!vsi->netdev) return; - for (q_idx = 0; q_idx < vsi->num_q_vectors; q_idx++) - napi_disable(&vsi->q_vectors[q_idx]->napi); + for (q_idx = 0; q_idx < vsi->num_q_vectors; q_idx++) { + struct ice_q_vector *q_vector = vsi->q_vectors[q_idx]; + + if (q_vector->rx.ring || q_vector->tx.ring) + napi_disable(&q_vector->napi); + } } /**