[ofa-general] Re: [GIT PULL] please pull infiniband.git
Michael S. Tsirkin
mst at dev.mellanox.co.il
Thu Mar 29 11:57:09 PDT 2007
> Quoting Roland Dreier <rdreier at cisco.com>:
> Subject: Re: [ofa-general] Re: [GIT PULL] please pull infiniband.git
>
> > It should be guaranteed that no event handlers - completion events or async events -
> > for this QP - are in progress after QP has been destroyed or moved to reset
> > state.
> >
> > Does this make sense?
>
> No, because completion handlers are not attached to QPs. So it is
> entirely possible for CQs to generate new events because of other QPs
> and have completion handlers running at any time. You end up trying
> to say something about visibility of CQEs for the QP being destroyed
> in completion handler context, and I think it turns into a confusing
> mess.
>
> > Agreed.
> > I think the rest of ULPs are taken care of if we replace
> > qp pointer in ib_wc with qpn + qp_context pair.
> > Have you seen this patch?
> >
> > This way a ULP can stick a pointer to its own structure
> > and in polling thread, do:
> >
> > foo = wc.qp_context;
> > if (unlikely(foo->dead))
> > return;
> >
> > and to destroy the QP:
> > foo->dead = 1;
> > ib_destroy_qp(qp)
> > flush(polling thread)
> > free(foo)
>
> It makes some sense. But we hit the problem that there is no way to
> flush completion handlers right now. Which is why I can't reject the
> synchronize_irq for completion irq change -- exposing some sort of
> "sync completion handlers" API seems error-prone too.
Exactly, that's why this sync belongs in QP reset.
I get your point now.
--
MST
More information about the general
mailing list