ralphc> There is a race in IPoIB where it rearms the CQ by calling
    ralphc> ib_req_notify_cq() followed by ib_poll_cq().  The loop can
    ralphc> call ib_poll_cq() multiple times if new packets arrive but
    ralphc> then fail to rearm the CQ properly.

I don't understand the race you're trying to fix.  Right now, the CQ
polling code is:

        ib_req_notify_cq(cq, IB_CQ_NEXT_COMP);
        do {
                n = ib_poll_cq(cq, IPOIB_NUM_WC, priv->ibwc);
                for (i = 0; i < n; ++i)
                        ipoib_ib_handle_wc(dev, priv->ibwc + i);
        } while (n == IPOIB_NUM_WC);

The call to ib_req_notify_cq() will result in an event if any entries
are added to the CQ after the call, so I don't see any way that IPoIB
can miss a CQ event.  New entries can indeed arrive and be polled
during the do { } while() loop, but the effect of that is just an
extra CQ event, which might lead to an extra interrupt and polling an
empty CQ once.

Can you give a little more detail about the problem you're fixing?

 - R.
_______________________________________________
openib-general mailing list
openib-general@openib.org
http://openib.org/mailman/listinfo/openib-general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to