diff options
author | Linus Torvalds <torvalds@g5.osdl.org> | 2006-02-14 13:49:37 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-02-14 13:49:37 -0800 |
commit | f78cf0dc7b7b13d0550d1e02cf221b65969ff926 (patch) | |
tree | d2bb41e6edb5f70ccb09ed50f5cfb35eda22f844 /drivers/infiniband/core | |
parent | 4cbf8767902c578481ff3df366c77d24fe68fd26 (diff) | |
parent | 7d2babc4874825027848db04d11784070da4456d (diff) | |
download | blackbird-op-linux-f78cf0dc7b7b13d0550d1e02cf221b65969ff926.tar.gz blackbird-op-linux-f78cf0dc7b7b13d0550d1e02cf221b65969ff926.zip |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband
Diffstat (limited to 'drivers/infiniband/core')
-rw-r--r-- | drivers/infiniband/core/mad.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/drivers/infiniband/core/mad.c b/drivers/infiniband/core/mad.c index d393b504bf26..c82f47a66e48 100644 --- a/drivers/infiniband/core/mad.c +++ b/drivers/infiniband/core/mad.c @@ -665,7 +665,15 @@ static int handle_outgoing_dr_smp(struct ib_mad_agent_private *mad_agent_priv, struct ib_wc mad_wc; struct ib_send_wr *send_wr = &mad_send_wr->send_wr; - if (!smi_handle_dr_smp_send(smp, device->node_type, port_num)) { + /* + * Directed route handling starts if the initial LID routed part of + * a request or the ending LID routed part of a response is empty. + * If we are at the start of the LID routed part, don't update the + * hop_ptr or hop_cnt. See section 14.2.2, Vol 1 IB spec. + */ + if ((ib_get_smp_direction(smp) ? smp->dr_dlid : smp->dr_slid) == + IB_LID_PERMISSIVE && + !smi_handle_dr_smp_send(smp, device->node_type, port_num)) { ret = -EINVAL; printk(KERN_ERR PFX "Invalid directed route\n"); goto out; |