Commit a0c1b2a3 authored by Eli Cohen's avatar Eli Cohen Committed by Doug Ledford

IB/core: Support accessing SA in virtualized environment

Per the ongoing standardisation process, when virtual HCAs are present
in a network, traffic is routed based on a destination GID. In order to
access the SA we use the well known SA GID.

We also add a GRH required boolean field to the port attributes which is
used to report to the verbs consumer whether this port is connected to a
virtual network. We use this field to realize whether we need to create
an address vector with GRH to access the subnet administrator. We clear
the port attributes struct before calling the hardware driver to make
sure the default remains that GRH is not required.
Signed-off-by: default avatarEli Cohen <eli@mellanox.com>
Reviewed-by: default avatarOr Gerlitz <ogerlitz@mellanox.com>
Signed-off-by: default avatarDoug Ledford <dledford@redhat.com>
parent fad61ad4
...@@ -885,6 +885,11 @@ static void update_sm_ah(struct work_struct *work) ...@@ -885,6 +885,11 @@ static void update_sm_ah(struct work_struct *work)
ah_attr.dlid = port_attr.sm_lid; ah_attr.dlid = port_attr.sm_lid;
ah_attr.sl = port_attr.sm_sl; ah_attr.sl = port_attr.sm_sl;
ah_attr.port_num = port->port_num; ah_attr.port_num = port->port_num;
if (port_attr.grh_required) {
ah_attr.ah_flags = IB_AH_GRH;
ah_attr.grh.dgid.global.subnet_prefix = cpu_to_be64(port_attr.subnet_prefix);
ah_attr.grh.dgid.global.interface_id = cpu_to_be64(IB_SA_WELL_KNOWN_GUID);
}
new_ah->ah = ib_create_ah(port->agent->qp->pd, &ah_attr); new_ah->ah = ib_create_ah(port->agent->qp->pd, &ah_attr);
if (IS_ERR(new_ah->ah)) { if (IS_ERR(new_ah->ah)) {
......
...@@ -97,6 +97,11 @@ enum rdma_node_type { ...@@ -97,6 +97,11 @@ enum rdma_node_type {
RDMA_NODE_USNIC_UDP, RDMA_NODE_USNIC_UDP,
}; };
enum {
/* set the local administered indication */
IB_SA_WELL_KNOWN_GUID = BIT_ULL(57) | 2,
};
enum rdma_transport_type { enum rdma_transport_type {
RDMA_TRANSPORT_IB, RDMA_TRANSPORT_IB,
RDMA_TRANSPORT_IWARP, RDMA_TRANSPORT_IWARP,
...@@ -510,6 +515,7 @@ struct ib_port_attr { ...@@ -510,6 +515,7 @@ struct ib_port_attr {
u8 active_width; u8 active_width;
u8 active_speed; u8 active_speed;
u8 phys_state; u8 phys_state;
bool grh_required;
}; };
enum ib_device_modify_flags { enum ib_device_modify_flags {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment