diff options
author | Eran Ben Elisha <eranbe@mellanox.com> | 2016-11-10 04:31:01 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2017-01-26 02:24:35 -0500 |
commit | 656a7d6575336348000bcf42e9827b3b4ff95102 (patch) | |
tree | 1e38783a63f9c78a08926c64f1b292401711cecd /drivers/infiniband | |
parent | 661600ff77f142b26338eb795e5694a17a6df699 (diff) |
IB/mlx4: Check if GRH is available before using it
commit bf08e884bfd5be068fd2ccf2bc450f085d8dd853 upstream.
Before reading GRH attributes, need to make sure AH contains GRH,
and in addition, initialize GID type.
Fixes: dbf727de7440 ('IB/core: Use GID table in AH creation and dmac resolution')
Signed-off-by: Eran Ben Elisha <eranbe@mellanox.com>
Signed-off-by: Daniel Jurgens <danielj@mellanox.com>
Reviewed-by: Mark Bloch <markb@mellanox.com>
Signed-off-by: Leon Romanovsky <leon@kernel.org>
Signed-off-by: Doug Ledford <dledford@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/infiniband')
-rw-r--r-- | drivers/infiniband/hw/mlx4/qp.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/infiniband/hw/mlx4/qp.c b/drivers/infiniband/hw/mlx4/qp.c index 69739473a39c..c22454383976 100644 --- a/drivers/infiniband/hw/mlx4/qp.c +++ b/drivers/infiniband/hw/mlx4/qp.c | |||
@@ -1765,14 +1765,14 @@ static int __mlx4_ib_modify_qp(struct ib_qp *ibqp, | |||
1765 | u8 port_num = mlx4_is_bonded(to_mdev(ibqp->device)->dev) ? 1 : | 1765 | u8 port_num = mlx4_is_bonded(to_mdev(ibqp->device)->dev) ? 1 : |
1766 | attr_mask & IB_QP_PORT ? attr->port_num : qp->port; | 1766 | attr_mask & IB_QP_PORT ? attr->port_num : qp->port; |
1767 | union ib_gid gid; | 1767 | union ib_gid gid; |
1768 | struct ib_gid_attr gid_attr; | 1768 | struct ib_gid_attr gid_attr = {.gid_type = IB_GID_TYPE_IB}; |
1769 | u16 vlan = 0xffff; | 1769 | u16 vlan = 0xffff; |
1770 | u8 smac[ETH_ALEN]; | 1770 | u8 smac[ETH_ALEN]; |
1771 | int status = 0; | 1771 | int status = 0; |
1772 | int is_eth = rdma_cap_eth_ah(&dev->ib_dev, port_num) && | 1772 | int is_eth = rdma_cap_eth_ah(&dev->ib_dev, port_num) && |
1773 | attr->ah_attr.ah_flags & IB_AH_GRH; | 1773 | attr->ah_attr.ah_flags & IB_AH_GRH; |
1774 | 1774 | ||
1775 | if (is_eth) { | 1775 | if (is_eth && attr->ah_attr.ah_flags & IB_AH_GRH) { |
1776 | int index = attr->ah_attr.grh.sgid_index; | 1776 | int index = attr->ah_attr.grh.sgid_index; |
1777 | 1777 | ||
1778 | status = ib_get_cached_gid(ibqp->device, port_num, | 1778 | status = ib_get_cached_gid(ibqp->device, port_num, |