]> git.openfabrics.org - ~emulex/tmp/compat-rdma/.git/commitdiff
iw_cxgb4: use wildcard mapping for getting remote addr info
authorSteve Wise <swise@opengridcomputing.com>
Thu, 7 May 2015 14:56:38 +0000 (09:56 -0500)
committerSteve Wise <swise@opengridcomputing.com>
Thu, 7 May 2015 14:56:38 +0000 (09:56 -0500)
For listening endpoints bound to the wildcard address, we need to pass
the wildcard address mapping to iwpm_get_remote_info() instead of the
mapped address of the new child connection.

Without this fix, and with iwarp port mapping enabled, each iw_cxgb4
connection that is spawned from a listening endpoint bound to the wildcard
address, will generate an annoying dmesg entry about failing to find
the remote address mapping info, and the connection state displayed in
debugfs under /sys/kernel/debug/iw_cxgb4/<pci-slot-no>/eps  will not have
the peer's address/port mapping info.  The connection still works though.

Fixes: 5b6b8fe ("RDMA/cxgb4: Report the actual address of the remote connecting peer")
Signed-off-by: Steve Wise <swise@opengridcomputing.com>
linux-next-pending/0008-iw_cxgb4-use-wildcard-mapping-for-getting-remote-info.patch [new file with mode: 0644]

diff --git a/linux-next-pending/0008-iw_cxgb4-use-wildcard-mapping-for-getting-remote-info.patch b/linux-next-pending/0008-iw_cxgb4-use-wildcard-mapping-for-getting-remote-info.patch
new file mode 100644 (file)
index 0000000..fadd55d
--- /dev/null
@@ -0,0 +1,61 @@
+iw_cxgb4: use wildcard mapping for getting remote addr info
+
+From: Steve Wise <swise@opengridcomputing.com>
+
+For listening endpoints bound to the wildcard address, we need to pass
+the wildcard address mapping to iwpm_get_remote_info() instead of the
+mapped address of the new child connection.
+
+Without this fix, and with iwarp port mapping enabled, each iw_cxgb4
+connection that is spawned from a listening endpoint bound to the wildcard
+address, will generate an annoying dmesg entry about failing to find
+the remote address mapping info, and the connection state displayed in
+debugfs under /sys/kernel/debug/iw_cxgb4/<pci-slot-no>/eps  will not have
+the peer's address/port mapping info.  The connection still works though.
+
+Fixes: 5b6b8fe ("RDMA/cxgb4: Report the actual address of the remote connecting peer")
+
+Signed-off-by: Steve Wise <swise@opengridcomputing.com>
+---
+ drivers/infiniband/hw/cxgb4/cm.c |   16 ++++++++--------
+ 1 files changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/drivers/infiniband/hw/cxgb4/cm.c b/drivers/infiniband/hw/cxgb4/cm.c
+index bb95a6c..3ad8dc7 100644
+--- a/drivers/infiniband/hw/cxgb4/cm.c
++++ b/drivers/infiniband/hw/cxgb4/cm.c
+@@ -583,18 +583,18 @@ static void c4iw_record_pm_msg(struct c4iw_ep *ep,
+               sizeof(ep->com.mapped_remote_addr));
+ }
+-static int get_remote_addr(struct c4iw_ep *ep)
++static int get_remote_addr(struct c4iw_ep *parent_ep, struct c4iw_ep *child_ep)
+ {
+       int ret;
+-      print_addr(&ep->com, __func__, "get_remote_addr");
++      print_addr(&parent_ep->com, __func__, "get_remote_addr parent_ep ");
++      print_addr(&child_ep->com, __func__, "get_remote_addr child_ep ");
+-      ret = iwpm_get_remote_info(&ep->com.mapped_local_addr,
+-                                 &ep->com.mapped_remote_addr,
+-                                 &ep->com.remote_addr, RDMA_NL_C4IW);
++      ret = iwpm_get_remote_info(&parent_ep->com.mapped_local_addr,
++                                 &child_ep->com.mapped_remote_addr,
++                                 &child_ep->com.remote_addr, RDMA_NL_C4IW);
+       if (ret)
+-              pr_info(MOD "Unable to find remote peer addr info - err %d\n",
+-                      ret);
++              PDBG("Unable to find remote peer addr info - err %d\n", ret);
+       return ret;
+ }
+@@ -2420,7 +2420,7 @@ static int pass_accept_req(struct c4iw_dev *dev, struct sk_buff *skb)
+       }
+       memcpy(&child_ep->com.remote_addr, &child_ep->com.mapped_remote_addr,
+              sizeof(child_ep->com.remote_addr));
+-      get_remote_addr(child_ep);
++      get_remote_addr(parent_ep, child_ep);
+       c4iw_get_ep(&parent_ep->com);
+       child_ep->parent_ep = parent_ep;