[openib-general] [PATCH] IB/ipoib: NAPI
Rimmer, Todd
trimmer at silverstorm.com
Mon Sep 25 12:11:24 PDT 2006
> From: Roland Dreier [mailto:rdreier at cisco.com]
> Sent: Monday, September 25, 2006 2:55 PM
> To: Rimmer, Todd
> Cc: Michael S. Tsirkin; openib-general at openib.org
> Subject: Re: [openib-general] [PATCH] IB/ipoib: NAPI
>
> > What were your thoughts on how to handle this part of Eli's
proposed
> > code:
> > ib_req_notify_cq(cq, IB_CQ_NEXT_COMP);
> > /* TODO we need peek_cq here for hw devices that
> > could would not generate interrupts for completions
> > arriving between end of polling till request notify */
> >
> > return 0;
> >
> > On a non-Mellanox HCA, if the CQ is not empty here, isn't this
required
> > to poll it til empty and process all the CQEs (otherwise we may not
get
> > another interrupt). If instead we return 1 from the dev->poll
routine
> > here, we could be scheduled for a future poll and a future
interrupt
> > (which might be bad).
>
> That's exactly where we need peek CQ. We can't repoll the CQ, because
> netif_rx_complete() has already been called, so the poll routine might
> already be running on another CPU. The only thing I can see to do is
> peek in the CQ, and if it's not empty, then go through the whole
> netif_rx_reschedule() song and dance.
>
> - R.
I agree. This would also mean the ipoib_warn in ipoib_ib_completion
would go away (would be a valid situation).
I'm going to keep thinking about this, seems like we can't call
req_notify until after netif_rx_complete, otherwise we have a different
race. That leads to the req_notify and peek approach.
It's a shame, because for all other ULPs, the poll_and_notify approach
works well.
I too would prefer not to see dual algorithms and a device flag as it
could quickly lead to a lot of redundant code.
Todd Rimmer
More information about the general
mailing list