mlx4 fixes for 4.9
Subsystems (2)
cover mlx4 fixes for 4.9
Hi Doug,
Please find below second version of fixes for mlx4 driver.
This patchset was generated against v4.9-rc3.
Available in the "topic/mlx4-fixes-4.9" topic branch of this git repo:git://git.kernel.org/pub/scm/linux/kernel/git/leon/linux-rdma.git
Or for browsing:
https://git.kernel.org/cgit/linux/kernel/git/leon/linux-rdma.git/log/?h=topic/mlx4-fixes-4.9
Changes v0 -> v1:
Patch 1:
* No change
Patch 2:
* Add Yuval's ROB tag
Patch 3:
* Remove function name from title
Patch 4:
* No change
Patch 5:
* Use the port subnet prefix instead of default
Patch 6:
* Add Yuval's ROB tag
Patch 7:
* No change
Patch 8:
* Remove function name from title
* Reword commit message
Patch 9:
* No change
Thanks,
Daniel and Leon.
Daniel Jurgens (1):
IB/mlx4: Check gid_index return value
Eran Ben Elisha (2):
IB/mlx4: Fail to allocate NET_IF QPs when DMFS for IPoIB in
unavailable
IB/mlx4: Check if GRH is available before using it in modify QP
Jack Morgenstein (1):
IB/mlx4: Handle well-known-gid in mad_demux processing
Maor Gottlieb (2):
IB/mlx4: Set traffic class in AH
IB/mlx4: Put non zero value in max_ah device attribute
Matan Barak (1):
IB/mlx4: Fix create CQ error flow
Moni Shoua (1):
IB/mlx4: Handle IPv4 header when demultiplexing MAD
Saeed Mahameed (1):
IB/mlx4: Fix port query for 56Gb Ethernet links
drivers/infiniband/core/verbs.c | 16 +++++++------ drivers/infiniband/hw/mlx4/ah.c | 11 ++++++--- drivers/infiniband/hw/mlx4/cq.c | 5 +++- drivers/infiniband/hw/mlx4/mad.c | 49 +++++++++++++++++++++++++++++++++------ drivers/infiniband/hw/mlx4/main.c | 30 +++++++++++++++--------- drivers/infiniband/hw/mlx4/qp.c | 4 ++-- include/rdma/ib_verbs.h | 19 +++++++++++++++ 7 files changed, 103 insertions(+), 31 deletions(-)
--
2.7.4
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 1478770261-5775-1-git-send-email-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org
PATCH 1/9 IB/mlx4: Set traffic class in AH
From: Maor Gottlieb <maorg-VPRAkNaXOzVWk0Htik3J/[email protected]>
Set traffic class within sl_tclass_flowlabel when create iboe AH. Without this the TOS value will be empty when running VLAN tagged traffic, because the TOS value is taken from the traffic class in the address handle attributes.
--- drivers/infiniband/hw/mlx4/ah.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
drivers/infiniband/hw/mlx4/ah.c +4 -2
@@ -111,7 +111,9 @@ static struct ib_ah *create_iboe_ah(struct ib_pd *pd, struct ib_ah_attr *ah_attr !(1 << ah->av.eth.stat_rate & dev->caps.stat_rate_support)) --ah->av.eth.stat_rate; } - + ah->av.eth.sl_tclass_flowlabel |= +cpu_to_be32 ((ah_attr->grh.traffic_class <<20 ) | + ah_attr->grh.flow_label);/* * HW requires multicast LID so we just choose one. */
@@ -119,7 +121,7 @@ static struct ib_ah *create_iboe_ah(struct ib_pd *pd, struct ib_ah_attr *ah_attr ah->av.ib.dlid =cpu_to_be16 (0xc000 );memcpy (ah->av.eth.dgid, ah_attr->grh.dgid.raw,16 ); - ah->av.eth.sl_tclass_flowlabel =cpu_to_be32 (ah_attr->sl <<29 ); + ah->av.eth.sl_tclass_flowlabel |=cpu_to_be32 (ah_attr->sl <<29 );return &ah->ibah; }
Signature · 6 lines
2.7.4 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 1478770261-5775-2-git-send-email-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org
Re: [PATCH rdma-rc V1 1/9] IB/mlx4: Set traffic class in AH
Quoted 4 lines · Leon Romanovsky
Set traffic class within
sl_tclass_flowlabelwhen create iboe AH. Without this the TOS value will be empty when running VLAN tagged traffic, because the TOS value is taken from the traffic class in the address handle attributes.
How is the IP TOS field modeled in RoCE V2 spec and/or the upstream rdma stack? E.g in RoCE V1 the 802.1q vlan priority is derived from the SL.
Quoted 1 line
Fixes 9106c4106974 ('IB/mlx4: Fix SL to 802.1Q priority-bits mapping for IBoE')
This commit was when the upstream kernel didn't support Routable RoCE and hence the IP TOS value was irrelevant. Hence, I don't see why claiming to fix it, please explain what you find wrong in that commit.
Also when you fix someone commit, the usual habit is to cc him/her on the fix so they can have a chance to comment, how you expected people to review your fixes to their commits if you don't give them heads-up? --
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH 2/9 IB/mlx4: Check gid_index return value
In reply to a message not in the archiveFrom: Daniel Jurgens <danielj-VPRAkNaXOzVWk0Htik3J/[email protected]>
Check the returned GID index value and return an error if it is invalid.
--- drivers/infiniband/hw/mlx4/ah.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
drivers/infiniband/hw/mlx4/ah.c +4 -1
@@ -102,7 +102,10 @@ static struct ib_ah *create_iboe_ah(struct ib_pd *pd, struct ib_ah_attr *ah_attrif (vlan_tag <0x1000 ) vlan_tag |= (ah_attr->sl &7 ) <<13 ; ah->av.eth.port_pd =cpu_to_be32 (to_mpd (pd)->pdn | (ah_attr->port_num <<24 )); - ah->av.eth.gid_index =mlx4_ib_gid_index_to_real_index (ibdev, ah_attr->port_num, ah_attr->grh.sgid_index); + ret =mlx4_ib_gid_index_to_real_index (ibdev, ah_attr->port_num, ah_attr->grh.sgid_index); +if (ret <0 ) +return ERR_PTR (ret); + ah->av.eth.gid_index = ret; ah->av.eth.vlan =cpu_to_be16 (vlan_tag); ah->av.eth.hop_limit = ah_attr->grh.hop_limit;if (ah_attr->static_rate) {
Signature · 6 lines
2.7.4 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH 3/9 IB/mlx4: Fix create CQ error flow
In reply to a message not in the archiveFrom: Matan Barak <matanb-VPRAkNaXOzVWk0Htik3J/[email protected]>
Currently, if ib_copy_to_udata fails, the CQ won't be deleted from the radix tree and the HW (HW2SW).
--- drivers/infiniband/hw/mlx4/cq.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
drivers/infiniband/hw/mlx4/cq.c +4 -1
@@ -253,11 +253,14 @@ struct ib_cq *mlx4_ib_create_cq(struct ib_device *ibdev,if (context)if (ib_copy_to_udata (udata, &cq->mcq.cqn,sizeof (__u32))) { err = -EFAULT ; - goto err_dbmap; + goto err_cq_free; }return &cq->ibcq; +err_cq_free: +mlx4_cq_free (dev->dev, &cq->mcq); + err_dbmap:if (context)mlx4_ib_db_unmap_user (to_mucontext (context), &cq->db);
Signature · 6 lines
2.7.4 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH 4/9 IB/mlx4: Handle IPv4 header when demultiplexing MAD
In reply to a message not in the archiveFrom: Moni Shoua <monis-VPRAkNaXOzVWk0Htik3J/[email protected]>
When MAD arrives to the hypervisor, we need to identify which slave it should be sent by destination GID. When L3 protocol is IPv4 the GRH is replaced by an IPv4 header. This patch detects when IPv4 header needs to be parsed instead of GRH.
--- drivers/infiniband/core/verbs.c | 16 +++++++++------- drivers/infiniband/hw/mlx4/mad.c | 33 ++++++++++++++++++++++++++++++--- include/rdma/ib_verbs.h | 19 +++++++++++++++++++ 3 files changed, 58 insertions(+), 10 deletions(-)
drivers/infiniband/core/verbs.c +9 -7
@@ -328,7 +328,7 @@ struct ib_ah *ib_create_ah(struct ib_pd *pd, struct ib_ah_attr *ah_attr) }EXPORT_SYMBOL (ib_create_ah); -static int ib_get_header_version (const union rdma_network_hdr *hdr) +int ib_get_rdma_header_version (const union rdma_network_hdr *hdr) {const struct iphdr *ip4h = (struct iphdr *)&hdr->roce4grh;struct iphdr ip4h_checked;
@@ -359,6 +359,7 @@ static int ib_get_header_version(const union rdma_network_hdr *hdr)return 4 ;return 6 ; } +EXPORT_SYMBOL (ib_get_rdma_header_version); static enum rdma_network_type ib_get_net_type_by_grh(struct ib_device *device, u8 port_num,
@@ -369,7 +370,7 @@ static enum rdma_network_type ib_get_net_type_by_grh(struct ib_device *device,if (rdma_protocol_ib (device, port_num))return RDMA_NETWORK_IB ; - grh_version =ib_get_header_version ((union rdma_network_hdr *)grh); + grh_version =ib_get_rdma_header_version ((union rdma_network_hdr *)grh);if (grh_version ==4 )return RDMA_NETWORK_IPV4 ;
@@ -415,9 +416,9 @@ static int get_sgid_index_from_eth(struct ib_device *device, u8 port_num, &context, gid_index); } -static int get_gids_from_rdma_hdr (union rdma_network_hdr *hdr, -enum rdma_network_type net_type, -union ib_gid *sgid,union ib_gid *dgid) +int ib_get_gids_from_rdma_hdr (const union rdma_network_hdr *hdr, +enum rdma_network_type net_type, +union ib_gid *sgid,union ib_gid *dgid) {struct sockaddr_in src_in;struct sockaddr_in dst_in;
@@ -447,6 +448,7 @@ static int get_gids_from_rdma_hdr(union rdma_network_hdr *hdr,return -EINVAL ; } } +EXPORT_SYMBOL (ib_get_gids_from_rdma_hdr); int ib_init_ah_from_wc(struct ib_device *device, u8 port_num, const struct ib_wc *wc, const struct ib_grh *grh,
@@ -469,8 +471,8 @@ int ib_init_ah_from_wc(struct ib_device *device, u8 port_num, net_type =ib_get_net_type_by_grh (device, port_num, grh); gid_type =ib_network_to_gid_type (net_type); } - ret =get_gids_from_rdma_hdr ((union rdma_network_hdr *)grh, net_type, - &sgid, &dgid); + ret =ib_get_gids_from_rdma_hdr ((union rdma_network_hdr *)grh, net_type, + &sgid, &dgid);if (ret)return ret;
drivers/infiniband/hw/mlx4/mad.c +30 -3
@@ -39,6 +39,8 @@#include <linux/mlx4/cmd.h> #include <linux/gfp.h> #include <rdma/ib_pma.h> +#include <linux/ip.h> +#include <net/ipv6.h> #include <linux/mlx4/driver.h> #include "mlx4_ib.h"
@@ -480,6 +482,23 @@ static int find_slave_port_pkey_ix(struct mlx4_ib_dev *dev, int slave,return -EINVAL ; } +static int get_gids_from_l3_hdr (struct ib_grh *grh,union ib_gid *sgid, +union ib_gid *dgid) +{ +int version =ib_get_rdma_header_version ((const union rdma_network_hdr *)grh); +enum rdma_network_type net_type; + +if (version ==4 ) + net_type =RDMA_NETWORK_IPV4 ; +else if (version ==6 ) + net_type =RDMA_NETWORK_IPV6 ; +else +return -EINVAL ; + +return ib_get_gids_from_rdma_hdr ((union rdma_network_hdr *)grh, net_type, + sgid, dgid); +} +int mlx4_ib_send_to_slave (struct mlx4_ib_dev *dev,int slave,u8 port,enum ib_qp_type dest_qpt,struct ib_wc *wc,struct ib_grh *grh,struct ib_mad *mad)
@@ -538,7 +557,10 @@ int mlx4_ib_send_to_slave(struct mlx4_ib_dev *dev, int slave, u8 port,memset (&attr,0 ,sizeof attr); attr.port_num = port;if (is_eth) { -memcpy (&attr.grh.dgid.raw[0 ], &grh->dgid.raw[0 ],16 ); +union ib_gid sgid; + +if (get_gids_from_l3_hdr (grh, &sgid, &attr.grh.dgid)) +return -EINVAL ; attr.ah_flags =IB_AH_GRH ; } ah =ib_create_ah (tun_ctx->pd, &attr);
@@ -651,6 +673,11 @@ static int mlx4_ib_demux_mad(struct ib_device *ibdev, u8 port, is_eth =1 ;if (is_eth) { +union ib_gid dgid; +union ib_gid sgid; + +if (get_gids_from_l3_hdr (grh, &sgid, &dgid)) +return -EINVAL ;if (!(wc->wc_flags &IB_WC_GRH )) {mlx4_ib_warn (ibdev,"RoCE grh not present.\n" );return -EINVAL ;
@@ -659,10 +686,10 @@ static int mlx4_ib_demux_mad(struct ib_device *ibdev, u8 port,mlx4_ib_warn (ibdev,"RoCE mgmt class is not CM\n" );return -EINVAL ; } - err =mlx4_get_slave_from_roce_gid (dev->dev, port, grh->dgid.raw, &slave); + err =mlx4_get_slave_from_roce_gid (dev->dev, port, dgid.raw, &slave);if (err &&mlx4_is_mf_bonded (dev->dev)) { other_port = (port ==1 ) ?2 :1 ; - err =mlx4_get_slave_from_roce_gid (dev->dev, other_port, grh->dgid.raw, &slave); + err =mlx4_get_slave_from_roce_gid (dev->dev, other_port, dgid.raw, &slave);if (!err) { port = other_port; pr_debug("resolved slave %d from gid %pI6 wire port %d other %d\n",
include/rdma/ib_verbs.h +19 -0
@@ -2581,6 +2581,24 @@ void ib_dealloc_pd(struct ib_pd *pd);struct ib_ah *ib_create_ah (struct ib_pd *pd,struct ib_ah_attr *ah_attr);/** +* ib_get_gids_from_rdma_hdr - Get sgid and dgid from GRH or IPv4 header +* work completion. +* @hdr: the L3 header to parse +* @net_type: type of header to parse +* @sgid: place to store source gid +* @dgid: place to store destination gid +*/ +int ib_get_gids_from_rdma_hdr (const union rdma_network_hdr *hdr, +enum rdma_network_type net_type, +union ib_gid *sgid,union ib_gid *dgid); + +/** +* ib_get_rdma_header_version - Get the header version +* @hdr: the L3 header to parse +*/ +int ib_get_rdma_header_version (const union rdma_network_hdr *hdr); + +/** * ib_init_ah_from_wc - Initializes address handle attributes from a * work completion. * @device: Device on which the received message arrived.
@@ -3357,4 +3375,5 @@ int ib_sg_to_pages(struct ib_mr *mr, struct scatterlist *sgl, int sg_nents,void ib_drain_rq (struct ib_qp *qp);void ib_drain_sq (struct ib_qp *qp);void ib_drain_qp (struct ib_qp *qp); +#endif /* IB_VERBS_H */
Signature · 6 lines
2.7.4 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH 5/9 IB/mlx4: Handle well-known-gid in mad_demux processing
In reply to a message not in the archiveFrom: Jack Morgenstein <[email protected]>
If OpenSM runs over a ConnectX-3, and there are ConnectX-4 or Connect-IB VFs active on the network, the OpenSM will receive QP1 packets containing a GRH where the destination GID is the "Well-Known GID" -- which is not a GID in the HCA Port's GID Table.
This GID must be tested-for separately -- and packets which contain this destination GID should be routed to slave 0 (the PF).
--- drivers/infiniband/hw/mlx4/mad.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-)
drivers/infiniband/hw/mlx4/mad.c +12 -4
@@ -729,10 +729,18 @@ static int mlx4_ib_demux_mad(struct ib_device *ibdev, u8 port,/* If a grh is present, we demux according to it */ if (wc->wc_flags &IB_WC_GRH ) { - slave =mlx4_ib_find_real_gid (ibdev, port, grh->dgid.global.interface_id); -if (slave <0 ) { -mlx4_ib_warn (ibdev,"failed matching grh\n" ); -return -ENOENT ; +if (grh->dgid.global.interface_id == +cpu_to_be64 (IB_SA_WELL_KNOWN_GUID ) && + grh->dgid.global.subnet_prefix ==cpu_to_be64 ( +atomic64_read (&dev->sriov.demux[port -1 ].subnet_prefix))) { + slave =0 ; + }else { + slave =mlx4_ib_find_real_gid (ibdev, port, + grh->dgid.global.interface_id); +if (slave <0 ) { +mlx4_ib_warn (ibdev,"failed matching grh\n" ); +return -ENOENT ; + } } }/* Class-specific handling */
Signature · 6 lines
2.7.4 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH 6/9 IB/mlx4: Put non zero value in max_ah device attribute
In reply to a message not in the archiveFrom: Maor Gottlieb <maorg-VPRAkNaXOzVWk0Htik3J/[email protected]>
Use INT_MAX since this is the max value the attribute can hold, though hardware capability is unlimited.
--- drivers/infiniband/hw/mlx4/main.c | 1 + 1 file changed, 1 insertion(+)
drivers/infiniband/hw/mlx4/main.c +1 -0
@@ -547,6 +547,7 @@ static int mlx4_ib_query_device(struct ib_device *ibdev, props->max_map_per_fmr = dev->dev->caps.max_fmr_maps; props->hca_core_clock = dev->dev->caps.hca_core_clock *1000UL ; props->timestamp_mask =0xFFFFFFFFFFFFULL ; + props->max_ah =INT_MAX ;if (!mlx4_is_slave (dev->dev)) err =mlx4_get_internal_clock_params (dev->dev, &clock_params);
Signature · 6 lines
2.7.4 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 1478770261-5775-7-git-send-email-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org
Re: [PATCH rdma-rc V1 6/9] IB/mlx4: Put non zero value in max_ah device attribute
Quoted 4 lines · Leon Romanovsky
Use
INT_MAXsince this is the max value the attribute can hold, though hardware capability is unlimited.Fixes 225c7b1feef1 ('IB/mlx4: Add a driver Mellanox ConnectX InfiniBand adapters')
why this small enhancement to a 10y old commit of Roland must go to 4.9-rc5 or even later? it clearly for -next, if you think differently, explain.
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH 7/9 IB/mlx4: Fix port query for 56Gb Ethernet links
In reply to a message not in the archiveFrom: Saeed Mahameed <saeedm-VPRAkNaXOzVWk0Htik3J/[email protected]>
Report the correct speed in the port attributes when using a 56Gbps ethernet link. Without this change the field is incorrectly set to 10.
--- drivers/infiniband/hw/mlx4/main.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-)
drivers/infiniband/hw/mlx4/main.c +5 -3
@@ -698,9 +698,11 @@ static int eth_link_query_port(struct ib_device *ibdev, u8 port,if (err) goto out; - props->active_width = (((u8 *)mailbox->buf)[5 ] ==0x40 ) ? -IB_WIDTH_4X :IB_WIDTH_1X ; - props->active_speed =IB_SPEED_QDR ; + props->active_width = (((u8 *)mailbox->buf)[5 ] ==0x40 ) || + (((u8 *)mailbox->buf)[5 ] ==0x20 /*56Gb*/ ) ? +IB_WIDTH_4X :IB_WIDTH_1X ; + props->active_speed = (((u8 *)mailbox->buf)[5 ] ==0x20 /*56Gb*/ ) ? +IB_SPEED_FDR :IB_SPEED_QDR ; props->port_cap_flags =IB_PORT_CM_SUP |IB_PORT_IP_BASED_GIDS ; props->gid_tbl_len = mdev->dev->caps.gid_table_len[port]; props->max_msg_sz = mdev->dev->caps.max_msg_sz;
Signature · 6 lines
2.7.4 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH 8/9 IB/mlx4: Fail to allocate NET_IF QPs when DMFS for IPoIB in unavailable
In reply to a message not in the archiveFrom: Eran Ben Elisha <eranbe-VPRAkNaXOzVWk0Htik3J/[email protected]>
According to the firmware spec, FLOW_STEERING_IB_UC_QP_RANGE command is supported only if dmfs_ipoib bit is set.
If it isn't set we want to ensure allocating NET_IF QPs fail. We do so by filling out the allocation bitmap. By thus, the NET_IF QPs allocating function won't find any free QP and will fail.
--- drivers/infiniband/hw/mlx4/main.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-)
drivers/infiniband/hw/mlx4/main.c +13 -8
@@ -2823,14 +2823,19 @@ static void *mlx4_ib_add(struct mlx4_dev *dev) goto err_steer_qp_release; } -bitmap_zero (ibdev->ib_uc_qpns_bitmap, ibdev->steer_qpn_count); - - err =mlx4_FLOW_STEERING_IB_UC_QP_RANGE ( - dev, ibdev->steer_qpn_base, - ibdev->steer_qpn_base + - ibdev->steer_qpn_count -1 ); -if (err) - goto err_steer_free_bitmap; +if (dev->caps.flags2 &MLX4_DEV_CAP_FLAG2_DMFS_IPOIB ) { +bitmap_zero (ibdev->ib_uc_qpns_bitmap, + ibdev->steer_qpn_count); + err =mlx4_FLOW_STEERING_IB_UC_QP_RANGE ( + dev, ibdev->steer_qpn_base, + ibdev->steer_qpn_base + + ibdev->steer_qpn_count -1 ); +if (err) + goto err_steer_free_bitmap; + }else { +bitmap_fill (ibdev->ib_uc_qpns_bitmap, + ibdev->steer_qpn_count); + } }for (j =1 ; j <= ibdev->dev->caps.num_ports; j++)
Signature · 6 lines
2.7.4 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH 9/9 IB/mlx4: Check if GRH is available before using it in modify QP
In reply to a message not in the archiveFrom: Eran Ben Elisha <eranbe-VPRAkNaXOzVWk0Htik3J/[email protected]>
Before reading GRH attributes, need to make sure AH contains GRH, and in addition, initialize GID type.
--- drivers/infiniband/hw/mlx4/qp.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/infiniband/hw/mlx4/qp.c +2 -2
@@ -1764,14 +1764,14 @@ static int __mlx4_ib_modify_qp(struct ib_qp *ibqp,u8 port_num =mlx4_is_bonded (to_mdev (ibqp->device)->dev) ?1 : attr_mask &IB_QP_PORT ? attr->port_num : qp->port;union ib_gid gid; -struct ib_gid_attr gid_attr; +struct ib_gid_attr gid_attr = {.gid_type =IB_GID_TYPE_IB };u16 vlan =0xffff ;u8 smac[ETH_ALEN ];int status =0 ;int is_eth =rdma_cap_eth_ah (&dev->ib_dev, port_num) && attr->ah_attr.ah_flags &IB_AH_GRH ; -if (is_eth) { +if (is_eth && attr->ah_attr.ah_flags &IB_AH_GRH ) {int index = attr->ah_attr.grh.sgid_index; status = ib_get_cached_gid(ibqp->device, port_num,
Signature · 6 lines
2.7.4 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html