Author: hselasky
Date: Tue Jul 17 09:33:20 2018
New Revision: 336386
URL: https://svnweb.freebsd.org/changeset/base/336386

Log:
  Honor port_num while resolving GID for IB link layer in ibcore.
  
  ah_attr contains the port number to which cm_id is bound. However, while
  searching for GID table for matching GID entry, the port number is
  ignored.
  
  This could cause the wrong GID to be used when the ah_attr is converted to
  an AH.
  
  Linux commit:
  563c4ba3bd2b8b0b21c65669ec2226b1cfa1138b
  
  MFC after:            1 week
  Sponsored by:         Mellanox Technologies

Modified:
  head/sys/ofed/drivers/infiniband/core/ib_multicast.c

Modified: head/sys/ofed/drivers/infiniband/core/ib_multicast.c
==============================================================================
--- head/sys/ofed/drivers/infiniband/core/ib_multicast.c        Tue Jul 17 
09:32:09 2018        (r336385)
+++ head/sys/ofed/drivers/infiniband/core/ib_multicast.c        Tue Jul 17 
09:33:20 2018        (r336386)
@@ -727,21 +727,19 @@ int ib_init_ah_from_mcmember(struct ib_device *device,
 {
        int ret;
        u16 gid_index;
-       u8 p;
 
-       if (rdma_protocol_roce(device, port_num)) {
-               ret = ib_find_cached_gid_by_port(device, &rec->port_gid,
-                                                gid_type, port_num,
-                                                ndev,
-                                                &gid_index);
-       } else if (rdma_protocol_ib(device, port_num)) {
-               ret = ib_find_cached_gid(device, &rec->port_gid,
-                                        IB_GID_TYPE_IB, NULL, &p,
-                                        &gid_index);
-       } else {
-               ret = -EINVAL;
-       }
+       /* GID table is not based on the netdevice for IB link layer,
+        * so ignore ndev during search.
+        */
+       if (rdma_protocol_ib(device, port_num))
+               ndev = NULL;
+       else if (!rdma_protocol_roce(device, port_num))
+               return -EINVAL;
 
+       ret = ib_find_cached_gid_by_port(device, &rec->port_gid,
+                                        gid_type, port_num,
+                                        ndev,
+                                        &gid_index);
        if (ret)
                return ret;
 
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to