diff options
author | Moni Shoua <monis@mellanox.com> | 2013-12-12 11:03:14 -0500 |
---|---|---|
committer | Roland Dreier <roland@purestorage.com> | 2014-01-18 17:12:53 -0500 |
commit | 297e0dad720664dad44baa2cdd13f871979fb58c (patch) | |
tree | 2c14a33b5fcabd51e41335884896b5209db29de2 /drivers/infiniband/hw/mlx4/cq.c | |
parent | d487ee77740ccf79d7dc1935d4daa77887283028 (diff) |
IB/mlx4: Handle Ethernet L2 parameters for IP based GID addressing
IP based RoCE gids don't store Ethernet L2 parameters, MAC and VLAN.
Therefore, we need to extract them from the CQE and place them in
struct ib_wc (to be used for cases were they were taken from the gid).
Also, when modifying a QP or building address handle, instead of
parsing the dgid to get the MAC and VLAN, take them from the address
handle attributes.
Signed-off-by: Moni Shoua <monis@mellanox.com>
Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com>
Signed-off-by: Roland Dreier <roland@purestorage.com>
Diffstat (limited to 'drivers/infiniband/hw/mlx4/cq.c')
-rw-r--r-- | drivers/infiniband/hw/mlx4/cq.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/infiniband/hw/mlx4/cq.c b/drivers/infiniband/hw/mlx4/cq.c index 66dbf8062374..cc40f08ca8f1 100644 --- a/drivers/infiniband/hw/mlx4/cq.c +++ b/drivers/infiniband/hw/mlx4/cq.c | |||
@@ -798,6 +798,15 @@ repoll: | |||
798 | wc->sl = be16_to_cpu(cqe->sl_vid) >> 13; | 798 | wc->sl = be16_to_cpu(cqe->sl_vid) >> 13; |
799 | else | 799 | else |
800 | wc->sl = be16_to_cpu(cqe->sl_vid) >> 12; | 800 | wc->sl = be16_to_cpu(cqe->sl_vid) >> 12; |
801 | if (be32_to_cpu(cqe->vlan_my_qpn) & MLX4_CQE_VLAN_PRESENT_MASK) { | ||
802 | wc->vlan_id = be16_to_cpu(cqe->sl_vid) & | ||
803 | MLX4_CQE_VID_MASK; | ||
804 | } else { | ||
805 | wc->vlan_id = 0xffff; | ||
806 | } | ||
807 | wc->wc_flags |= IB_WC_WITH_VLAN; | ||
808 | memcpy(wc->smac, cqe->smac, ETH_ALEN); | ||
809 | wc->wc_flags |= IB_WC_WITH_SMAC; | ||
801 | } | 810 | } |
802 | 811 | ||
803 | return 0; | 812 | return 0; |