On Tue, Jul 27, 2010 at 6:50 PM, Roland Dreier <rdre...@cisco.com> wrote: > [ ... ] > > From Documentation/infiniband/core_locking.txt: > > The low-level driver is responsible for ensuring that multiple > completion event handlers for the same CQ are not called > simultaneously. The driver must guarantee that only one CQ event > handler for a given CQ is running at a time. In other words, the > following situation is not allowed: > > CPU1 CPU2 > > low-level driver -> > consumer CQ event callback: > /* ... */ > ib_req_notify_cq(cq, ...); > low-level driver -> > /* ... */ consumer CQ event callback: > /* ... */ > return from CQ event handler > > mean that the problem you are complaining about doesn't actually exist?
As far as I know it is not possible for a HCA to tell whether or not a CPU has finished executing the interrupt it triggered. So it is not possible for the HCA to implement the above requirement by delaying the generation of a new interrupt -- implementing the above requirement is only possible in the low-level driver. A low-level driver could e.g. postpone notification reenabling until the end of the interrupt handler or it could use a spinlock to prevent simultaneous execution of notification handlers. I have inspected the source code of one particular low-level driver but could not find any such provisions. Did I overlook something ? Bart. -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html