A few fixes for regressions introduced in 3.4-rc1:
- fix memory leak in mlx4 - fix two problems with new MAD response generation code -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) iQIcBAABCAAGBQJPmYfMAAoJEENa44ZhAt0h06IP/jPJeH855wC2RgWXY2Fd+b6w K/DQVE2MaX2f8EHuAB5MKoC0zzchKNu0GTMbrZMizbocDBmIU6ibF3MKx2rycSBC FI906X7FFAeSyaywrI+k+ZGxVQYAck1QFDr44WiyJ400r8BGbx9ZECKvIyEwjaUa RpRn4Pui4IjMV7GFqiziUsa9uo4xKYagjNfeInAZXelzIN76Coeae28dAIE2rPT/ BTcrtQ2JMG6H4AVGTImTP+Kqk1Cm7apBeHS4+SGWWTdw1WH4IcMqPmxHBUUtKTWt UnlgpHquuC913VpkbkGeog32iAndhHgAkfs67Rs0IFwck127Il/DiPK/zir2zkZ2 YVilzYIxrSUYqPZYfKFcrKsnjfM+HJxBEPCfDjxfG0TjrVS8tnc75Uq1NvIt6e42 lcIclLDyZtdsMLmJlsTsT5cF7HlThSjpZDSgmMi2eeOI0RKoqRyyGGwiAIq7Ud2a oRa+bheh4pBD2lvzd62uEkgMkTaToAz3I/vlbOTSwxYg2skoHUpwNPCsmstsQ7RU BHi7Nl5DLNT5lNBTIouWvbilpXs8eXwgcNrQcWSYaPeY2aDsGAAdi9Q4BadENao9 dmxOtqjryctX7U7LGDRmNDIfiyPY5AodDUJjFux1JwqbdSCGf1Lz7uvDWu7gqL9V TCJFAK54okexpoyV6Vgv =iRrT -----END PGP SIGNATURE----- Merge tag 'ib-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband Pull infiniband fixes from Roland Dreier: "A few fixes for regressions introduced in 3.4-rc1: - fix memory leak in mlx4 - fix two problems with new MAD response generation code" * tag 'ib-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband: IB/mlx4: Fix memory leaks in ib_link_query_port() IB/mad: Don't send response for failed MADs IB/mad: Set 'D' bit in response for unhandled MADs
This commit is contained in:
commit
ebcf596d89
|
@ -1854,6 +1854,8 @@ static bool generate_unmatched_resp(struct ib_mad_private *recv,
|
||||||
response->mad.mad.mad_hdr.method = IB_MGMT_METHOD_GET_RESP;
|
response->mad.mad.mad_hdr.method = IB_MGMT_METHOD_GET_RESP;
|
||||||
response->mad.mad.mad_hdr.status =
|
response->mad.mad.mad_hdr.status =
|
||||||
cpu_to_be16(IB_MGMT_MAD_STATUS_UNSUPPORTED_METHOD_ATTRIB);
|
cpu_to_be16(IB_MGMT_MAD_STATUS_UNSUPPORTED_METHOD_ATTRIB);
|
||||||
|
if (recv->mad.mad.mad_hdr.mgmt_class == IB_MGMT_CLASS_SUBN_DIRECTED_ROUTE)
|
||||||
|
response->mad.mad.mad_hdr.status |= IB_SMP_DIRECTION;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
|
@ -1869,6 +1871,7 @@ static void ib_mad_recv_done_handler(struct ib_mad_port_private *port_priv,
|
||||||
struct ib_mad_list_head *mad_list;
|
struct ib_mad_list_head *mad_list;
|
||||||
struct ib_mad_agent_private *mad_agent;
|
struct ib_mad_agent_private *mad_agent;
|
||||||
int port_num;
|
int port_num;
|
||||||
|
int ret = IB_MAD_RESULT_SUCCESS;
|
||||||
|
|
||||||
mad_list = (struct ib_mad_list_head *)(unsigned long)wc->wr_id;
|
mad_list = (struct ib_mad_list_head *)(unsigned long)wc->wr_id;
|
||||||
qp_info = mad_list->mad_queue->qp_info;
|
qp_info = mad_list->mad_queue->qp_info;
|
||||||
|
@ -1952,8 +1955,6 @@ static void ib_mad_recv_done_handler(struct ib_mad_port_private *port_priv,
|
||||||
local:
|
local:
|
||||||
/* Give driver "right of first refusal" on incoming MAD */
|
/* Give driver "right of first refusal" on incoming MAD */
|
||||||
if (port_priv->device->process_mad) {
|
if (port_priv->device->process_mad) {
|
||||||
int ret;
|
|
||||||
|
|
||||||
ret = port_priv->device->process_mad(port_priv->device, 0,
|
ret = port_priv->device->process_mad(port_priv->device, 0,
|
||||||
port_priv->port_num,
|
port_priv->port_num,
|
||||||
wc, &recv->grh,
|
wc, &recv->grh,
|
||||||
|
@ -1981,7 +1982,8 @@ local:
|
||||||
* or via recv_handler in ib_mad_complete_recv()
|
* or via recv_handler in ib_mad_complete_recv()
|
||||||
*/
|
*/
|
||||||
recv = NULL;
|
recv = NULL;
|
||||||
} else if (generate_unmatched_resp(recv, response)) {
|
} else if ((ret & IB_MAD_RESULT_SUCCESS) &&
|
||||||
|
generate_unmatched_resp(recv, response)) {
|
||||||
agent_send_response(&response->mad.mad, &recv->grh, wc,
|
agent_send_response(&response->mad.mad, &recv->grh, wc,
|
||||||
port_priv->device, port_num, qp_info->qp->qp_num);
|
port_priv->device, port_num, qp_info->qp->qp_num);
|
||||||
}
|
}
|
||||||
|
|
|
@ -247,7 +247,7 @@ static int ib_link_query_port(struct ib_device *ibdev, u8 port,
|
||||||
err = mlx4_MAD_IFC(to_mdev(ibdev), 1, 1, port,
|
err = mlx4_MAD_IFC(to_mdev(ibdev), 1, 1, port,
|
||||||
NULL, NULL, in_mad, out_mad);
|
NULL, NULL, in_mad, out_mad);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
goto out;
|
||||||
|
|
||||||
/* Checking LinkSpeedActive for FDR-10 */
|
/* Checking LinkSpeedActive for FDR-10 */
|
||||||
if (out_mad->data[15] & 0x1)
|
if (out_mad->data[15] & 0x1)
|
||||||
|
|
Loading…
Reference in New Issue