Message ID | 20170521161113.20772-1-leon@kernel.org (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
On Sun, 2017-05-21 at 19:11 +0300, Leon Romanovsky wrote: > The cited patch added a type field to structures ib_ah and > rdma_ah_attr. > > Function mlx4_ib_query_ah() builds an rdma_ah_attr structure from the > data in an mlx4_ib_ah structure (which contains both an ib_ah > structure > and an address vector). > > For mlx4_ib_query_ah() to work properly, the type field in the > contained > ib_ah structure must be set correctly. > > In the outgoing MAD tunneling flow, procedure mlx4_ib_multiplex_mad() > paravirtualizes a MAD received from a slave and sends the processed > mad out over the wire. During this processing, it populates an > mlx4_ib_ah structure and calls mlx4_ib_query_ah(). > > The cited commit overlooked setting the type field in the contained > ib_ah structure before invoking mlx4_ib_query_ah(). As a result, the > type field remained uninitialized, and the rdma_ah_attr structure was > incorrectly built. This resulted in improperly built MADs being sent > out > over the wire. > > This patch properly initializes the type field in the contained ib_ah > structure before calling mlx4_ib_query_ah(). The rdma_ah_attr > structure > is then generated correctly. > > Fixes: 44c58487d51a ("IB/core: Define 'ib' and 'roce' rdma_ah_attr > types") > Signed-off-by: Jack Morgenstein <jackm@dev.mellanox.co.il> > Signed-off-by: Leon Romanovsky <leon@kernel.org> Thanks, applied.
diff --git a/drivers/infiniband/hw/mlx4/mad.c b/drivers/infiniband/hw/mlx4/mad.c index b4694717f6f3..21d31cb1325f 100644 --- a/drivers/infiniband/hw/mlx4/mad.c +++ b/drivers/infiniband/hw/mlx4/mad.c @@ -1578,6 +1578,7 @@ static void mlx4_ib_multiplex_mad(struct mlx4_ib_demux_pv_ctx *ctx, struct ib_wc if (port < 0) return; ah.av.ib.port_pd = cpu_to_be32(port << 24 | (be32_to_cpu(ah.av.ib.port_pd) & 0xffffff)); + ah.ibah.type = rdma_ah_find_type(&dev->ib_dev, port); mlx4_ib_query_ah(&ah.ibah, &ah_attr); if (rdma_ah_get_ah_flags(&ah_attr) & IB_AH_GRH)