On Wed, Jul 07, 2021 at 01:15:00PM -0700, Chris Cappuccio wrote:
> Alexandr Nedvedicky [alexandr.nedvedi...@oracle.com] wrote:
> > diff --git a/sys/net/if_tpmr.c b/sys/net/if_tpmr.c
> > index f6eb99f347c..4ffa5b18293 100644
> > @@ -725,10 +759,9 @@ tpmr_p_dtor(struct tpmr_softc *sc, struct tpmr_port 
> > *p, const char *op)
> >     if_detachhook_del(ifp0, &p->p_dtask);
> >     if_linkstatehook_del(ifp0, &p->p_ltask);
> >  
> > -   smr_barrier();
> > +   tpmr_p_rele(p);
> >  
> > -   if_put(ifp0);
> > -   free(p, M_DEVBUF, sizeof(*p));
> > +   smr_barrier();
> >  
> >     if (ifp->if_link_state != LINK_STATE_DOWN) {
> >             ifp->if_link_state = LINK_STATE_DOWN;
> 
> The order is changing here, it was smr_barrier and then the
> equivalent of tpmr_p_rele, now it is tpmr_p_rele first,
> smr_barrier second, is that change intentional ?

    yes, the change was prompted by test scenario created
    by Hrvoje. The port destroy operation blocked indefinitely
    on smr_barrier(). After swapping the lines problem was gone.

thanks and
regards
sashan

Reply via email to