On Nov 26, 2014, at 2:25 PM, Alex Wang <al...@nicira.com> wrote:

> Yeah,
> 
> If we take a ref count, then, there is possibility that threads like 
> 'monitor' 
> thread can take a reference when main thread is deleting the 'port'
> => delay the netdev_close
> => if main thread want to immediately recreate the port, it will fail...
> 
> So, it is most safe to just acquire the lock here,
> 
> Does this make sense?
> 

Yes, thanks Alex.

  Jarno

> Thanks,
> Alex Wang,
> 
> On Wed, Nov 26, 2014 at 1:43 PM, Jarno Rajahalme <jrajaha...@nicira.com> 
> wrote:
> Alex,
> 
> Did you consider simply taking a reference instead of the mutex? pros/cons?
> 
>   Jarno
> 
> On Nov 25, 2014, at 4:01 PM, Alex Wang <al...@nicira.com> wrote:
> 
> > On current master, the 'struct dp_netdev_port' is destroyed
> > immediately when the ref count reaches 0.  However, non-pmd
> > threads calling the dpif_netdev_execute() for sending packets
> > could hold pointer to 'port' that is not ref-counted.  Thusly
> > those threads could possibly access freed memory when the port
> > is deleted.
> >
> > To fix this bug, this commit makes non-pmd threads acquiring
> > the 'port_mutex' before doing the actual execution in
> > dpif_netdev_execute().
> >
> > Signed-off-by: Alex Wang <al...@nicira.com>
> > ---
> > lib/dpif-netdev.c |    2 ++
> > 1 file changed, 2 insertions(+)
> >
> > diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
> > index ea87023..5233130 100644
> > --- a/lib/dpif-netdev.c
> > +++ b/lib/dpif-netdev.c
> > @@ -2029,10 +2029,12 @@ dpif_netdev_execute(struct dpif *dpif, struct 
> > dpif_execute *execute)
> >      * the 'non_pmd_mutex'. */
> >     if (pmd->core_id == NON_PMD_CORE_ID) {
> >         ovs_mutex_lock(&dp->non_pmd_mutex);
> > +        ovs_mutex_lock(&dp->port_mutex);
> >     }
> >     dp_netdev_execute_actions(pmd, &pp, 1, false, execute->actions,
> >                               execute->actions_len);
> >     if (pmd->core_id == NON_PMD_CORE_ID) {
> > +        ovs_mutex_unlock(&dp->port_mutex);
> >         ovs_mutex_unlock(&dp->non_pmd_mutex);
> >     }
> >
> > --
> > 1.7.9.5
> >
> > _______________________________________________
> > dev mailing list
> > dev@openvswitch.org
> > http://openvswitch.org/mailman/listinfo/dev
> 
> 

_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to