[IBAL] Fix ND connection establishment races.
authorleonidk <leonidk@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Sun, 5 Apr 2009 15:24:20 +0000 (15:24 +0000)
committerleonidk <leonidk@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Sun, 5 Apr 2009 15:24:20 +0000 (15:24 +0000)
commitd1f677024a89dbb73ce78b2bf587cd05c426cba5
tree0550b2cdf50b9287ad4cdcb7253ec4accc9b453f
parent44d06191fa9eacadad224e2abea1e5f851c1f603
[IBAL] Fix ND connection establishment races.

This patch fixes issues with connection establishment for NetworkDirect.  The root cause of the issue is 'too many cooks' - CIDs exposed to user-mode should not be destroyed in the kernel code without explicit request from the user.  Otherwise, the CID can get recycled in the kernel for the same process and improperly freed when the stale CID is released by the application (multiple connection objects in the app have the same CID.)

Unfortunately, the fix is not simple.  The QP references the CEP, so QP destruction frees the CEP, even if there's a reference to that CEP left in the application.  Removing the CEP reference form the QP solves this problem, but deadlocks the app if it destroys the QP before the CEP, since the QP is used to queue connection-related IRPs, and the CEP uses the QP as its context and so holds a reference on it.

This patch does the following:
- Remove CEP reference for ND related QP.
- Remove ND connection related IRP queue from QP.
- Remove ND IRP handling from CEP manager.
- Add a function to CEP manager to reference the context associated with a CEP if the context is non-NULL.
- Move ND connection related IRP management into al_ndi_cm.c, in nd_csq_t structure.

As part of testing, I needed to add NotifyDisconnect functionality, so this is also included in the patch.

Note that the patch depends on Sean's previous patch to change kal_cep_destroy to allow silently dropping a REQ.  I did not remove Sean's previous changes from this patch, so they are duplicated here.  This allows the patch to be applied and build.

-Fab

Signed-off-by: Fab Tillier <ftillier@microsoft.com>
git-svn-id: svn://openib.tc.cornell.edu/gen1/trunk@2079 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86
12 files changed:
core/al/al_cm_cep.h
core/al/al_dev.h
core/al/al_qp.c
core/al/al_qp.h
core/al/kernel/al_cm.c
core/al/kernel/al_cm_cep.c
core/al/kernel/al_ndi_cm.c
core/al/kernel/al_ndi_cm.h
core/al/kernel/al_proxy_cep.c
core/al/kernel/al_proxy_ndi.c
core/al/user/ual_cm_cep.c
inc/iba/ib_al_ioctl.h