aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband/hw/nes/nes_cm.c
diff options
context:
space:
mode:
authorGlenn Elliott <gelliott@cs.unc.edu>2012-03-04 19:47:13 -0500
committerGlenn Elliott <gelliott@cs.unc.edu>2012-03-04 19:47:13 -0500
commitc71c03bda1e86c9d5198c5d83f712e695c4f2a1e (patch)
treeecb166cb3e2b7e2adb3b5e292245fefd23381ac8 /drivers/infiniband/hw/nes/nes_cm.c
parentea53c912f8a86a8567697115b6a0d8152beee5c8 (diff)
parent6a00f206debf8a5c8899055726ad127dbeeed098 (diff)
Merge branch 'mpi-master' into wip-k-fmlpwip-k-fmlp
Conflicts: litmus/sched_cedf.c
Diffstat (limited to 'drivers/infiniband/hw/nes/nes_cm.c')
-rw-r--r--drivers/infiniband/hw/nes/nes_cm.c39
1 files changed, 21 insertions, 18 deletions
diff --git a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c
index 61e0efd4ccfb..e74cdf9ef471 100644
--- a/drivers/infiniband/hw/nes/nes_cm.c
+++ b/drivers/infiniband/hw/nes/nes_cm.c
@@ -1104,20 +1104,24 @@ static inline int mini_cm_accelerated(struct nes_cm_core *cm_core,
1104static int nes_addr_resolve_neigh(struct nes_vnic *nesvnic, u32 dst_ip, int arpindex) 1104static int nes_addr_resolve_neigh(struct nes_vnic *nesvnic, u32 dst_ip, int arpindex)
1105{ 1105{
1106 struct rtable *rt; 1106 struct rtable *rt;
1107 struct flowi fl;
1108 struct neighbour *neigh; 1107 struct neighbour *neigh;
1109 int rc = arpindex; 1108 int rc = arpindex;
1109 struct net_device *netdev;
1110 struct nes_adapter *nesadapter = nesvnic->nesdev->nesadapter; 1110 struct nes_adapter *nesadapter = nesvnic->nesdev->nesadapter;
1111 1111
1112 memset(&fl, 0, sizeof fl); 1112 rt = ip_route_output(&init_net, htonl(dst_ip), 0, 0, 0);
1113 fl.nl_u.ip4_u.daddr = htonl(dst_ip); 1113 if (IS_ERR(rt)) {
1114 if (ip_route_output_key(&init_net, &rt, &fl)) {
1115 printk(KERN_ERR "%s: ip_route_output_key failed for 0x%08X\n", 1114 printk(KERN_ERR "%s: ip_route_output_key failed for 0x%08X\n",
1116 __func__, dst_ip); 1115 __func__, dst_ip);
1117 return rc; 1116 return rc;
1118 } 1117 }
1119 1118
1120 neigh = neigh_lookup(&arp_tbl, &rt->rt_gateway, nesvnic->netdev); 1119 if (netif_is_bond_slave(nesvnic->netdev))
1120 netdev = nesvnic->netdev->master;
1121 else
1122 netdev = nesvnic->netdev;
1123
1124 neigh = neigh_lookup(&arp_tbl, &rt->rt_gateway, netdev);
1121 if (neigh) { 1125 if (neigh) {
1122 if (neigh->nud_state & NUD_VALID) { 1126 if (neigh->nud_state & NUD_VALID) {
1123 nes_debug(NES_DBG_CM, "Neighbor MAC address for 0x%08X" 1127 nes_debug(NES_DBG_CM, "Neighbor MAC address for 0x%08X"
@@ -1393,7 +1397,7 @@ static void handle_fin_pkt(struct nes_cm_node *cm_node)
1393 cleanup_retrans_entry(cm_node); 1397 cleanup_retrans_entry(cm_node);
1394 cm_node->state = NES_CM_STATE_CLOSING; 1398 cm_node->state = NES_CM_STATE_CLOSING;
1395 send_ack(cm_node, NULL); 1399 send_ack(cm_node, NULL);
1396 /* Wait for ACK as this is simultanous close.. 1400 /* Wait for ACK as this is simultaneous close..
1397 * After we receive ACK, do not send anything.. 1401 * After we receive ACK, do not send anything..
1398 * Just rm the node.. Done.. */ 1402 * Just rm the node.. Done.. */
1399 break; 1403 break;
@@ -1424,7 +1428,6 @@ static void handle_rst_pkt(struct nes_cm_node *cm_node, struct sk_buff *skb,
1424{ 1428{
1425 1429
1426 int reset = 0; /* whether to send reset in case of err.. */ 1430 int reset = 0; /* whether to send reset in case of err.. */
1427 int passive_state;
1428 atomic_inc(&cm_resets_recvd); 1431 atomic_inc(&cm_resets_recvd);
1429 nes_debug(NES_DBG_CM, "Received Reset, cm_node = %p, state = %u." 1432 nes_debug(NES_DBG_CM, "Received Reset, cm_node = %p, state = %u."
1430 " refcnt=%d\n", cm_node, cm_node->state, 1433 " refcnt=%d\n", cm_node, cm_node->state,
@@ -1439,7 +1442,7 @@ static void handle_rst_pkt(struct nes_cm_node *cm_node, struct sk_buff *skb,
1439 active_open_err(cm_node, skb, reset); 1442 active_open_err(cm_node, skb, reset);
1440 break; 1443 break;
1441 case NES_CM_STATE_MPAREQ_RCVD: 1444 case NES_CM_STATE_MPAREQ_RCVD:
1442 passive_state = atomic_add_return(1, &cm_node->passive_state); 1445 atomic_inc(&cm_node->passive_state);
1443 dev_kfree_skb_any(skb); 1446 dev_kfree_skb_any(skb);
1444 break; 1447 break;
1445 case NES_CM_STATE_ESTABLISHED: 1448 case NES_CM_STATE_ESTABLISHED:
@@ -2560,7 +2563,7 @@ static int nes_cm_disconn_true(struct nes_qp *nesqp)
2560 u16 last_ae; 2563 u16 last_ae;
2561 u8 original_hw_tcp_state; 2564 u8 original_hw_tcp_state;
2562 u8 original_ibqp_state; 2565 u8 original_ibqp_state;
2563 enum iw_cm_event_status disconn_status = IW_CM_EVENT_STATUS_OK; 2566 int disconn_status = 0;
2564 int issue_disconn = 0; 2567 int issue_disconn = 0;
2565 int issue_close = 0; 2568 int issue_close = 0;
2566 int issue_flush = 0; 2569 int issue_flush = 0;
@@ -2602,7 +2605,7 @@ static int nes_cm_disconn_true(struct nes_qp *nesqp)
2602 (last_ae == NES_AEQE_AEID_LLP_CONNECTION_RESET))) { 2605 (last_ae == NES_AEQE_AEID_LLP_CONNECTION_RESET))) {
2603 issue_disconn = 1; 2606 issue_disconn = 1;
2604 if (last_ae == NES_AEQE_AEID_LLP_CONNECTION_RESET) 2607 if (last_ae == NES_AEQE_AEID_LLP_CONNECTION_RESET)
2605 disconn_status = IW_CM_EVENT_STATUS_RESET; 2608 disconn_status = -ECONNRESET;
2606 } 2609 }
2607 2610
2608 if (((original_hw_tcp_state == NES_AEQE_TCP_STATE_CLOSED) || 2611 if (((original_hw_tcp_state == NES_AEQE_TCP_STATE_CLOSED) ||
@@ -2663,7 +2666,7 @@ static int nes_cm_disconn_true(struct nes_qp *nesqp)
2663 cm_id->provider_data = nesqp; 2666 cm_id->provider_data = nesqp;
2664 /* Send up the close complete event */ 2667 /* Send up the close complete event */
2665 cm_event.event = IW_CM_EVENT_CLOSE; 2668 cm_event.event = IW_CM_EVENT_CLOSE;
2666 cm_event.status = IW_CM_EVENT_STATUS_OK; 2669 cm_event.status = 0;
2667 cm_event.provider_data = cm_id->provider_data; 2670 cm_event.provider_data = cm_id->provider_data;
2668 cm_event.local_addr = cm_id->local_addr; 2671 cm_event.local_addr = cm_id->local_addr;
2669 cm_event.remote_addr = cm_id->remote_addr; 2672 cm_event.remote_addr = cm_id->remote_addr;
@@ -2701,7 +2704,7 @@ static int nes_disconnect(struct nes_qp *nesqp, int abrupt)
2701 nesibdev = nesvnic->nesibdev; 2704 nesibdev = nesvnic->nesibdev;
2702 2705
2703 nes_debug(NES_DBG_CM, "netdev refcnt = %u.\n", 2706 nes_debug(NES_DBG_CM, "netdev refcnt = %u.\n",
2704 atomic_read(&nesvnic->netdev->refcnt)); 2707 netdev_refcnt_read(nesvnic->netdev));
2705 2708
2706 if (nesqp->active_conn) { 2709 if (nesqp->active_conn) {
2707 2710
@@ -2791,7 +2794,7 @@ int nes_accept(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
2791 atomic_inc(&cm_accepts); 2794 atomic_inc(&cm_accepts);
2792 2795
2793 nes_debug(NES_DBG_CM, "netdev refcnt = %u.\n", 2796 nes_debug(NES_DBG_CM, "netdev refcnt = %u.\n",
2794 atomic_read(&nesvnic->netdev->refcnt)); 2797 netdev_refcnt_read(nesvnic->netdev));
2795 2798
2796 /* allocate the ietf frame and space for private data */ 2799 /* allocate the ietf frame and space for private data */
2797 nesqp->ietf_frame = pci_alloc_consistent(nesdev->pcidev, 2800 nesqp->ietf_frame = pci_alloc_consistent(nesdev->pcidev,
@@ -2963,7 +2966,7 @@ int nes_accept(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
2963 nes_add_ref(&nesqp->ibqp); 2966 nes_add_ref(&nesqp->ibqp);
2964 2967
2965 cm_event.event = IW_CM_EVENT_ESTABLISHED; 2968 cm_event.event = IW_CM_EVENT_ESTABLISHED;
2966 cm_event.status = IW_CM_EVENT_STATUS_ACCEPTED; 2969 cm_event.status = 0;
2967 cm_event.provider_data = (void *)nesqp; 2970 cm_event.provider_data = (void *)nesqp;
2968 cm_event.local_addr = cm_id->local_addr; 2971 cm_event.local_addr = cm_id->local_addr;
2969 cm_event.remote_addr = cm_id->remote_addr; 2972 cm_event.remote_addr = cm_id->remote_addr;
@@ -3374,7 +3377,7 @@ static void cm_event_connected(struct nes_cm_event *event)
3374 3377
3375 /* notify OF layer we successfully created the requested connection */ 3378 /* notify OF layer we successfully created the requested connection */
3376 cm_event.event = IW_CM_EVENT_CONNECT_REPLY; 3379 cm_event.event = IW_CM_EVENT_CONNECT_REPLY;
3377 cm_event.status = IW_CM_EVENT_STATUS_ACCEPTED; 3380 cm_event.status = 0;
3378 cm_event.provider_data = cm_id->provider_data; 3381 cm_event.provider_data = cm_id->provider_data;
3379 cm_event.local_addr.sin_family = AF_INET; 3382 cm_event.local_addr.sin_family = AF_INET;
3380 cm_event.local_addr.sin_port = cm_id->local_addr.sin_port; 3383 cm_event.local_addr.sin_port = cm_id->local_addr.sin_port;
@@ -3481,7 +3484,7 @@ static void cm_event_reset(struct nes_cm_event *event)
3481 nesqp->cm_id = NULL; 3484 nesqp->cm_id = NULL;
3482 /* cm_id->provider_data = NULL; */ 3485 /* cm_id->provider_data = NULL; */
3483 cm_event.event = IW_CM_EVENT_DISCONNECT; 3486 cm_event.event = IW_CM_EVENT_DISCONNECT;
3484 cm_event.status = IW_CM_EVENT_STATUS_RESET; 3487 cm_event.status = -ECONNRESET;
3485 cm_event.provider_data = cm_id->provider_data; 3488 cm_event.provider_data = cm_id->provider_data;
3486 cm_event.local_addr = cm_id->local_addr; 3489 cm_event.local_addr = cm_id->local_addr;
3487 cm_event.remote_addr = cm_id->remote_addr; 3490 cm_event.remote_addr = cm_id->remote_addr;
@@ -3492,7 +3495,7 @@ static void cm_event_reset(struct nes_cm_event *event)
3492 ret = cm_id->event_handler(cm_id, &cm_event); 3495 ret = cm_id->event_handler(cm_id, &cm_event);
3493 atomic_inc(&cm_closes); 3496 atomic_inc(&cm_closes);
3494 cm_event.event = IW_CM_EVENT_CLOSE; 3497 cm_event.event = IW_CM_EVENT_CLOSE;
3495 cm_event.status = IW_CM_EVENT_STATUS_OK; 3498 cm_event.status = 0;
3496 cm_event.provider_data = cm_id->provider_data; 3499 cm_event.provider_data = cm_id->provider_data;
3497 cm_event.local_addr = cm_id->local_addr; 3500 cm_event.local_addr = cm_id->local_addr;
3498 cm_event.remote_addr = cm_id->remote_addr; 3501 cm_event.remote_addr = cm_id->remote_addr;
@@ -3531,7 +3534,7 @@ static void cm_event_mpa_req(struct nes_cm_event *event)
3531 cm_node, cm_id, jiffies); 3534 cm_node, cm_id, jiffies);
3532 3535
3533 cm_event.event = IW_CM_EVENT_CONNECT_REQUEST; 3536 cm_event.event = IW_CM_EVENT_CONNECT_REQUEST;
3534 cm_event.status = IW_CM_EVENT_STATUS_OK; 3537 cm_event.status = 0;
3535 cm_event.provider_data = (void *)cm_node; 3538 cm_event.provider_data = (void *)cm_node;
3536 3539
3537 cm_event.local_addr.sin_family = AF_INET; 3540 cm_event.local_addr.sin_family = AF_INET;