I think it has to stay the way I wrote it. Your version:
+ if (empty) {
+ ib_req_notify_cq(priv->cq, IB_CQ_NEXT_COMP,
&missed_event);
+ if (unlikely(missed_event) && netif_rx_reschedule(dev,
0))
+ goto repoll;
+ netif_rx_complete(dev);
+
+ return 0;
+ }
has a race: suppose missed_event is 0 but an event _is_ generated
right before the call to netif_rx_complete(). Then the interrupt
handler might run before the call to netif_rx_complete(), try to
schedule the NAPI poll, but end up doing nothing because the poll
routine is still running. Then the poll routine will call
netif_rx_complete() and return 0, so it won't get called again ever
(because the CQ event has already fired). And so the interface will
hang and never make any more progress.
I would really like to understand why ehca does worse with NAPI. In
my tests both mthca and ipath exhibit various degrees of improvement
depending on the test -- but I've never seen performance get worse.
This is the main thing holding back merging NAPI.
Does the NAPI patch help mthca on pSeries? I wonder if it's not ehca,
but rather that there's some ppc64 quirk that makes NAPI a lot more
expensive.
- R.
_______________________________________________
openib-general mailing list
[email protected]
http://openib.org/mailman/listinfo/openib-general
To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general