Message ID | 1479310010.8455.197.camel@edumazet-glaptop3.roam.corp.google.com |
---|---|
State | Awaiting Upstream, archived |
Delegated to: | David Miller |
Headers | show |
On Wed, 2016-11-16 at 07:26 -0800, Eric Dumazet wrote: > From: Eric Dumazet <edumazet@google.com> > > Calling napi_hash_del() before netif_napi_del() is dangerous > if a synchronize_rcu() is not enforced before NAPI struct freeing. > > Lets leave this detail to core networking stack to get it right. > > Signed-off-by: Eric Dumazet <edumazet@google.com> > Cc: Jeff Kirsher <jeffrey.t.kirsher@intel.com> > --- > drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | 6 ------ > 1 file changed, 6 deletions(-) > > diff --git a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c > index 7eaac3234049..bf4d7efc7dbd 100644 > --- a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c > +++ b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c > @@ -2511,9 +2511,6 @@ static int ixgbevf_alloc_q_vectors(struct ixgbevf_adapter *adapter) > while (q_idx) { > q_idx--; > q_vector = adapter->q_vector[q_idx]; > -#ifdef CONFIG_NET_RX_BUSY_POLL > - napi_hash_del(&q_vector->napi); > -#endif > netif_napi_del(&q_vector->napi); > kfree(q_vector); > adapter->q_vector[q_idx] = NULL; > @@ -2537,9 +2534,6 @@ static void ixgbevf_free_q_vectors(struct ixgbevf_adapter *adapter) > struct ixgbevf_q_vector *q_vector = adapter->q_vector[q_idx]; > > adapter->q_vector[q_idx] = NULL; > -#ifdef CONFIG_NET_RX_BUSY_POLL > - napi_hash_del(&q_vector->napi); > -#endif > netif_napi_del(&q_vector->napi); > kfree(q_vector); > } > > It looks this patch was not picked up ? Thanks !
On Sat, 2016-12-03 at 07:00 -0800, Eric Dumazet wrote: > On Wed, 2016-11-16 at 07:26 -0800, Eric Dumazet wrote: > > From: Eric Dumazet <edumazet@google.com> > > > > Calling napi_hash_del() before netif_napi_del() is dangerous > > if a synchronize_rcu() is not enforced before NAPI struct freeing. > > > > Lets leave this detail to core networking stack to get it right. > > > > Signed-off-by: Eric Dumazet <edumazet@google.com> > > Cc: Jeff Kirsher <jeffrey.t.kirsher@intel.com> > > --- > > drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | 6 ------ > > 1 file changed, 6 deletions(-) > > > > diff --git a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c > > b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c > > index 7eaac3234049..bf4d7efc7dbd 100644 > > --- a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c > > +++ b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c > > @@ -2511,9 +2511,6 @@ static int ixgbevf_alloc_q_vectors(struct > > ixgbevf_adapter *adapter) > > while (q_idx) { > > q_idx--; > > q_vector = adapter->q_vector[q_idx]; > > -#ifdef CONFIG_NET_RX_BUSY_POLL > > - napi_hash_del(&q_vector->napi); > > -#endif > > netif_napi_del(&q_vector->napi); > > kfree(q_vector); > > adapter->q_vector[q_idx] = NULL; > > @@ -2537,9 +2534,6 @@ static void ixgbevf_free_q_vectors(struct > > ixgbevf_adapter *adapter) > > struct ixgbevf_q_vector *q_vector = adapter- > > >q_vector[q_idx]; > > > > adapter->q_vector[q_idx] = NULL; > > -#ifdef CONFIG_NET_RX_BUSY_POLL > > - napi_hash_del(&q_vector->napi); > > -#endif > > netif_napi_del(&q_vector->napi); > > kfree(q_vector); > > } > > > > > > It looks this patch was not picked up ? Yeah, sorry I missed it since it was not sent to intel-wired-lan mailing list. Dave I am fine if you want to pick this up for your net tree (if it is not too late).
diff --git a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c index 7eaac3234049..bf4d7efc7dbd 100644 --- a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c +++ b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c @@ -2511,9 +2511,6 @@ static int ixgbevf_alloc_q_vectors(struct ixgbevf_adapter *adapter) while (q_idx) { q_idx--; q_vector = adapter->q_vector[q_idx]; -#ifdef CONFIG_NET_RX_BUSY_POLL - napi_hash_del(&q_vector->napi); -#endif netif_napi_del(&q_vector->napi); kfree(q_vector); adapter->q_vector[q_idx] = NULL; @@ -2537,9 +2534,6 @@ static void ixgbevf_free_q_vectors(struct ixgbevf_adapter *adapter) struct ixgbevf_q_vector *q_vector = adapter->q_vector[q_idx]; adapter->q_vector[q_idx] = NULL; -#ifdef CONFIG_NET_RX_BUSY_POLL - napi_hash_del(&q_vector->napi); -#endif netif_napi_del(&q_vector->napi); kfree(q_vector); }