diff options
-rw-r--r-- | drivers/infiniband/core/cma.c | 170 | ||||
-rw-r--r-- | include/rdma/rdma_cm.h | 14 |
2 files changed, 94 insertions, 90 deletions
diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c index 99dde874fbbd..451d39e19cb4 100644 --- a/drivers/infiniband/core/cma.c +++ b/drivers/infiniband/core/cma.c | |||
@@ -89,20 +89,6 @@ struct cma_device { | |||
89 | struct list_head id_list; | 89 | struct list_head id_list; |
90 | }; | 90 | }; |
91 | 91 | ||
92 | enum cma_state { | ||
93 | CMA_IDLE, | ||
94 | CMA_ADDR_QUERY, | ||
95 | CMA_ADDR_RESOLVED, | ||
96 | CMA_ROUTE_QUERY, | ||
97 | CMA_ROUTE_RESOLVED, | ||
98 | CMA_CONNECT, | ||
99 | CMA_DISCONNECT, | ||
100 | CMA_ADDR_BOUND, | ||
101 | CMA_LISTEN, | ||
102 | CMA_DEVICE_REMOVAL, | ||
103 | CMA_DESTROYING | ||
104 | }; | ||
105 | |||
106 | struct rdma_bind_list { | 92 | struct rdma_bind_list { |
107 | struct idr *ps; | 93 | struct idr *ps; |
108 | struct hlist_head owners; | 94 | struct hlist_head owners; |
@@ -126,7 +112,7 @@ struct rdma_id_private { | |||
126 | struct list_head mc_list; | 112 | struct list_head mc_list; |
127 | 113 | ||
128 | int internal_id; | 114 | int internal_id; |
129 | enum cma_state state; | 115 | enum rdma_cm_state state; |
130 | spinlock_t lock; | 116 | spinlock_t lock; |
131 | struct mutex qp_mutex; | 117 | struct mutex qp_mutex; |
132 | 118 | ||
@@ -165,8 +151,8 @@ struct cma_multicast { | |||
165 | struct cma_work { | 151 | struct cma_work { |
166 | struct work_struct work; | 152 | struct work_struct work; |
167 | struct rdma_id_private *id; | 153 | struct rdma_id_private *id; |
168 | enum cma_state old_state; | 154 | enum rdma_cm_state old_state; |
169 | enum cma_state new_state; | 155 | enum rdma_cm_state new_state; |
170 | struct rdma_cm_event event; | 156 | struct rdma_cm_event event; |
171 | }; | 157 | }; |
172 | 158 | ||
@@ -217,7 +203,7 @@ struct sdp_hah { | |||
217 | #define CMA_VERSION 0x00 | 203 | #define CMA_VERSION 0x00 |
218 | #define SDP_MAJ_VERSION 0x2 | 204 | #define SDP_MAJ_VERSION 0x2 |
219 | 205 | ||
220 | static int cma_comp(struct rdma_id_private *id_priv, enum cma_state comp) | 206 | static int cma_comp(struct rdma_id_private *id_priv, enum rdma_cm_state comp) |
221 | { | 207 | { |
222 | unsigned long flags; | 208 | unsigned long flags; |
223 | int ret; | 209 | int ret; |
@@ -229,7 +215,7 @@ static int cma_comp(struct rdma_id_private *id_priv, enum cma_state comp) | |||
229 | } | 215 | } |
230 | 216 | ||
231 | static int cma_comp_exch(struct rdma_id_private *id_priv, | 217 | static int cma_comp_exch(struct rdma_id_private *id_priv, |
232 | enum cma_state comp, enum cma_state exch) | 218 | enum rdma_cm_state comp, enum rdma_cm_state exch) |
233 | { | 219 | { |
234 | unsigned long flags; | 220 | unsigned long flags; |
235 | int ret; | 221 | int ret; |
@@ -241,11 +227,11 @@ static int cma_comp_exch(struct rdma_id_private *id_priv, | |||
241 | return ret; | 227 | return ret; |
242 | } | 228 | } |
243 | 229 | ||
244 | static enum cma_state cma_exch(struct rdma_id_private *id_priv, | 230 | static enum rdma_cm_state cma_exch(struct rdma_id_private *id_priv, |
245 | enum cma_state exch) | 231 | enum rdma_cm_state exch) |
246 | { | 232 | { |
247 | unsigned long flags; | 233 | unsigned long flags; |
248 | enum cma_state old; | 234 | enum rdma_cm_state old; |
249 | 235 | ||
250 | spin_lock_irqsave(&id_priv->lock, flags); | 236 | spin_lock_irqsave(&id_priv->lock, flags); |
251 | old = id_priv->state; | 237 | old = id_priv->state; |
@@ -413,7 +399,7 @@ static void cma_deref_id(struct rdma_id_private *id_priv) | |||
413 | } | 399 | } |
414 | 400 | ||
415 | static int cma_disable_callback(struct rdma_id_private *id_priv, | 401 | static int cma_disable_callback(struct rdma_id_private *id_priv, |
416 | enum cma_state state) | 402 | enum rdma_cm_state state) |
417 | { | 403 | { |
418 | mutex_lock(&id_priv->handler_mutex); | 404 | mutex_lock(&id_priv->handler_mutex); |
419 | if (id_priv->state != state) { | 405 | if (id_priv->state != state) { |
@@ -437,7 +423,7 @@ struct rdma_cm_id *rdma_create_id(rdma_cm_event_handler event_handler, | |||
437 | if (!id_priv) | 423 | if (!id_priv) |
438 | return ERR_PTR(-ENOMEM); | 424 | return ERR_PTR(-ENOMEM); |
439 | 425 | ||
440 | id_priv->state = CMA_IDLE; | 426 | id_priv->state = RDMA_CM_IDLE; |
441 | id_priv->id.context = context; | 427 | id_priv->id.context = context; |
442 | id_priv->id.event_handler = event_handler; | 428 | id_priv->id.event_handler = event_handler; |
443 | id_priv->id.ps = ps; | 429 | id_priv->id.ps = ps; |
@@ -858,16 +844,16 @@ static void cma_cancel_listens(struct rdma_id_private *id_priv) | |||
858 | } | 844 | } |
859 | 845 | ||
860 | static void cma_cancel_operation(struct rdma_id_private *id_priv, | 846 | static void cma_cancel_operation(struct rdma_id_private *id_priv, |
861 | enum cma_state state) | 847 | enum rdma_cm_state state) |
862 | { | 848 | { |
863 | switch (state) { | 849 | switch (state) { |
864 | case CMA_ADDR_QUERY: | 850 | case RDMA_CM_ADDR_QUERY: |
865 | rdma_addr_cancel(&id_priv->id.route.addr.dev_addr); | 851 | rdma_addr_cancel(&id_priv->id.route.addr.dev_addr); |
866 | break; | 852 | break; |
867 | case CMA_ROUTE_QUERY: | 853 | case RDMA_CM_ROUTE_QUERY: |
868 | cma_cancel_route(id_priv); | 854 | cma_cancel_route(id_priv); |
869 | break; | 855 | break; |
870 | case CMA_LISTEN: | 856 | case RDMA_CM_LISTEN: |
871 | if (cma_any_addr((struct sockaddr *) &id_priv->id.route.addr.src_addr) | 857 | if (cma_any_addr((struct sockaddr *) &id_priv->id.route.addr.src_addr) |
872 | && !id_priv->cma_dev) | 858 | && !id_priv->cma_dev) |
873 | cma_cancel_listens(id_priv); | 859 | cma_cancel_listens(id_priv); |
@@ -918,10 +904,10 @@ static void cma_leave_mc_groups(struct rdma_id_private *id_priv) | |||
918 | void rdma_destroy_id(struct rdma_cm_id *id) | 904 | void rdma_destroy_id(struct rdma_cm_id *id) |
919 | { | 905 | { |
920 | struct rdma_id_private *id_priv; | 906 | struct rdma_id_private *id_priv; |
921 | enum cma_state state; | 907 | enum rdma_cm_state state; |
922 | 908 | ||
923 | id_priv = container_of(id, struct rdma_id_private, id); | 909 | id_priv = container_of(id, struct rdma_id_private, id); |
924 | state = cma_exch(id_priv, CMA_DESTROYING); | 910 | state = cma_exch(id_priv, RDMA_CM_DESTROYING); |
925 | cma_cancel_operation(id_priv, state); | 911 | cma_cancel_operation(id_priv, state); |
926 | 912 | ||
927 | /* | 913 | /* |
@@ -1015,9 +1001,9 @@ static int cma_ib_handler(struct ib_cm_id *cm_id, struct ib_cm_event *ib_event) | |||
1015 | int ret = 0; | 1001 | int ret = 0; |
1016 | 1002 | ||
1017 | if ((ib_event->event != IB_CM_TIMEWAIT_EXIT && | 1003 | if ((ib_event->event != IB_CM_TIMEWAIT_EXIT && |
1018 | cma_disable_callback(id_priv, CMA_CONNECT)) || | 1004 | cma_disable_callback(id_priv, RDMA_CM_CONNECT)) || |
1019 | (ib_event->event == IB_CM_TIMEWAIT_EXIT && | 1005 | (ib_event->event == IB_CM_TIMEWAIT_EXIT && |
1020 | cma_disable_callback(id_priv, CMA_DISCONNECT))) | 1006 | cma_disable_callback(id_priv, RDMA_CM_DISCONNECT))) |
1021 | return 0; | 1007 | return 0; |
1022 | 1008 | ||
1023 | memset(&event, 0, sizeof event); | 1009 | memset(&event, 0, sizeof event); |
@@ -1048,7 +1034,8 @@ static int cma_ib_handler(struct ib_cm_id *cm_id, struct ib_cm_event *ib_event) | |||
1048 | event.status = -ETIMEDOUT; /* fall through */ | 1034 | event.status = -ETIMEDOUT; /* fall through */ |
1049 | case IB_CM_DREQ_RECEIVED: | 1035 | case IB_CM_DREQ_RECEIVED: |
1050 | case IB_CM_DREP_RECEIVED: | 1036 | case IB_CM_DREP_RECEIVED: |
1051 | if (!cma_comp_exch(id_priv, CMA_CONNECT, CMA_DISCONNECT)) | 1037 | if (!cma_comp_exch(id_priv, RDMA_CM_CONNECT, |
1038 | RDMA_CM_DISCONNECT)) | ||
1052 | goto out; | 1039 | goto out; |
1053 | event.event = RDMA_CM_EVENT_DISCONNECTED; | 1040 | event.event = RDMA_CM_EVENT_DISCONNECTED; |
1054 | break; | 1041 | break; |
@@ -1075,7 +1062,7 @@ static int cma_ib_handler(struct ib_cm_id *cm_id, struct ib_cm_event *ib_event) | |||
1075 | if (ret) { | 1062 | if (ret) { |
1076 | /* Destroy the CM ID by returning a non-zero value. */ | 1063 | /* Destroy the CM ID by returning a non-zero value. */ |
1077 | id_priv->cm_id.ib = NULL; | 1064 | id_priv->cm_id.ib = NULL; |
1078 | cma_exch(id_priv, CMA_DESTROYING); | 1065 | cma_exch(id_priv, RDMA_CM_DESTROYING); |
1079 | mutex_unlock(&id_priv->handler_mutex); | 1066 | mutex_unlock(&id_priv->handler_mutex); |
1080 | rdma_destroy_id(&id_priv->id); | 1067 | rdma_destroy_id(&id_priv->id); |
1081 | return ret; | 1068 | return ret; |
@@ -1132,7 +1119,7 @@ static struct rdma_id_private *cma_new_conn_id(struct rdma_cm_id *listen_id, | |||
1132 | rdma_addr_set_dgid(&rt->addr.dev_addr, &rt->path_rec[0].dgid); | 1119 | rdma_addr_set_dgid(&rt->addr.dev_addr, &rt->path_rec[0].dgid); |
1133 | 1120 | ||
1134 | id_priv = container_of(id, struct rdma_id_private, id); | 1121 | id_priv = container_of(id, struct rdma_id_private, id); |
1135 | id_priv->state = CMA_CONNECT; | 1122 | id_priv->state = RDMA_CM_CONNECT; |
1136 | return id_priv; | 1123 | return id_priv; |
1137 | 1124 | ||
1138 | destroy_id: | 1125 | destroy_id: |
@@ -1172,7 +1159,7 @@ static struct rdma_id_private *cma_new_udp_id(struct rdma_cm_id *listen_id, | |||
1172 | } | 1159 | } |
1173 | 1160 | ||
1174 | id_priv = container_of(id, struct rdma_id_private, id); | 1161 | id_priv = container_of(id, struct rdma_id_private, id); |
1175 | id_priv->state = CMA_CONNECT; | 1162 | id_priv->state = RDMA_CM_CONNECT; |
1176 | return id_priv; | 1163 | return id_priv; |
1177 | err: | 1164 | err: |
1178 | rdma_destroy_id(id); | 1165 | rdma_destroy_id(id); |
@@ -1201,7 +1188,7 @@ static int cma_req_handler(struct ib_cm_id *cm_id, struct ib_cm_event *ib_event) | |||
1201 | int offset, ret; | 1188 | int offset, ret; |
1202 | 1189 | ||
1203 | listen_id = cm_id->context; | 1190 | listen_id = cm_id->context; |
1204 | if (cma_disable_callback(listen_id, CMA_LISTEN)) | 1191 | if (cma_disable_callback(listen_id, RDMA_CM_LISTEN)) |
1205 | return -ECONNABORTED; | 1192 | return -ECONNABORTED; |
1206 | 1193 | ||
1207 | memset(&event, 0, sizeof event); | 1194 | memset(&event, 0, sizeof event); |
@@ -1243,7 +1230,7 @@ static int cma_req_handler(struct ib_cm_id *cm_id, struct ib_cm_event *ib_event) | |||
1243 | * while we're accessing the cm_id. | 1230 | * while we're accessing the cm_id. |
1244 | */ | 1231 | */ |
1245 | mutex_lock(&lock); | 1232 | mutex_lock(&lock); |
1246 | if (cma_comp(conn_id, CMA_CONNECT) && | 1233 | if (cma_comp(conn_id, RDMA_CM_CONNECT) && |
1247 | !cma_is_ud_ps(conn_id->id.ps)) | 1234 | !cma_is_ud_ps(conn_id->id.ps)) |
1248 | ib_send_cm_mra(cm_id, CMA_CM_MRA_SETTING, NULL, 0); | 1235 | ib_send_cm_mra(cm_id, CMA_CM_MRA_SETTING, NULL, 0); |
1249 | mutex_unlock(&lock); | 1236 | mutex_unlock(&lock); |
@@ -1257,7 +1244,7 @@ static int cma_req_handler(struct ib_cm_id *cm_id, struct ib_cm_event *ib_event) | |||
1257 | conn_id->cm_id.ib = NULL; | 1244 | conn_id->cm_id.ib = NULL; |
1258 | 1245 | ||
1259 | release_conn_id: | 1246 | release_conn_id: |
1260 | cma_exch(conn_id, CMA_DESTROYING); | 1247 | cma_exch(conn_id, RDMA_CM_DESTROYING); |
1261 | mutex_unlock(&conn_id->handler_mutex); | 1248 | mutex_unlock(&conn_id->handler_mutex); |
1262 | rdma_destroy_id(&conn_id->id); | 1249 | rdma_destroy_id(&conn_id->id); |
1263 | 1250 | ||
@@ -1328,7 +1315,7 @@ static int cma_iw_handler(struct iw_cm_id *iw_id, struct iw_cm_event *iw_event) | |||
1328 | struct sockaddr_in *sin; | 1315 | struct sockaddr_in *sin; |
1329 | int ret = 0; | 1316 | int ret = 0; |
1330 | 1317 | ||
1331 | if (cma_disable_callback(id_priv, CMA_CONNECT)) | 1318 | if (cma_disable_callback(id_priv, RDMA_CM_CONNECT)) |
1332 | return 0; | 1319 | return 0; |
1333 | 1320 | ||
1334 | memset(&event, 0, sizeof event); | 1321 | memset(&event, 0, sizeof event); |
@@ -1371,7 +1358,7 @@ static int cma_iw_handler(struct iw_cm_id *iw_id, struct iw_cm_event *iw_event) | |||
1371 | if (ret) { | 1358 | if (ret) { |
1372 | /* Destroy the CM ID by returning a non-zero value. */ | 1359 | /* Destroy the CM ID by returning a non-zero value. */ |
1373 | id_priv->cm_id.iw = NULL; | 1360 | id_priv->cm_id.iw = NULL; |
1374 | cma_exch(id_priv, CMA_DESTROYING); | 1361 | cma_exch(id_priv, RDMA_CM_DESTROYING); |
1375 | mutex_unlock(&id_priv->handler_mutex); | 1362 | mutex_unlock(&id_priv->handler_mutex); |
1376 | rdma_destroy_id(&id_priv->id); | 1363 | rdma_destroy_id(&id_priv->id); |
1377 | return ret; | 1364 | return ret; |
@@ -1393,7 +1380,7 @@ static int iw_conn_req_handler(struct iw_cm_id *cm_id, | |||
1393 | struct ib_device_attr attr; | 1380 | struct ib_device_attr attr; |
1394 | 1381 | ||
1395 | listen_id = cm_id->context; | 1382 | listen_id = cm_id->context; |
1396 | if (cma_disable_callback(listen_id, CMA_LISTEN)) | 1383 | if (cma_disable_callback(listen_id, RDMA_CM_LISTEN)) |
1397 | return -ECONNABORTED; | 1384 | return -ECONNABORTED; |
1398 | 1385 | ||
1399 | /* Create a new RDMA id for the new IW CM ID */ | 1386 | /* Create a new RDMA id for the new IW CM ID */ |
@@ -1406,7 +1393,7 @@ static int iw_conn_req_handler(struct iw_cm_id *cm_id, | |||
1406 | } | 1393 | } |
1407 | conn_id = container_of(new_cm_id, struct rdma_id_private, id); | 1394 | conn_id = container_of(new_cm_id, struct rdma_id_private, id); |
1408 | mutex_lock_nested(&conn_id->handler_mutex, SINGLE_DEPTH_NESTING); | 1395 | mutex_lock_nested(&conn_id->handler_mutex, SINGLE_DEPTH_NESTING); |
1409 | conn_id->state = CMA_CONNECT; | 1396 | conn_id->state = RDMA_CM_CONNECT; |
1410 | 1397 | ||
1411 | dev = ip_dev_find(&init_net, iw_event->local_addr.sin_addr.s_addr); | 1398 | dev = ip_dev_find(&init_net, iw_event->local_addr.sin_addr.s_addr); |
1412 | if (!dev) { | 1399 | if (!dev) { |
@@ -1461,7 +1448,7 @@ static int iw_conn_req_handler(struct iw_cm_id *cm_id, | |||
1461 | if (ret) { | 1448 | if (ret) { |
1462 | /* User wants to destroy the CM ID */ | 1449 | /* User wants to destroy the CM ID */ |
1463 | conn_id->cm_id.iw = NULL; | 1450 | conn_id->cm_id.iw = NULL; |
1464 | cma_exch(conn_id, CMA_DESTROYING); | 1451 | cma_exch(conn_id, RDMA_CM_DESTROYING); |
1465 | mutex_unlock(&conn_id->handler_mutex); | 1452 | mutex_unlock(&conn_id->handler_mutex); |
1466 | cma_deref_id(conn_id); | 1453 | cma_deref_id(conn_id); |
1467 | rdma_destroy_id(&conn_id->id); | 1454 | rdma_destroy_id(&conn_id->id); |
@@ -1554,7 +1541,7 @@ static void cma_listen_on_dev(struct rdma_id_private *id_priv, | |||
1554 | 1541 | ||
1555 | dev_id_priv = container_of(id, struct rdma_id_private, id); | 1542 | dev_id_priv = container_of(id, struct rdma_id_private, id); |
1556 | 1543 | ||
1557 | dev_id_priv->state = CMA_ADDR_BOUND; | 1544 | dev_id_priv->state = RDMA_CM_ADDR_BOUND; |
1558 | memcpy(&id->route.addr.src_addr, &id_priv->id.route.addr.src_addr, | 1545 | memcpy(&id->route.addr.src_addr, &id_priv->id.route.addr.src_addr, |
1559 | ip_addr_size((struct sockaddr *) &id_priv->id.route.addr.src_addr)); | 1546 | ip_addr_size((struct sockaddr *) &id_priv->id.route.addr.src_addr)); |
1560 | 1547 | ||
@@ -1601,8 +1588,8 @@ static void cma_query_handler(int status, struct ib_sa_path_rec *path_rec, | |||
1601 | route->num_paths = 1; | 1588 | route->num_paths = 1; |
1602 | *route->path_rec = *path_rec; | 1589 | *route->path_rec = *path_rec; |
1603 | } else { | 1590 | } else { |
1604 | work->old_state = CMA_ROUTE_QUERY; | 1591 | work->old_state = RDMA_CM_ROUTE_QUERY; |
1605 | work->new_state = CMA_ADDR_RESOLVED; | 1592 | work->new_state = RDMA_CM_ADDR_RESOLVED; |
1606 | work->event.event = RDMA_CM_EVENT_ROUTE_ERROR; | 1593 | work->event.event = RDMA_CM_EVENT_ROUTE_ERROR; |
1607 | work->event.status = status; | 1594 | work->event.status = status; |
1608 | } | 1595 | } |
@@ -1660,7 +1647,7 @@ static void cma_work_handler(struct work_struct *_work) | |||
1660 | goto out; | 1647 | goto out; |
1661 | 1648 | ||
1662 | if (id_priv->id.event_handler(&id_priv->id, &work->event)) { | 1649 | if (id_priv->id.event_handler(&id_priv->id, &work->event)) { |
1663 | cma_exch(id_priv, CMA_DESTROYING); | 1650 | cma_exch(id_priv, RDMA_CM_DESTROYING); |
1664 | destroy = 1; | 1651 | destroy = 1; |
1665 | } | 1652 | } |
1666 | out: | 1653 | out: |
@@ -1678,12 +1665,12 @@ static void cma_ndev_work_handler(struct work_struct *_work) | |||
1678 | int destroy = 0; | 1665 | int destroy = 0; |
1679 | 1666 | ||
1680 | mutex_lock(&id_priv->handler_mutex); | 1667 | mutex_lock(&id_priv->handler_mutex); |
1681 | if (id_priv->state == CMA_DESTROYING || | 1668 | if (id_priv->state == RDMA_CM_DESTROYING || |
1682 | id_priv->state == CMA_DEVICE_REMOVAL) | 1669 | id_priv->state == RDMA_CM_DEVICE_REMOVAL) |
1683 | goto out; | 1670 | goto out; |
1684 | 1671 | ||
1685 | if (id_priv->id.event_handler(&id_priv->id, &work->event)) { | 1672 | if (id_priv->id.event_handler(&id_priv->id, &work->event)) { |
1686 | cma_exch(id_priv, CMA_DESTROYING); | 1673 | cma_exch(id_priv, RDMA_CM_DESTROYING); |
1687 | destroy = 1; | 1674 | destroy = 1; |
1688 | } | 1675 | } |
1689 | 1676 | ||
@@ -1707,8 +1694,8 @@ static int cma_resolve_ib_route(struct rdma_id_private *id_priv, int timeout_ms) | |||
1707 | 1694 | ||
1708 | work->id = id_priv; | 1695 | work->id = id_priv; |
1709 | INIT_WORK(&work->work, cma_work_handler); | 1696 | INIT_WORK(&work->work, cma_work_handler); |
1710 | work->old_state = CMA_ROUTE_QUERY; | 1697 | work->old_state = RDMA_CM_ROUTE_QUERY; |
1711 | work->new_state = CMA_ROUTE_RESOLVED; | 1698 | work->new_state = RDMA_CM_ROUTE_RESOLVED; |
1712 | work->event.event = RDMA_CM_EVENT_ROUTE_RESOLVED; | 1699 | work->event.event = RDMA_CM_EVENT_ROUTE_RESOLVED; |
1713 | 1700 | ||
1714 | route->path_rec = kmalloc(sizeof *route->path_rec, GFP_KERNEL); | 1701 | route->path_rec = kmalloc(sizeof *route->path_rec, GFP_KERNEL); |
@@ -1737,7 +1724,8 @@ int rdma_set_ib_paths(struct rdma_cm_id *id, | |||
1737 | int ret; | 1724 | int ret; |
1738 | 1725 | ||
1739 | id_priv = container_of(id, struct rdma_id_private, id); | 1726 | id_priv = container_of(id, struct rdma_id_private, id); |
1740 | if (!cma_comp_exch(id_priv, CMA_ADDR_RESOLVED, CMA_ROUTE_RESOLVED)) | 1727 | if (!cma_comp_exch(id_priv, RDMA_CM_ADDR_RESOLVED, |
1728 | RDMA_CM_ROUTE_RESOLVED)) | ||
1741 | return -EINVAL; | 1729 | return -EINVAL; |
1742 | 1730 | ||
1743 | id->route.path_rec = kmemdup(path_rec, sizeof *path_rec * num_paths, | 1731 | id->route.path_rec = kmemdup(path_rec, sizeof *path_rec * num_paths, |
@@ -1750,7 +1738,7 @@ int rdma_set_ib_paths(struct rdma_cm_id *id, | |||
1750 | id->route.num_paths = num_paths; | 1738 | id->route.num_paths = num_paths; |
1751 | return 0; | 1739 | return 0; |
1752 | err: | 1740 | err: |
1753 | cma_comp_exch(id_priv, CMA_ROUTE_RESOLVED, CMA_ADDR_RESOLVED); | 1741 | cma_comp_exch(id_priv, RDMA_CM_ROUTE_RESOLVED, RDMA_CM_ADDR_RESOLVED); |
1754 | return ret; | 1742 | return ret; |
1755 | } | 1743 | } |
1756 | EXPORT_SYMBOL(rdma_set_ib_paths); | 1744 | EXPORT_SYMBOL(rdma_set_ib_paths); |
@@ -1765,8 +1753,8 @@ static int cma_resolve_iw_route(struct rdma_id_private *id_priv, int timeout_ms) | |||
1765 | 1753 | ||
1766 | work->id = id_priv; | 1754 | work->id = id_priv; |
1767 | INIT_WORK(&work->work, cma_work_handler); | 1755 | INIT_WORK(&work->work, cma_work_handler); |
1768 | work->old_state = CMA_ROUTE_QUERY; | 1756 | work->old_state = RDMA_CM_ROUTE_QUERY; |
1769 | work->new_state = CMA_ROUTE_RESOLVED; | 1757 | work->new_state = RDMA_CM_ROUTE_RESOLVED; |
1770 | work->event.event = RDMA_CM_EVENT_ROUTE_RESOLVED; | 1758 | work->event.event = RDMA_CM_EVENT_ROUTE_RESOLVED; |
1771 | queue_work(cma_wq, &work->work); | 1759 | queue_work(cma_wq, &work->work); |
1772 | return 0; | 1760 | return 0; |
@@ -1830,8 +1818,8 @@ static int cma_resolve_iboe_route(struct rdma_id_private *id_priv) | |||
1830 | goto err2; | 1818 | goto err2; |
1831 | } | 1819 | } |
1832 | 1820 | ||
1833 | work->old_state = CMA_ROUTE_QUERY; | 1821 | work->old_state = RDMA_CM_ROUTE_QUERY; |
1834 | work->new_state = CMA_ROUTE_RESOLVED; | 1822 | work->new_state = RDMA_CM_ROUTE_RESOLVED; |
1835 | work->event.event = RDMA_CM_EVENT_ROUTE_RESOLVED; | 1823 | work->event.event = RDMA_CM_EVENT_ROUTE_RESOLVED; |
1836 | work->event.status = 0; | 1824 | work->event.status = 0; |
1837 | 1825 | ||
@@ -1853,7 +1841,7 @@ int rdma_resolve_route(struct rdma_cm_id *id, int timeout_ms) | |||
1853 | int ret; | 1841 | int ret; |
1854 | 1842 | ||
1855 | id_priv = container_of(id, struct rdma_id_private, id); | 1843 | id_priv = container_of(id, struct rdma_id_private, id); |
1856 | if (!cma_comp_exch(id_priv, CMA_ADDR_RESOLVED, CMA_ROUTE_QUERY)) | 1844 | if (!cma_comp_exch(id_priv, RDMA_CM_ADDR_RESOLVED, RDMA_CM_ROUTE_QUERY)) |
1857 | return -EINVAL; | 1845 | return -EINVAL; |
1858 | 1846 | ||
1859 | atomic_inc(&id_priv->refcount); | 1847 | atomic_inc(&id_priv->refcount); |
@@ -1882,7 +1870,7 @@ int rdma_resolve_route(struct rdma_cm_id *id, int timeout_ms) | |||
1882 | 1870 | ||
1883 | return 0; | 1871 | return 0; |
1884 | err: | 1872 | err: |
1885 | cma_comp_exch(id_priv, CMA_ROUTE_QUERY, CMA_ADDR_RESOLVED); | 1873 | cma_comp_exch(id_priv, RDMA_CM_ROUTE_QUERY, RDMA_CM_ADDR_RESOLVED); |
1886 | cma_deref_id(id_priv); | 1874 | cma_deref_id(id_priv); |
1887 | return ret; | 1875 | return ret; |
1888 | } | 1876 | } |
@@ -1941,14 +1929,16 @@ static void addr_handler(int status, struct sockaddr *src_addr, | |||
1941 | 1929 | ||
1942 | memset(&event, 0, sizeof event); | 1930 | memset(&event, 0, sizeof event); |
1943 | mutex_lock(&id_priv->handler_mutex); | 1931 | mutex_lock(&id_priv->handler_mutex); |
1944 | if (!cma_comp_exch(id_priv, CMA_ADDR_QUERY, CMA_ADDR_RESOLVED)) | 1932 | if (!cma_comp_exch(id_priv, RDMA_CM_ADDR_QUERY, |
1933 | RDMA_CM_ADDR_RESOLVED)) | ||
1945 | goto out; | 1934 | goto out; |
1946 | 1935 | ||
1947 | if (!status && !id_priv->cma_dev) | 1936 | if (!status && !id_priv->cma_dev) |
1948 | status = cma_acquire_dev(id_priv); | 1937 | status = cma_acquire_dev(id_priv); |
1949 | 1938 | ||
1950 | if (status) { | 1939 | if (status) { |
1951 | if (!cma_comp_exch(id_priv, CMA_ADDR_RESOLVED, CMA_ADDR_BOUND)) | 1940 | if (!cma_comp_exch(id_priv, RDMA_CM_ADDR_RESOLVED, |
1941 | RDMA_CM_ADDR_BOUND)) | ||
1952 | goto out; | 1942 | goto out; |
1953 | event.event = RDMA_CM_EVENT_ADDR_ERROR; | 1943 | event.event = RDMA_CM_EVENT_ADDR_ERROR; |
1954 | event.status = status; | 1944 | event.status = status; |
@@ -1959,7 +1949,7 @@ static void addr_handler(int status, struct sockaddr *src_addr, | |||
1959 | } | 1949 | } |
1960 | 1950 | ||
1961 | if (id_priv->id.event_handler(&id_priv->id, &event)) { | 1951 | if (id_priv->id.event_handler(&id_priv->id, &event)) { |
1962 | cma_exch(id_priv, CMA_DESTROYING); | 1952 | cma_exch(id_priv, RDMA_CM_DESTROYING); |
1963 | mutex_unlock(&id_priv->handler_mutex); | 1953 | mutex_unlock(&id_priv->handler_mutex); |
1964 | cma_deref_id(id_priv); | 1954 | cma_deref_id(id_priv); |
1965 | rdma_destroy_id(&id_priv->id); | 1955 | rdma_destroy_id(&id_priv->id); |
@@ -2004,8 +1994,8 @@ static int cma_resolve_loopback(struct rdma_id_private *id_priv) | |||
2004 | 1994 | ||
2005 | work->id = id_priv; | 1995 | work->id = id_priv; |
2006 | INIT_WORK(&work->work, cma_work_handler); | 1996 | INIT_WORK(&work->work, cma_work_handler); |
2007 | work->old_state = CMA_ADDR_QUERY; | 1997 | work->old_state = RDMA_CM_ADDR_QUERY; |
2008 | work->new_state = CMA_ADDR_RESOLVED; | 1998 | work->new_state = RDMA_CM_ADDR_RESOLVED; |
2009 | work->event.event = RDMA_CM_EVENT_ADDR_RESOLVED; | 1999 | work->event.event = RDMA_CM_EVENT_ADDR_RESOLVED; |
2010 | queue_work(cma_wq, &work->work); | 2000 | queue_work(cma_wq, &work->work); |
2011 | return 0; | 2001 | return 0; |
@@ -2034,13 +2024,13 @@ int rdma_resolve_addr(struct rdma_cm_id *id, struct sockaddr *src_addr, | |||
2034 | int ret; | 2024 | int ret; |
2035 | 2025 | ||
2036 | id_priv = container_of(id, struct rdma_id_private, id); | 2026 | id_priv = container_of(id, struct rdma_id_private, id); |
2037 | if (id_priv->state == CMA_IDLE) { | 2027 | if (id_priv->state == RDMA_CM_IDLE) { |
2038 | ret = cma_bind_addr(id, src_addr, dst_addr); | 2028 | ret = cma_bind_addr(id, src_addr, dst_addr); |
2039 | if (ret) | 2029 | if (ret) |
2040 | return ret; | 2030 | return ret; |
2041 | } | 2031 | } |
2042 | 2032 | ||
2043 | if (!cma_comp_exch(id_priv, CMA_ADDR_BOUND, CMA_ADDR_QUERY)) | 2033 | if (!cma_comp_exch(id_priv, RDMA_CM_ADDR_BOUND, RDMA_CM_ADDR_QUERY)) |
2044 | return -EINVAL; | 2034 | return -EINVAL; |
2045 | 2035 | ||
2046 | atomic_inc(&id_priv->refcount); | 2036 | atomic_inc(&id_priv->refcount); |
@@ -2056,7 +2046,7 @@ int rdma_resolve_addr(struct rdma_cm_id *id, struct sockaddr *src_addr, | |||
2056 | 2046 | ||
2057 | return 0; | 2047 | return 0; |
2058 | err: | 2048 | err: |
2059 | cma_comp_exch(id_priv, CMA_ADDR_QUERY, CMA_ADDR_BOUND); | 2049 | cma_comp_exch(id_priv, RDMA_CM_ADDR_QUERY, RDMA_CM_ADDR_BOUND); |
2060 | cma_deref_id(id_priv); | 2050 | cma_deref_id(id_priv); |
2061 | return ret; | 2051 | return ret; |
2062 | } | 2052 | } |
@@ -2070,7 +2060,7 @@ int rdma_set_reuseaddr(struct rdma_cm_id *id, int reuse) | |||
2070 | 2060 | ||
2071 | id_priv = container_of(id, struct rdma_id_private, id); | 2061 | id_priv = container_of(id, struct rdma_id_private, id); |
2072 | spin_lock_irqsave(&id_priv->lock, flags); | 2062 | spin_lock_irqsave(&id_priv->lock, flags); |
2073 | if (id_priv->state == CMA_IDLE) { | 2063 | if (id_priv->state == RDMA_CM_IDLE) { |
2074 | id_priv->reuseaddr = reuse; | 2064 | id_priv->reuseaddr = reuse; |
2075 | ret = 0; | 2065 | ret = 0; |
2076 | } else { | 2066 | } else { |
@@ -2177,7 +2167,7 @@ static int cma_check_port(struct rdma_bind_list *bind_list, | |||
2177 | if (id_priv == cur_id) | 2167 | if (id_priv == cur_id) |
2178 | continue; | 2168 | continue; |
2179 | 2169 | ||
2180 | if ((cur_id->state == CMA_LISTEN) || | 2170 | if ((cur_id->state == RDMA_CM_LISTEN) || |
2181 | !reuseaddr || !cur_id->reuseaddr) { | 2171 | !reuseaddr || !cur_id->reuseaddr) { |
2182 | cur_addr = (struct sockaddr *) &cur_id->id.route.addr.src_addr; | 2172 | cur_addr = (struct sockaddr *) &cur_id->id.route.addr.src_addr; |
2183 | if (cma_any_addr(cur_addr)) | 2173 | if (cma_any_addr(cur_addr)) |
@@ -2280,14 +2270,14 @@ int rdma_listen(struct rdma_cm_id *id, int backlog) | |||
2280 | int ret; | 2270 | int ret; |
2281 | 2271 | ||
2282 | id_priv = container_of(id, struct rdma_id_private, id); | 2272 | id_priv = container_of(id, struct rdma_id_private, id); |
2283 | if (id_priv->state == CMA_IDLE) { | 2273 | if (id_priv->state == RDMA_CM_IDLE) { |
2284 | ((struct sockaddr *) &id->route.addr.src_addr)->sa_family = AF_INET; | 2274 | ((struct sockaddr *) &id->route.addr.src_addr)->sa_family = AF_INET; |
2285 | ret = rdma_bind_addr(id, (struct sockaddr *) &id->route.addr.src_addr); | 2275 | ret = rdma_bind_addr(id, (struct sockaddr *) &id->route.addr.src_addr); |
2286 | if (ret) | 2276 | if (ret) |
2287 | return ret; | 2277 | return ret; |
2288 | } | 2278 | } |
2289 | 2279 | ||
2290 | if (!cma_comp_exch(id_priv, CMA_ADDR_BOUND, CMA_LISTEN)) | 2280 | if (!cma_comp_exch(id_priv, RDMA_CM_ADDR_BOUND, RDMA_CM_LISTEN)) |
2291 | return -EINVAL; | 2281 | return -EINVAL; |
2292 | 2282 | ||
2293 | if (id_priv->reuseaddr) { | 2283 | if (id_priv->reuseaddr) { |
@@ -2319,7 +2309,7 @@ int rdma_listen(struct rdma_cm_id *id, int backlog) | |||
2319 | return 0; | 2309 | return 0; |
2320 | err: | 2310 | err: |
2321 | id_priv->backlog = 0; | 2311 | id_priv->backlog = 0; |
2322 | cma_comp_exch(id_priv, CMA_LISTEN, CMA_ADDR_BOUND); | 2312 | cma_comp_exch(id_priv, RDMA_CM_LISTEN, RDMA_CM_ADDR_BOUND); |
2323 | return ret; | 2313 | return ret; |
2324 | } | 2314 | } |
2325 | EXPORT_SYMBOL(rdma_listen); | 2315 | EXPORT_SYMBOL(rdma_listen); |
@@ -2333,7 +2323,7 @@ int rdma_bind_addr(struct rdma_cm_id *id, struct sockaddr *addr) | |||
2333 | return -EAFNOSUPPORT; | 2323 | return -EAFNOSUPPORT; |
2334 | 2324 | ||
2335 | id_priv = container_of(id, struct rdma_id_private, id); | 2325 | id_priv = container_of(id, struct rdma_id_private, id); |
2336 | if (!cma_comp_exch(id_priv, CMA_IDLE, CMA_ADDR_BOUND)) | 2326 | if (!cma_comp_exch(id_priv, RDMA_CM_IDLE, RDMA_CM_ADDR_BOUND)) |
2337 | return -EINVAL; | 2327 | return -EINVAL; |
2338 | 2328 | ||
2339 | ret = cma_check_linklocal(&id->route.addr.dev_addr, addr); | 2329 | ret = cma_check_linklocal(&id->route.addr.dev_addr, addr); |
@@ -2360,7 +2350,7 @@ err2: | |||
2360 | if (id_priv->cma_dev) | 2350 | if (id_priv->cma_dev) |
2361 | cma_release_dev(id_priv); | 2351 | cma_release_dev(id_priv); |
2362 | err1: | 2352 | err1: |
2363 | cma_comp_exch(id_priv, CMA_ADDR_BOUND, CMA_IDLE); | 2353 | cma_comp_exch(id_priv, RDMA_CM_ADDR_BOUND, RDMA_CM_IDLE); |
2364 | return ret; | 2354 | return ret; |
2365 | } | 2355 | } |
2366 | EXPORT_SYMBOL(rdma_bind_addr); | 2356 | EXPORT_SYMBOL(rdma_bind_addr); |
@@ -2433,7 +2423,7 @@ static int cma_sidr_rep_handler(struct ib_cm_id *cm_id, | |||
2433 | struct ib_cm_sidr_rep_event_param *rep = &ib_event->param.sidr_rep_rcvd; | 2423 | struct ib_cm_sidr_rep_event_param *rep = &ib_event->param.sidr_rep_rcvd; |
2434 | int ret = 0; | 2424 | int ret = 0; |
2435 | 2425 | ||
2436 | if (cma_disable_callback(id_priv, CMA_CONNECT)) | 2426 | if (cma_disable_callback(id_priv, RDMA_CM_CONNECT)) |
2437 | return 0; | 2427 | return 0; |
2438 | 2428 | ||
2439 | memset(&event, 0, sizeof event); | 2429 | memset(&event, 0, sizeof event); |
@@ -2479,7 +2469,7 @@ static int cma_sidr_rep_handler(struct ib_cm_id *cm_id, | |||
2479 | if (ret) { | 2469 | if (ret) { |
2480 | /* Destroy the CM ID by returning a non-zero value. */ | 2470 | /* Destroy the CM ID by returning a non-zero value. */ |
2481 | id_priv->cm_id.ib = NULL; | 2471 | id_priv->cm_id.ib = NULL; |
2482 | cma_exch(id_priv, CMA_DESTROYING); | 2472 | cma_exch(id_priv, RDMA_CM_DESTROYING); |
2483 | mutex_unlock(&id_priv->handler_mutex); | 2473 | mutex_unlock(&id_priv->handler_mutex); |
2484 | rdma_destroy_id(&id_priv->id); | 2474 | rdma_destroy_id(&id_priv->id); |
2485 | return ret; | 2475 | return ret; |
@@ -2645,7 +2635,7 @@ int rdma_connect(struct rdma_cm_id *id, struct rdma_conn_param *conn_param) | |||
2645 | int ret; | 2635 | int ret; |
2646 | 2636 | ||
2647 | id_priv = container_of(id, struct rdma_id_private, id); | 2637 | id_priv = container_of(id, struct rdma_id_private, id); |
2648 | if (!cma_comp_exch(id_priv, CMA_ROUTE_RESOLVED, CMA_CONNECT)) | 2638 | if (!cma_comp_exch(id_priv, RDMA_CM_ROUTE_RESOLVED, RDMA_CM_CONNECT)) |
2649 | return -EINVAL; | 2639 | return -EINVAL; |
2650 | 2640 | ||
2651 | if (!id->qp) { | 2641 | if (!id->qp) { |
@@ -2672,7 +2662,7 @@ int rdma_connect(struct rdma_cm_id *id, struct rdma_conn_param *conn_param) | |||
2672 | 2662 | ||
2673 | return 0; | 2663 | return 0; |
2674 | err: | 2664 | err: |
2675 | cma_comp_exch(id_priv, CMA_CONNECT, CMA_ROUTE_RESOLVED); | 2665 | cma_comp_exch(id_priv, RDMA_CM_CONNECT, RDMA_CM_ROUTE_RESOLVED); |
2676 | return ret; | 2666 | return ret; |
2677 | } | 2667 | } |
2678 | EXPORT_SYMBOL(rdma_connect); | 2668 | EXPORT_SYMBOL(rdma_connect); |
@@ -2758,7 +2748,7 @@ int rdma_accept(struct rdma_cm_id *id, struct rdma_conn_param *conn_param) | |||
2758 | int ret; | 2748 | int ret; |
2759 | 2749 | ||
2760 | id_priv = container_of(id, struct rdma_id_private, id); | 2750 | id_priv = container_of(id, struct rdma_id_private, id); |
2761 | if (!cma_comp(id_priv, CMA_CONNECT)) | 2751 | if (!cma_comp(id_priv, RDMA_CM_CONNECT)) |
2762 | return -EINVAL; | 2752 | return -EINVAL; |
2763 | 2753 | ||
2764 | if (!id->qp && conn_param) { | 2754 | if (!id->qp && conn_param) { |
@@ -2887,8 +2877,8 @@ static int cma_ib_mc_handler(int status, struct ib_sa_multicast *multicast) | |||
2887 | int ret; | 2877 | int ret; |
2888 | 2878 | ||
2889 | id_priv = mc->id_priv; | 2879 | id_priv = mc->id_priv; |
2890 | if (cma_disable_callback(id_priv, CMA_ADDR_BOUND) && | 2880 | if (cma_disable_callback(id_priv, RDMA_CM_ADDR_BOUND) && |
2891 | cma_disable_callback(id_priv, CMA_ADDR_RESOLVED)) | 2881 | cma_disable_callback(id_priv, RDMA_CM_ADDR_RESOLVED)) |
2892 | return 0; | 2882 | return 0; |
2893 | 2883 | ||
2894 | mutex_lock(&id_priv->qp_mutex); | 2884 | mutex_lock(&id_priv->qp_mutex); |
@@ -2912,7 +2902,7 @@ static int cma_ib_mc_handler(int status, struct ib_sa_multicast *multicast) | |||
2912 | 2902 | ||
2913 | ret = id_priv->id.event_handler(&id_priv->id, &event); | 2903 | ret = id_priv->id.event_handler(&id_priv->id, &event); |
2914 | if (ret) { | 2904 | if (ret) { |
2915 | cma_exch(id_priv, CMA_DESTROYING); | 2905 | cma_exch(id_priv, RDMA_CM_DESTROYING); |
2916 | mutex_unlock(&id_priv->handler_mutex); | 2906 | mutex_unlock(&id_priv->handler_mutex); |
2917 | rdma_destroy_id(&id_priv->id); | 2907 | rdma_destroy_id(&id_priv->id); |
2918 | return 0; | 2908 | return 0; |
@@ -3095,8 +3085,8 @@ int rdma_join_multicast(struct rdma_cm_id *id, struct sockaddr *addr, | |||
3095 | int ret; | 3085 | int ret; |
3096 | 3086 | ||
3097 | id_priv = container_of(id, struct rdma_id_private, id); | 3087 | id_priv = container_of(id, struct rdma_id_private, id); |
3098 | if (!cma_comp(id_priv, CMA_ADDR_BOUND) && | 3088 | if (!cma_comp(id_priv, RDMA_CM_ADDR_BOUND) && |
3099 | !cma_comp(id_priv, CMA_ADDR_RESOLVED)) | 3089 | !cma_comp(id_priv, RDMA_CM_ADDR_RESOLVED)) |
3100 | return -EINVAL; | 3090 | return -EINVAL; |
3101 | 3091 | ||
3102 | mc = kmalloc(sizeof *mc, GFP_KERNEL); | 3092 | mc = kmalloc(sizeof *mc, GFP_KERNEL); |
@@ -3261,19 +3251,19 @@ static void cma_add_one(struct ib_device *device) | |||
3261 | static int cma_remove_id_dev(struct rdma_id_private *id_priv) | 3251 | static int cma_remove_id_dev(struct rdma_id_private *id_priv) |
3262 | { | 3252 | { |
3263 | struct rdma_cm_event event; | 3253 | struct rdma_cm_event event; |
3264 | enum cma_state state; | 3254 | enum rdma_cm_state state; |
3265 | int ret = 0; | 3255 | int ret = 0; |
3266 | 3256 | ||
3267 | /* Record that we want to remove the device */ | 3257 | /* Record that we want to remove the device */ |
3268 | state = cma_exch(id_priv, CMA_DEVICE_REMOVAL); | 3258 | state = cma_exch(id_priv, RDMA_CM_DEVICE_REMOVAL); |
3269 | if (state == CMA_DESTROYING) | 3259 | if (state == RDMA_CM_DESTROYING) |
3270 | return 0; | 3260 | return 0; |
3271 | 3261 | ||
3272 | cma_cancel_operation(id_priv, state); | 3262 | cma_cancel_operation(id_priv, state); |
3273 | mutex_lock(&id_priv->handler_mutex); | 3263 | mutex_lock(&id_priv->handler_mutex); |
3274 | 3264 | ||
3275 | /* Check for destruction from another callback. */ | 3265 | /* Check for destruction from another callback. */ |
3276 | if (!cma_comp(id_priv, CMA_DEVICE_REMOVAL)) | 3266 | if (!cma_comp(id_priv, RDMA_CM_DEVICE_REMOVAL)) |
3277 | goto out; | 3267 | goto out; |
3278 | 3268 | ||
3279 | memset(&event, 0, sizeof event); | 3269 | memset(&event, 0, sizeof event); |
diff --git a/include/rdma/rdma_cm.h b/include/rdma/rdma_cm.h index 169f7a53fb0c..d5b2265b7ce8 100644 --- a/include/rdma/rdma_cm.h +++ b/include/rdma/rdma_cm.h | |||
@@ -111,6 +111,20 @@ struct rdma_cm_event { | |||
111 | } param; | 111 | } param; |
112 | }; | 112 | }; |
113 | 113 | ||
114 | enum rdma_cm_state { | ||
115 | RDMA_CM_IDLE, | ||
116 | RDMA_CM_ADDR_QUERY, | ||
117 | RDMA_CM_ADDR_RESOLVED, | ||
118 | RDMA_CM_ROUTE_QUERY, | ||
119 | RDMA_CM_ROUTE_RESOLVED, | ||
120 | RDMA_CM_CONNECT, | ||
121 | RDMA_CM_DISCONNECT, | ||
122 | RDMA_CM_ADDR_BOUND, | ||
123 | RDMA_CM_LISTEN, | ||
124 | RDMA_CM_DEVICE_REMOVAL, | ||
125 | RDMA_CM_DESTROYING | ||
126 | }; | ||
127 | |||
114 | struct rdma_cm_id; | 128 | struct rdma_cm_id; |
115 | 129 | ||
116 | /** | 130 | /** |