|
@@ -2493,24 +2493,26 @@ static int build_mlx_header(struct mlx4_ib_sqp *sqp, struct ib_ud_wr *wr,
|
|
|
sqp->ud_header.grh.flow_label =
|
|
|
ah->av.ib.sl_tclass_flowlabel & cpu_to_be32(0xfffff);
|
|
|
sqp->ud_header.grh.hop_limit = ah->av.ib.hop_limit;
|
|
|
- if (is_eth)
|
|
|
+ if (is_eth) {
|
|
|
memcpy(sqp->ud_header.grh.source_gid.raw, sgid.raw, 16);
|
|
|
- else {
|
|
|
- if (mlx4_is_mfunc(to_mdev(ib_dev)->dev)) {
|
|
|
- /* When multi-function is enabled, the ib_core gid
|
|
|
- * indexes don't necessarily match the hw ones, so
|
|
|
- * we must use our own cache */
|
|
|
- sqp->ud_header.grh.source_gid.global.subnet_prefix =
|
|
|
- to_mdev(ib_dev)->sriov.demux[sqp->qp.port - 1].
|
|
|
- subnet_prefix;
|
|
|
- sqp->ud_header.grh.source_gid.global.interface_id =
|
|
|
- to_mdev(ib_dev)->sriov.demux[sqp->qp.port - 1].
|
|
|
- guid_cache[ah->av.ib.gid_index];
|
|
|
- } else
|
|
|
- ib_get_cached_gid(ib_dev,
|
|
|
- be32_to_cpu(ah->av.ib.port_pd) >> 24,
|
|
|
- ah->av.ib.gid_index,
|
|
|
- &sqp->ud_header.grh.source_gid, NULL);
|
|
|
+ } else {
|
|
|
+ if (mlx4_is_mfunc(to_mdev(ib_dev)->dev)) {
|
|
|
+ /* When multi-function is enabled, the ib_core gid
|
|
|
+ * indexes don't necessarily match the hw ones, so
|
|
|
+ * we must use our own cache
|
|
|
+ */
|
|
|
+ sqp->ud_header.grh.source_gid.global.subnet_prefix =
|
|
|
+ to_mdev(ib_dev)->sriov.demux[sqp->qp.port - 1].
|
|
|
+ subnet_prefix;
|
|
|
+ sqp->ud_header.grh.source_gid.global.interface_id =
|
|
|
+ to_mdev(ib_dev)->sriov.demux[sqp->qp.port - 1].
|
|
|
+ guid_cache[ah->av.ib.gid_index];
|
|
|
+ } else {
|
|
|
+ ib_get_cached_gid(ib_dev,
|
|
|
+ be32_to_cpu(ah->av.ib.port_pd) >> 24,
|
|
|
+ ah->av.ib.gid_index,
|
|
|
+ &sqp->ud_header.grh.source_gid, NULL);
|
|
|
+ }
|
|
|
}
|
|
|
memcpy(sqp->ud_header.grh.destination_gid.raw,
|
|
|
ah->av.ib.dgid, 16);
|