]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
RDMA/hfi1: Move grh_required into update_sm_ah
authorJason Gunthorpe <jgg@mellanox.com>
Wed, 4 Jul 2018 12:57:49 +0000 (15:57 +0300)
committerJason Gunthorpe <jgg@mellanox.com>
Tue, 10 Jul 2018 17:13:04 +0000 (11:13 -0600)
grh_required is intended to be a global setting where all AV's will
require a GRH, not just the sm_lid. Move the special logic to the creation
of the SM AH.

Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
Signed-off-by: Artemy Kovalyov <artemyko@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
drivers/infiniband/core/sa_query.c
drivers/infiniband/hw/hfi1/verbs.c

index f269e74a44803df8064e7ebd3c9ecaab7dcc3e94..fdfdbb2bea7a28422771b8f1db9916b068fb9673 100644 (file)
@@ -2300,16 +2300,24 @@ static void update_sm_ah(struct work_struct *work)
        rdma_ah_set_dlid(&ah_attr, port_attr.sm_lid);
        rdma_ah_set_sl(&ah_attr, port_attr.sm_sl);
        rdma_ah_set_port_num(&ah_attr, port->port_num);
-       if (port_attr.grh_required) {
-               if (ah_attr.type == RDMA_AH_ATTR_TYPE_OPA) {
-                       rdma_ah_set_make_grd(&ah_attr, true);
-               } else {
-                       rdma_ah_set_ah_flags(&ah_attr, IB_AH_GRH);
-                       rdma_ah_set_subnet_prefix(&ah_attr,
-                                                 cpu_to_be64(port_attr.subnet_prefix));
-                       rdma_ah_set_interface_id(&ah_attr,
-                                                cpu_to_be64(IB_SA_WELL_KNOWN_GUID));
-               }
+
+       /*
+        * The OPA sm_lid of 0xFFFF needs special handling so that it can be
+        * differentiated from a permissive LID of 0xFFFF.  We set the
+        * grh_required flag here so the SA can program the DGID in the
+        * address handle appropriately
+        */
+       if (ah_attr.type == RDMA_AH_ATTR_TYPE_OPA &&
+           (port_attr.grh_required ||
+            port_attr.sm_lid == be16_to_cpu(IB_LID_PERMISSIVE)))
+               rdma_ah_set_make_grd(&ah_attr, true);
+
+       if (ah_attr.type == RDMA_AH_ATTR_TYPE_IB && port_attr.grh_required) {
+               rdma_ah_set_ah_flags(&ah_attr, IB_AH_GRH);
+               rdma_ah_set_subnet_prefix(&ah_attr,
+                                         cpu_to_be64(port_attr.subnet_prefix));
+               rdma_ah_set_interface_id(&ah_attr,
+                                        cpu_to_be64(IB_SA_WELL_KNOWN_GUID));
        }
 
        new_ah->ah = rdma_create_ah(port->agent->qp->pd, &ah_attr);
index 5cef1224fa9c3d4c5619c2fe4836ef40b63e1f9c..2b07a5667ec8ca0e58006895b23940f838b86293 100644 (file)
@@ -1498,15 +1498,6 @@ static int query_port(struct rvt_dev_info *rdi, u8 port_num,
        props->active_mtu = !valid_ib_mtu(ppd->ibmtu) ? props->max_mtu :
                mtu_to_enum(ppd->ibmtu, IB_MTU_4096);
 
-       /*
-        * sm_lid of 0xFFFF needs special handling so that it can
-        * be differentiated from a permissve LID of 0xFFFF.
-        * We set the grh_required flag here so the SA can program
-        * the DGID in the address handle appropriately
-        */
-       if (props->sm_lid == be16_to_cpu(IB_LID_PERMISSIVE))
-               props->grh_required = true;
-
        return 0;
 }