RDMA/cma: Create cm id even when IB port is down
authorYossi Etigin <root@voltaire.com>
Wed, 8 Apr 2009 20:42:33 +0000 (13:42 -0700)
committerRoland Dreier <rolandd@cisco.com>
Wed, 8 Apr 2009 20:42:33 +0000 (13:42 -0700)
commitd2ca39f262806aa2f035f680a14aa55ff9e3d889
treee58c94b8c6e02b72565daff9c19d156ac0f02655
parent84adeee9aaa0d81712de1e0ea74caed3398e4a1d
RDMA/cma: Create cm id even when IB port is down

When doing rdma_resolve_addr(), if the relevant IB port is down, the
function fails and the cm_id is not bound to the correct device.
Therefore, application does not have a device handle and cannot wait
for the port to become active.  The function fails because the
underlying IPoIB interface is not joined to the broadcast group and
therefore the SA does not have a multicast record to take a Q_Key
from.

The fix is to use lazy Q_Key resolution - cma_set_qkey() will set
id_priv->qkey if it was not set, and will be called just before the
Q_Key is really required.

Signed-off-by: Yossi Etigin <yosefe@voltaire.com>
Acked-by: Sean Hefty <sean.hefty@intel.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
drivers/infiniband/core/cma.c