diff options
| -rw-r--r-- | drivers/infiniband/core/cma.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c index d2d5d004f16d..2d762a2ecd81 100644 --- a/drivers/infiniband/core/cma.c +++ b/drivers/infiniband/core/cma.c | |||
| @@ -1265,15 +1265,17 @@ static bool cma_protocol_roce(const struct rdma_cm_id *id) | |||
| 1265 | return cma_protocol_roce_dev_port(device, port_num); | 1265 | return cma_protocol_roce_dev_port(device, port_num); |
| 1266 | } | 1266 | } |
| 1267 | 1267 | ||
| 1268 | static bool cma_match_net_dev(const struct rdma_id_private *id_priv, | 1268 | static bool cma_match_net_dev(const struct rdma_cm_id *id, |
| 1269 | const struct net_device *net_dev) | 1269 | const struct net_device *net_dev, |
| 1270 | u8 port_num) | ||
| 1270 | { | 1271 | { |
| 1271 | const struct rdma_addr *addr = &id_priv->id.route.addr; | 1272 | const struct rdma_addr *addr = &id->route.addr; |
| 1272 | 1273 | ||
| 1273 | if (!net_dev) | 1274 | if (!net_dev) |
| 1274 | /* This request is an AF_IB request or a RoCE request */ | 1275 | /* This request is an AF_IB request or a RoCE request */ |
| 1275 | return addr->src_addr.ss_family == AF_IB || | 1276 | return (!id->port_num || id->port_num == port_num) && |
| 1276 | cma_protocol_roce(&id_priv->id); | 1277 | (addr->src_addr.ss_family == AF_IB || |
| 1278 | cma_protocol_roce_dev_port(id->device, port_num)); | ||
| 1277 | 1279 | ||
| 1278 | return !addr->dev_addr.bound_dev_if || | 1280 | return !addr->dev_addr.bound_dev_if || |
| 1279 | (net_eq(dev_net(net_dev), addr->dev_addr.net) && | 1281 | (net_eq(dev_net(net_dev), addr->dev_addr.net) && |
| @@ -1295,13 +1297,13 @@ static struct rdma_id_private *cma_find_listener( | |||
| 1295 | hlist_for_each_entry(id_priv, &bind_list->owners, node) { | 1297 | hlist_for_each_entry(id_priv, &bind_list->owners, node) { |
| 1296 | if (cma_match_private_data(id_priv, ib_event->private_data)) { | 1298 | if (cma_match_private_data(id_priv, ib_event->private_data)) { |
| 1297 | if (id_priv->id.device == cm_id->device && | 1299 | if (id_priv->id.device == cm_id->device && |
| 1298 | cma_match_net_dev(id_priv, net_dev)) | 1300 | cma_match_net_dev(&id_priv->id, net_dev, req->port)) |
| 1299 | return id_priv; | 1301 | return id_priv; |
| 1300 | list_for_each_entry(id_priv_dev, | 1302 | list_for_each_entry(id_priv_dev, |
| 1301 | &id_priv->listen_list, | 1303 | &id_priv->listen_list, |
| 1302 | listen_list) { | 1304 | listen_list) { |
| 1303 | if (id_priv_dev->id.device == cm_id->device && | 1305 | if (id_priv_dev->id.device == cm_id->device && |
| 1304 | cma_match_net_dev(id_priv_dev, net_dev)) | 1306 | cma_match_net_dev(&id_priv_dev->id, net_dev, req->port)) |
| 1305 | return id_priv_dev; | 1307 | return id_priv_dev; |
| 1306 | } | 1308 | } |
| 1307 | } | 1309 | } |
