diff options
author | Sean Hefty <sean.hefty@intel.com> | 2005-08-19 13:46:34 -0700 |
---|---|---|
committer | Roland Dreier <rolandd@cisco.com> | 2005-08-26 20:37:38 -0700 |
commit | b9ef520f9caf20aba8ac7cb2bbba45b52ff19d53 (patch) | |
tree | b5e81a95dc8a9a099b85af13c476bf35d49ba56c /drivers/infiniband/core/ucm.h | |
parent | 4ce059378c04b40c2e9f658b1c6a2e9078b85c7c (diff) | |
download | op-kernel-dev-b9ef520f9caf20aba8ac7cb2bbba45b52ff19d53.zip op-kernel-dev-b9ef520f9caf20aba8ac7cb2bbba45b52ff19d53.tar.gz |
[PATCH] IB: fix userspace CM deadlock
Fix deadlock condition resulting from trying to destroy a cm_id
from the context of a CM thread. The synchronization around the
ucm context structure is simplified as a result, and some simple
code cleanup is included.
Signed-off-by: Sean Hefty <sean.hefty@intel.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
Diffstat (limited to 'drivers/infiniband/core/ucm.h')
-rw-r--r-- | drivers/infiniband/core/ucm.h | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/drivers/infiniband/core/ucm.h b/drivers/infiniband/core/ucm.h index 6d36606..039e8a3 100644 --- a/drivers/infiniband/core/ucm.h +++ b/drivers/infiniband/core/ucm.h @@ -48,9 +48,7 @@ struct ib_ucm_file { struct semaphore mutex; struct file *filp; - /* - * list of pending events - */ + struct list_head ctxs; /* list of active connections */ struct list_head events; /* list of pending events */ wait_queue_head_t poll_wait; @@ -58,12 +56,11 @@ struct ib_ucm_file { struct ib_ucm_context { int id; - int ref; - int error; + wait_queue_head_t wait; + atomic_t ref; struct ib_ucm_file *file; struct ib_cm_id *cm_id; - struct semaphore mutex; struct list_head events; /* list of pending events. */ struct list_head file_list; /* member in file ctx list */ |