Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 958200ad authored by Jason Gunthorpe's avatar Jason Gunthorpe
Browse files

RDMA/hfi1: Move grh_required into update_sm_ah



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: default avatarJason Gunthorpe <jgg@mellanox.com>
Signed-off-by: default avatarArtemy Kovalyov <artemyko@mellanox.com>
Signed-off-by: default avatarLeon Romanovsky <leonro@mellanox.com>
parent 2f944c0f
Loading
Loading
Loading
Loading
+18 −10
Original line number Diff line number Diff line
@@ -2300,17 +2300,25 @@ 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) {

	/*
	 * 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);
		} else {

	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);
	if (IS_ERR(new_ah->ah)) {
+0 −9
Original line number Diff line number Diff line
@@ -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;
}