aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/infiniband')
-rw-r--r--drivers/infiniband/core/cma.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
index c10c45a07162..454e7ea111e6 100644
--- a/drivers/infiniband/core/cma.c
+++ b/drivers/infiniband/core/cma.c
@@ -1298,8 +1298,10 @@ static void cma_set_compare_data(enum rdma_port_space ps, struct sockaddr *addr,
1298 } else { 1298 } else {
1299 cma_set_ip_ver(cma_data, 4); 1299 cma_set_ip_ver(cma_data, 4);
1300 cma_set_ip_ver(cma_mask, 0xF); 1300 cma_set_ip_ver(cma_mask, 0xF);
1301 cma_data->dst_addr.ip4.addr = ip4_addr; 1301 if (!cma_any_addr(addr)) {
1302 cma_mask->dst_addr.ip4.addr = htonl(~0); 1302 cma_data->dst_addr.ip4.addr = ip4_addr;
1303 cma_mask->dst_addr.ip4.addr = htonl(~0);
1304 }
1303 } 1305 }
1304 break; 1306 break;
1305 case AF_INET6: 1307 case AF_INET6:
@@ -1313,9 +1315,11 @@ static void cma_set_compare_data(enum rdma_port_space ps, struct sockaddr *addr,
1313 } else { 1315 } else {
1314 cma_set_ip_ver(cma_data, 6); 1316 cma_set_ip_ver(cma_data, 6);
1315 cma_set_ip_ver(cma_mask, 0xF); 1317 cma_set_ip_ver(cma_mask, 0xF);
1316 cma_data->dst_addr.ip6 = ip6_addr; 1318 if (!cma_any_addr(addr)) {
1317 memset(&cma_mask->dst_addr.ip6, 0xFF, 1319 cma_data->dst_addr.ip6 = ip6_addr;
1318 sizeof cma_mask->dst_addr.ip6); 1320 memset(&cma_mask->dst_addr.ip6, 0xFF,
1321 sizeof cma_mask->dst_addr.ip6);
1322 }
1319 } 1323 }
1320 break; 1324 break;
1321 default: 1325 default:
@@ -1500,7 +1504,7 @@ static int cma_ib_listen(struct rdma_id_private *id_priv)
1500 1504
1501 addr = (struct sockaddr *) &id_priv->id.route.addr.src_addr; 1505 addr = (struct sockaddr *) &id_priv->id.route.addr.src_addr;
1502 svc_id = cma_get_service_id(id_priv->id.ps, addr); 1506 svc_id = cma_get_service_id(id_priv->id.ps, addr);
1503 if (cma_any_addr(addr)) 1507 if (cma_any_addr(addr) && !id_priv->afonly)
1504 ret = ib_cm_listen(id_priv->cm_id.ib, svc_id, 0, NULL); 1508 ret = ib_cm_listen(id_priv->cm_id.ib, svc_id, 0, NULL);
1505 else { 1509 else {
1506 cma_set_compare_data(id_priv->id.ps, addr, &compare_data); 1510 cma_set_compare_data(id_priv->id.ps, addr, &compare_data);