aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/infiniband/hw/nes/nes.c25
-rw-r--r--drivers/infiniband/hw/nes/nes_cm.c351
-rw-r--r--drivers/infiniband/hw/nes/nes_cm.h11
-rw-r--r--drivers/infiniband/hw/nes/nes_verbs.c2
4 files changed, 80 insertions, 309 deletions
diff --git a/drivers/infiniband/hw/nes/nes.c b/drivers/infiniband/hw/nes/nes.c
index 9f9d5c563a61..35cbb17bec12 100644
--- a/drivers/infiniband/hw/nes/nes.c
+++ b/drivers/infiniband/hw/nes/nes.c
@@ -111,17 +111,6 @@ static struct pci_device_id nes_pci_table[] = {
111 111
112MODULE_DEVICE_TABLE(pci, nes_pci_table); 112MODULE_DEVICE_TABLE(pci, nes_pci_table);
113 113
114/* registered nes netlink callbacks */
115static struct ibnl_client_cbs nes_nl_cb_table[] = {
116 [RDMA_NL_IWPM_REG_PID] = {.dump = iwpm_register_pid_cb},
117 [RDMA_NL_IWPM_ADD_MAPPING] = {.dump = iwpm_add_mapping_cb},
118 [RDMA_NL_IWPM_QUERY_MAPPING] = {.dump = iwpm_add_and_query_mapping_cb},
119 [RDMA_NL_IWPM_REMOTE_INFO] = {.dump = iwpm_remote_info_cb},
120 [RDMA_NL_IWPM_HANDLE_ERR] = {.dump = iwpm_mapping_error_cb},
121 [RDMA_NL_IWPM_MAPINFO] = {.dump = iwpm_mapping_info_cb},
122 [RDMA_NL_IWPM_MAPINFO_NUM] = {.dump = iwpm_ack_mapping_info_cb}
123};
124
125static int nes_inetaddr_event(struct notifier_block *, unsigned long, void *); 114static int nes_inetaddr_event(struct notifier_block *, unsigned long, void *);
126static int nes_net_event(struct notifier_block *, unsigned long, void *); 115static int nes_net_event(struct notifier_block *, unsigned long, void *);
127static int nes_notifiers_registered; 116static int nes_notifiers_registered;
@@ -682,17 +671,6 @@ static int nes_probe(struct pci_dev *pcidev, const struct pci_device_id *ent)
682 } 671 }
683 nes_notifiers_registered++; 672 nes_notifiers_registered++;
684 673
685 if (ibnl_add_client(RDMA_NL_NES, RDMA_NL_IWPM_NUM_OPS, nes_nl_cb_table))
686 printk(KERN_ERR PFX "%s[%u]: Failed to add netlink callback\n",
687 __func__, __LINE__);
688
689 ret = iwpm_init(RDMA_NL_NES);
690 if (ret) {
691 printk(KERN_ERR PFX "%s: port mapper initialization failed\n",
692 pci_name(pcidev));
693 goto bail7;
694 }
695
696 INIT_DELAYED_WORK(&nesdev->work, nes_recheck_link_status); 674 INIT_DELAYED_WORK(&nesdev->work, nes_recheck_link_status);
697 675
698 /* Initialize network devices */ 676 /* Initialize network devices */
@@ -731,7 +709,6 @@ static int nes_probe(struct pci_dev *pcidev, const struct pci_device_id *ent)
731 709
732 nes_debug(NES_DBG_INIT, "netdev_count=%d, nesadapter->netdev_count=%d\n", 710 nes_debug(NES_DBG_INIT, "netdev_count=%d, nesadapter->netdev_count=%d\n",
733 nesdev->netdev_count, nesdev->nesadapter->netdev_count); 711 nesdev->netdev_count, nesdev->nesadapter->netdev_count);
734 ibnl_remove_client(RDMA_NL_NES);
735 712
736 nes_notifiers_registered--; 713 nes_notifiers_registered--;
737 if (nes_notifiers_registered == 0) { 714 if (nes_notifiers_registered == 0) {
@@ -795,8 +772,6 @@ static void nes_remove(struct pci_dev *pcidev)
795 nesdev->nesadapter->netdev_count--; 772 nesdev->nesadapter->netdev_count--;
796 } 773 }
797 } 774 }
798 ibnl_remove_client(RDMA_NL_NES);
799 iwpm_exit(RDMA_NL_NES);
800 775
801 nes_notifiers_registered--; 776 nes_notifiers_registered--;
802 if (nes_notifiers_registered == 0) { 777 if (nes_notifiers_registered == 0) {
diff --git a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c
index cb9f0f27308d..7374bed4c396 100644
--- a/drivers/infiniband/hw/nes/nes_cm.c
+++ b/drivers/infiniband/hw/nes/nes_cm.c
@@ -482,11 +482,11 @@ static void form_cm_frame(struct sk_buff *skb,
482 iph->ttl = 0x40; 482 iph->ttl = 0x40;
483 iph->protocol = 0x06; /* IPPROTO_TCP */ 483 iph->protocol = 0x06; /* IPPROTO_TCP */
484 484
485 iph->saddr = htonl(cm_node->mapped_loc_addr); 485 iph->saddr = htonl(cm_node->loc_addr);
486 iph->daddr = htonl(cm_node->mapped_rem_addr); 486 iph->daddr = htonl(cm_node->rem_addr);
487 487
488 tcph->source = htons(cm_node->mapped_loc_port); 488 tcph->source = htons(cm_node->loc_port);
489 tcph->dest = htons(cm_node->mapped_rem_port); 489 tcph->dest = htons(cm_node->rem_port);
490 tcph->seq = htonl(cm_node->tcp_cntxt.loc_seq_num); 490 tcph->seq = htonl(cm_node->tcp_cntxt.loc_seq_num);
491 491
492 if (flags & SET_ACK) { 492 if (flags & SET_ACK) {
@@ -525,125 +525,6 @@ static void form_cm_frame(struct sk_buff *skb,
525 cm_packets_created++; 525 cm_packets_created++;
526} 526}
527 527
528/*
529 * nes_create_sockaddr - Record ip addr and tcp port in a sockaddr struct
530 */
531static void nes_create_sockaddr(__be32 ip_addr, __be16 port,
532 struct sockaddr_storage *addr)
533{
534 struct sockaddr_in *nes_sockaddr = (struct sockaddr_in *)addr;
535 nes_sockaddr->sin_family = AF_INET;
536 memcpy(&nes_sockaddr->sin_addr.s_addr, &ip_addr, sizeof(__be32));
537 nes_sockaddr->sin_port = port;
538}
539
540/*
541 * nes_create_mapinfo - Create a mapinfo object in the port mapper data base
542 */
543static int nes_create_mapinfo(struct nes_cm_info *cm_info)
544{
545 struct sockaddr_storage local_sockaddr;
546 struct sockaddr_storage mapped_sockaddr;
547
548 nes_create_sockaddr(htonl(cm_info->loc_addr), htons(cm_info->loc_port),
549 &local_sockaddr);
550 nes_create_sockaddr(htonl(cm_info->mapped_loc_addr),
551 htons(cm_info->mapped_loc_port), &mapped_sockaddr);
552
553 return iwpm_create_mapinfo(&local_sockaddr,
554 &mapped_sockaddr, RDMA_NL_NES);
555}
556
557/*
558 * nes_remove_mapinfo - Remove a mapinfo object from the port mapper data base
559 * and send a remove mapping op message to
560 * the userspace port mapper
561 */
562static int nes_remove_mapinfo(u32 loc_addr, u16 loc_port,
563 u32 mapped_loc_addr, u16 mapped_loc_port)
564{
565 struct sockaddr_storage local_sockaddr;
566 struct sockaddr_storage mapped_sockaddr;
567
568 nes_create_sockaddr(htonl(loc_addr), htons(loc_port), &local_sockaddr);
569 nes_create_sockaddr(htonl(mapped_loc_addr), htons(mapped_loc_port),
570 &mapped_sockaddr);
571
572 iwpm_remove_mapinfo(&local_sockaddr, &mapped_sockaddr);
573 return iwpm_remove_mapping(&local_sockaddr, RDMA_NL_NES);
574}
575
576/*
577 * nes_form_pm_msg - Form a port mapper message with mapping info
578 */
579static void nes_form_pm_msg(struct nes_cm_info *cm_info,
580 struct iwpm_sa_data *pm_msg)
581{
582 nes_create_sockaddr(htonl(cm_info->loc_addr), htons(cm_info->loc_port),
583 &pm_msg->loc_addr);
584 nes_create_sockaddr(htonl(cm_info->rem_addr), htons(cm_info->rem_port),
585 &pm_msg->rem_addr);
586}
587
588/*
589 * nes_form_reg_msg - Form a port mapper message with dev info
590 */
591static void nes_form_reg_msg(struct nes_vnic *nesvnic,
592 struct iwpm_dev_data *pm_msg)
593{
594 memcpy(pm_msg->dev_name, nesvnic->nesibdev->ibdev.name,
595 IWPM_DEVNAME_SIZE);
596 memcpy(pm_msg->if_name, nesvnic->netdev->name, IWPM_IFNAME_SIZE);
597}
598
599static void record_sockaddr_info(struct sockaddr_storage *addr_info,
600 nes_addr_t *ip_addr, u16 *port_num)
601{
602 struct sockaddr_in *in_addr = (struct sockaddr_in *)addr_info;
603
604 if (in_addr->sin_family == AF_INET) {
605 *ip_addr = ntohl(in_addr->sin_addr.s_addr);
606 *port_num = ntohs(in_addr->sin_port);
607 }
608}
609
610/*
611 * nes_record_pm_msg - Save the received mapping info
612 */
613static void nes_record_pm_msg(struct nes_cm_info *cm_info,
614 struct iwpm_sa_data *pm_msg)
615{
616 record_sockaddr_info(&pm_msg->mapped_loc_addr,
617 &cm_info->mapped_loc_addr, &cm_info->mapped_loc_port);
618
619 record_sockaddr_info(&pm_msg->mapped_rem_addr,
620 &cm_info->mapped_rem_addr, &cm_info->mapped_rem_port);
621}
622
623/*
624 * nes_get_reminfo - Get the address info of the remote connecting peer
625 */
626static int nes_get_remote_addr(struct nes_cm_node *cm_node)
627{
628 struct sockaddr_storage mapped_loc_addr, mapped_rem_addr;
629 struct sockaddr_storage remote_addr;
630 int ret;
631
632 nes_create_sockaddr(htonl(cm_node->mapped_loc_addr),
633 htons(cm_node->mapped_loc_port), &mapped_loc_addr);
634 nes_create_sockaddr(htonl(cm_node->mapped_rem_addr),
635 htons(cm_node->mapped_rem_port), &mapped_rem_addr);
636
637 ret = iwpm_get_remote_info(&mapped_loc_addr, &mapped_rem_addr,
638 &remote_addr, RDMA_NL_NES);
639 if (ret)
640 nes_debug(NES_DBG_CM, "Unable to find remote peer address info\n");
641 else
642 record_sockaddr_info(&remote_addr, &cm_node->rem_addr,
643 &cm_node->rem_port);
644 return ret;
645}
646
647/** 528/**
648 * print_core - dump a cm core 529 * print_core - dump a cm core
649 */ 530 */
@@ -1266,11 +1147,10 @@ static struct nes_cm_node *find_node(struct nes_cm_core *cm_core,
1266 loc_addr, loc_port, 1147 loc_addr, loc_port,
1267 cm_node->rem_addr, cm_node->rem_port, 1148 cm_node->rem_addr, cm_node->rem_port,
1268 rem_addr, rem_port); 1149 rem_addr, rem_port);
1269 if ((cm_node->mapped_loc_addr == loc_addr) && 1150 if ((cm_node->loc_addr == loc_addr) &&
1270 (cm_node->mapped_loc_port == loc_port) && 1151 (cm_node->loc_port == loc_port) &&
1271 (cm_node->mapped_rem_addr == rem_addr) && 1152 (cm_node->rem_addr == rem_addr) &&
1272 (cm_node->mapped_rem_port == rem_port)) { 1153 (cm_node->rem_port == rem_port)) {
1273
1274 add_ref_cm_node(cm_node); 1154 add_ref_cm_node(cm_node);
1275 spin_unlock_irqrestore(&cm_core->ht_lock, flags); 1155 spin_unlock_irqrestore(&cm_core->ht_lock, flags);
1276 return cm_node; 1156 return cm_node;
@@ -1287,8 +1167,8 @@ static struct nes_cm_node *find_node(struct nes_cm_core *cm_core,
1287 * find_listener - find a cm node listening on this addr-port pair 1167 * find_listener - find a cm node listening on this addr-port pair
1288 */ 1168 */
1289static struct nes_cm_listener *find_listener(struct nes_cm_core *cm_core, 1169static struct nes_cm_listener *find_listener(struct nes_cm_core *cm_core,
1290 nes_addr_t dst_addr, u16 dst_port, 1170 nes_addr_t dst_addr, u16 dst_port,
1291 enum nes_cm_listener_state listener_state, int local) 1171 enum nes_cm_listener_state listener_state)
1292{ 1172{
1293 unsigned long flags; 1173 unsigned long flags;
1294 struct nes_cm_listener *listen_node; 1174 struct nes_cm_listener *listen_node;
@@ -1298,13 +1178,9 @@ static struct nes_cm_listener *find_listener(struct nes_cm_core *cm_core,
1298 /* walk list and find cm_node associated with this session ID */ 1178 /* walk list and find cm_node associated with this session ID */
1299 spin_lock_irqsave(&cm_core->listen_list_lock, flags); 1179 spin_lock_irqsave(&cm_core->listen_list_lock, flags);
1300 list_for_each_entry(listen_node, &cm_core->listen_list.list, list) { 1180 list_for_each_entry(listen_node, &cm_core->listen_list.list, list) {
1301 if (local) { 1181 listen_addr = listen_node->loc_addr;
1302 listen_addr = listen_node->loc_addr; 1182 listen_port = listen_node->loc_port;
1303 listen_port = listen_node->loc_port; 1183
1304 } else {
1305 listen_addr = listen_node->mapped_loc_addr;
1306 listen_port = listen_node->mapped_loc_port;
1307 }
1308 /* compare node pair, return node handle if a match */ 1184 /* compare node pair, return node handle if a match */
1309 if (((listen_addr == dst_addr) || 1185 if (((listen_addr == dst_addr) ||
1310 listen_addr == 0x00000000) && 1186 listen_addr == 0x00000000) &&
@@ -1443,17 +1319,13 @@ static int mini_cm_dec_refcnt_listen(struct nes_cm_core *cm_core,
1443 1319
1444 if (listener->nesvnic) { 1320 if (listener->nesvnic) {
1445 nes_manage_apbvt(listener->nesvnic, 1321 nes_manage_apbvt(listener->nesvnic,
1446 listener->mapped_loc_port, 1322 listener->loc_port,
1447 PCI_FUNC(listener->nesvnic->nesdev->pcidev->devfn), 1323 PCI_FUNC(listener->nesvnic->nesdev->pcidev->devfn),
1448 NES_MANAGE_APBVT_DEL); 1324 NES_MANAGE_APBVT_DEL);
1449 1325
1450 nes_remove_mapinfo(listener->loc_addr,
1451 listener->loc_port,
1452 listener->mapped_loc_addr,
1453 listener->mapped_loc_port);
1454 nes_debug(NES_DBG_NLMSG, 1326 nes_debug(NES_DBG_NLMSG,
1455 "Delete APBVT mapped_loc_port = %04X\n", 1327 "Delete APBVT loc_port = %04X\n",
1456 listener->mapped_loc_port); 1328 listener->loc_port);
1457 } 1329 }
1458 1330
1459 nes_debug(NES_DBG_CM, "destroying listener (%p)\n", listener); 1331 nes_debug(NES_DBG_CM, "destroying listener (%p)\n", listener);
@@ -1602,11 +1474,6 @@ static struct nes_cm_node *make_cm_node(struct nes_cm_core *cm_core,
1602 cm_node->rem_addr = cm_info->rem_addr; 1474 cm_node->rem_addr = cm_info->rem_addr;
1603 cm_node->rem_port = cm_info->rem_port; 1475 cm_node->rem_port = cm_info->rem_port;
1604 1476
1605 cm_node->mapped_loc_addr = cm_info->mapped_loc_addr;
1606 cm_node->mapped_rem_addr = cm_info->mapped_rem_addr;
1607 cm_node->mapped_loc_port = cm_info->mapped_loc_port;
1608 cm_node->mapped_rem_port = cm_info->mapped_rem_port;
1609
1610 cm_node->mpa_frame_rev = mpa_version; 1477 cm_node->mpa_frame_rev = mpa_version;
1611 cm_node->send_rdma0_op = SEND_RDMA_READ_ZERO; 1478 cm_node->send_rdma0_op = SEND_RDMA_READ_ZERO;
1612 cm_node->mpav2_ird_ord = 0; 1479 cm_node->mpav2_ird_ord = 0;
@@ -1655,10 +1522,10 @@ static struct nes_cm_node *make_cm_node(struct nes_cm_core *cm_core,
1655 cm_node->loopbackpartner = NULL; 1522 cm_node->loopbackpartner = NULL;
1656 1523
1657 /* get the mac addr for the remote node */ 1524 /* get the mac addr for the remote node */
1658 oldarpindex = nes_arp_table(nesdev, cm_node->mapped_rem_addr, 1525 oldarpindex = nes_arp_table(nesdev, cm_node->rem_addr,
1659 NULL, NES_ARP_RESOLVE); 1526 NULL, NES_ARP_RESOLVE);
1660 arpindex = nes_addr_resolve_neigh(nesvnic, 1527 arpindex = nes_addr_resolve_neigh(nesvnic, cm_node->rem_addr,
1661 cm_node->mapped_rem_addr, oldarpindex); 1528 oldarpindex);
1662 if (arpindex < 0) { 1529 if (arpindex < 0) {
1663 kfree(cm_node); 1530 kfree(cm_node);
1664 return NULL; 1531 return NULL;
@@ -1720,14 +1587,12 @@ static int rem_ref_cm_node(struct nes_cm_core *cm_core,
1720 mini_cm_dec_refcnt_listen(cm_core, cm_node->listener, 0); 1587 mini_cm_dec_refcnt_listen(cm_core, cm_node->listener, 0);
1721 } else { 1588 } else {
1722 if (cm_node->apbvt_set && cm_node->nesvnic) { 1589 if (cm_node->apbvt_set && cm_node->nesvnic) {
1723 nes_manage_apbvt(cm_node->nesvnic, cm_node->mapped_loc_port, 1590 nes_manage_apbvt(cm_node->nesvnic, cm_node->loc_port,
1724 PCI_FUNC(cm_node->nesvnic->nesdev->pcidev->devfn), 1591 PCI_FUNC(cm_node->nesvnic->nesdev->pcidev->devfn),
1725 NES_MANAGE_APBVT_DEL); 1592 NES_MANAGE_APBVT_DEL);
1726 } 1593 }
1727 nes_debug(NES_DBG_NLMSG, "Delete APBVT mapped_loc_port = %04X\n", 1594 nes_debug(NES_DBG_NLMSG, "Delete APBVT loc_port = %04X\n",
1728 cm_node->mapped_loc_port); 1595 cm_node->loc_port);
1729 nes_remove_mapinfo(cm_node->loc_addr, cm_node->loc_port,
1730 cm_node->mapped_loc_addr, cm_node->mapped_loc_port);
1731 } 1596 }
1732 1597
1733 atomic_dec(&cm_core->node_cnt); 1598 atomic_dec(&cm_core->node_cnt);
@@ -2184,7 +2049,6 @@ static int handle_ack_pkt(struct nes_cm_node *cm_node, struct sk_buff *skb,
2184 cm_node->state = NES_CM_STATE_ESTABLISHED; 2049 cm_node->state = NES_CM_STATE_ESTABLISHED;
2185 if (datasize) { 2050 if (datasize) {
2186 cm_node->tcp_cntxt.rcv_nxt = inc_sequence + datasize; 2051 cm_node->tcp_cntxt.rcv_nxt = inc_sequence + datasize;
2187 nes_get_remote_addr(cm_node);
2188 handle_rcv_mpa(cm_node, skb); 2052 handle_rcv_mpa(cm_node, skb);
2189 } else { /* rcvd ACK only */ 2053 } else { /* rcvd ACK only */
2190 dev_kfree_skb_any(skb); 2054 dev_kfree_skb_any(skb);
@@ -2399,17 +2263,14 @@ static struct nes_cm_listener *mini_cm_listen(struct nes_cm_core *cm_core,
2399 struct nes_vnic *nesvnic, struct nes_cm_info *cm_info) 2263 struct nes_vnic *nesvnic, struct nes_cm_info *cm_info)
2400{ 2264{
2401 struct nes_cm_listener *listener; 2265 struct nes_cm_listener *listener;
2402 struct iwpm_dev_data pm_reg_msg;
2403 struct iwpm_sa_data pm_msg;
2404 unsigned long flags; 2266 unsigned long flags;
2405 int iwpm_err = 0;
2406 2267
2407 nes_debug(NES_DBG_CM, "Search for 0x%08x : 0x%04x\n", 2268 nes_debug(NES_DBG_CM, "Search for 0x%08x : 0x%04x\n",
2408 cm_info->loc_addr, cm_info->loc_port); 2269 cm_info->loc_addr, cm_info->loc_port);
2409 2270
2410 /* cannot have multiple matching listeners */ 2271 /* cannot have multiple matching listeners */
2411 listener = find_listener(cm_core, cm_info->loc_addr, cm_info->loc_port, 2272 listener = find_listener(cm_core, cm_info->loc_addr, cm_info->loc_port,
2412 NES_CM_LISTENER_EITHER_STATE, 1); 2273 NES_CM_LISTENER_EITHER_STATE);
2413 2274
2414 if (listener && listener->listener_state == NES_CM_LISTENER_ACTIVE_STATE) { 2275 if (listener && listener->listener_state == NES_CM_LISTENER_ACTIVE_STATE) {
2415 /* find automatically incs ref count ??? */ 2276 /* find automatically incs ref count ??? */
@@ -2419,22 +2280,6 @@ static struct nes_cm_listener *mini_cm_listen(struct nes_cm_core *cm_core,
2419 } 2280 }
2420 2281
2421 if (!listener) { 2282 if (!listener) {
2422 nes_form_reg_msg(nesvnic, &pm_reg_msg);
2423 iwpm_err = iwpm_register_pid(&pm_reg_msg, RDMA_NL_NES);
2424 if (iwpm_err) {
2425 nes_debug(NES_DBG_NLMSG,
2426 "Port Mapper reg pid fail (err = %d).\n", iwpm_err);
2427 }
2428 if (iwpm_valid_pid() && !iwpm_err) {
2429 nes_form_pm_msg(cm_info, &pm_msg);
2430 iwpm_err = iwpm_add_mapping(&pm_msg, RDMA_NL_NES);
2431 if (iwpm_err)
2432 nes_debug(NES_DBG_NLMSG,
2433 "Port Mapper query fail (err = %d).\n", iwpm_err);
2434 else
2435 nes_record_pm_msg(cm_info, &pm_msg);
2436 }
2437
2438 /* create a CM listen node (1/2 node to compare incoming traffic to) */ 2283 /* create a CM listen node (1/2 node to compare incoming traffic to) */
2439 listener = kzalloc(sizeof(*listener), GFP_ATOMIC); 2284 listener = kzalloc(sizeof(*listener), GFP_ATOMIC);
2440 if (!listener) { 2285 if (!listener) {
@@ -2444,8 +2289,6 @@ static struct nes_cm_listener *mini_cm_listen(struct nes_cm_core *cm_core,
2444 2289
2445 listener->loc_addr = cm_info->loc_addr; 2290 listener->loc_addr = cm_info->loc_addr;
2446 listener->loc_port = cm_info->loc_port; 2291 listener->loc_port = cm_info->loc_port;
2447 listener->mapped_loc_addr = cm_info->mapped_loc_addr;
2448 listener->mapped_loc_port = cm_info->mapped_loc_port;
2449 listener->reused_node = 0; 2292 listener->reused_node = 0;
2450 2293
2451 atomic_set(&listener->ref_count, 1); 2294 atomic_set(&listener->ref_count, 1);
@@ -2507,18 +2350,18 @@ static struct nes_cm_node *mini_cm_connect(struct nes_cm_core *cm_core,
2507 2350
2508 if (cm_info->loc_addr == cm_info->rem_addr) { 2351 if (cm_info->loc_addr == cm_info->rem_addr) {
2509 loopbackremotelistener = find_listener(cm_core, 2352 loopbackremotelistener = find_listener(cm_core,
2510 cm_node->mapped_loc_addr, cm_node->mapped_rem_port, 2353 cm_node->loc_addr, cm_node->rem_port,
2511 NES_CM_LISTENER_ACTIVE_STATE, 0); 2354 NES_CM_LISTENER_ACTIVE_STATE);
2512 if (loopbackremotelistener == NULL) { 2355 if (loopbackremotelistener == NULL) {
2513 create_event(cm_node, NES_CM_EVENT_ABORTED); 2356 create_event(cm_node, NES_CM_EVENT_ABORTED);
2514 } else { 2357 } else {
2515 loopback_cm_info = *cm_info; 2358 loopback_cm_info = *cm_info;
2516 loopback_cm_info.loc_port = cm_info->rem_port; 2359 loopback_cm_info.loc_port = cm_info->rem_port;
2517 loopback_cm_info.rem_port = cm_info->loc_port; 2360 loopback_cm_info.rem_port = cm_info->loc_port;
2518 loopback_cm_info.mapped_loc_port = 2361 loopback_cm_info.loc_port =
2519 cm_info->mapped_rem_port; 2362 cm_info->rem_port;
2520 loopback_cm_info.mapped_rem_port = 2363 loopback_cm_info.rem_port =
2521 cm_info->mapped_loc_port; 2364 cm_info->loc_port;
2522 loopback_cm_info.cm_id = loopbackremotelistener->cm_id; 2365 loopback_cm_info.cm_id = loopbackremotelistener->cm_id;
2523 loopbackremotenode = make_cm_node(cm_core, nesvnic, 2366 loopbackremotenode = make_cm_node(cm_core, nesvnic,
2524 &loopback_cm_info, loopbackremotelistener); 2367 &loopback_cm_info, loopbackremotelistener);
@@ -2747,12 +2590,6 @@ static int mini_cm_recv_pkt(struct nes_cm_core *cm_core,
2747 nfo.rem_addr = ntohl(iph->saddr); 2590 nfo.rem_addr = ntohl(iph->saddr);
2748 nfo.rem_port = ntohs(tcph->source); 2591 nfo.rem_port = ntohs(tcph->source);
2749 2592
2750 /* If port mapper is available these should be mapped address info */
2751 nfo.mapped_loc_addr = ntohl(iph->daddr);
2752 nfo.mapped_loc_port = ntohs(tcph->dest);
2753 nfo.mapped_rem_addr = ntohl(iph->saddr);
2754 nfo.mapped_rem_port = ntohs(tcph->source);
2755
2756 tmp_daddr = cpu_to_be32(iph->daddr); 2593 tmp_daddr = cpu_to_be32(iph->daddr);
2757 tmp_saddr = cpu_to_be32(iph->saddr); 2594 tmp_saddr = cpu_to_be32(iph->saddr);
2758 2595
@@ -2761,8 +2598,8 @@ static int mini_cm_recv_pkt(struct nes_cm_core *cm_core,
2761 2598
2762 do { 2599 do {
2763 cm_node = find_node(cm_core, 2600 cm_node = find_node(cm_core,
2764 nfo.mapped_rem_port, nfo.mapped_rem_addr, 2601 nfo.rem_port, nfo.rem_addr,
2765 nfo.mapped_loc_port, nfo.mapped_loc_addr); 2602 nfo.loc_port, nfo.loc_addr);
2766 2603
2767 if (!cm_node) { 2604 if (!cm_node) {
2768 /* Only type of packet accepted are for */ 2605 /* Only type of packet accepted are for */
@@ -2771,9 +2608,9 @@ static int mini_cm_recv_pkt(struct nes_cm_core *cm_core,
2771 skb_handled = 0; 2608 skb_handled = 0;
2772 break; 2609 break;
2773 } 2610 }
2774 listener = find_listener(cm_core, nfo.mapped_loc_addr, 2611 listener = find_listener(cm_core, nfo.loc_addr,
2775 nfo.mapped_loc_port, 2612 nfo.loc_port,
2776 NES_CM_LISTENER_ACTIVE_STATE, 0); 2613 NES_CM_LISTENER_ACTIVE_STATE);
2777 if (!listener) { 2614 if (!listener) {
2778 nfo.cm_id = NULL; 2615 nfo.cm_id = NULL;
2779 nfo.conn_type = 0; 2616 nfo.conn_type = 0;
@@ -3121,8 +2958,8 @@ static int nes_cm_disconn_true(struct nes_qp *nesqp)
3121 atomic_inc(&cm_disconnects); 2958 atomic_inc(&cm_disconnects);
3122 cm_event.event = IW_CM_EVENT_DISCONNECT; 2959 cm_event.event = IW_CM_EVENT_DISCONNECT;
3123 cm_event.status = disconn_status; 2960 cm_event.status = disconn_status;
3124 cm_event.local_addr = cm_id->local_addr; 2961 cm_event.local_addr = cm_id->m_local_addr;
3125 cm_event.remote_addr = cm_id->remote_addr; 2962 cm_event.remote_addr = cm_id->m_remote_addr;
3126 cm_event.private_data = NULL; 2963 cm_event.private_data = NULL;
3127 cm_event.private_data_len = 0; 2964 cm_event.private_data_len = 0;
3128 2965
@@ -3148,8 +2985,8 @@ static int nes_cm_disconn_true(struct nes_qp *nesqp)
3148 cm_event.event = IW_CM_EVENT_CLOSE; 2985 cm_event.event = IW_CM_EVENT_CLOSE;
3149 cm_event.status = 0; 2986 cm_event.status = 0;
3150 cm_event.provider_data = cm_id->provider_data; 2987 cm_event.provider_data = cm_id->provider_data;
3151 cm_event.local_addr = cm_id->local_addr; 2988 cm_event.local_addr = cm_id->m_local_addr;
3152 cm_event.remote_addr = cm_id->remote_addr; 2989 cm_event.remote_addr = cm_id->m_remote_addr;
3153 cm_event.private_data = NULL; 2990 cm_event.private_data = NULL;
3154 cm_event.private_data_len = 0; 2991 cm_event.private_data_len = 0;
3155 2992
@@ -3240,8 +3077,8 @@ int nes_accept(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
3240 u8 *start_ptr = &start_addr; 3077 u8 *start_ptr = &start_addr;
3241 u8 **start_buff = &start_ptr; 3078 u8 **start_buff = &start_ptr;
3242 u16 buff_len = 0; 3079 u16 buff_len = 0;
3243 struct sockaddr_in *laddr = (struct sockaddr_in *)&cm_id->local_addr; 3080 struct sockaddr_in *laddr = (struct sockaddr_in *)&cm_id->m_local_addr;
3244 struct sockaddr_in *raddr = (struct sockaddr_in *)&cm_id->remote_addr; 3081 struct sockaddr_in *raddr = (struct sockaddr_in *)&cm_id->m_remote_addr;
3245 3082
3246 ibqp = nes_get_qp(cm_id->device, conn_param->qpn); 3083 ibqp = nes_get_qp(cm_id->device, conn_param->qpn);
3247 if (!ibqp) 3084 if (!ibqp)
@@ -3378,11 +3215,11 @@ int nes_accept(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
3378 nes_cm_init_tsa_conn(nesqp, cm_node); 3215 nes_cm_init_tsa_conn(nesqp, cm_node);
3379 3216
3380 nesqp->nesqp_context->tcpPorts[0] = 3217 nesqp->nesqp_context->tcpPorts[0] =
3381 cpu_to_le16(cm_node->mapped_loc_port); 3218 cpu_to_le16(cm_node->loc_port);
3382 nesqp->nesqp_context->tcpPorts[1] = 3219 nesqp->nesqp_context->tcpPorts[1] =
3383 cpu_to_le16(cm_node->mapped_rem_port); 3220 cpu_to_le16(cm_node->rem_port);
3384 3221
3385 nesqp->nesqp_context->ip0 = cpu_to_le32(cm_node->mapped_rem_addr); 3222 nesqp->nesqp_context->ip0 = cpu_to_le32(cm_node->rem_addr);
3386 3223
3387 nesqp->nesqp_context->misc2 |= cpu_to_le32( 3224 nesqp->nesqp_context->misc2 |= cpu_to_le32(
3388 (u32)PCI_FUNC(nesdev->pcidev->devfn) << 3225 (u32)PCI_FUNC(nesdev->pcidev->devfn) <<
@@ -3406,9 +3243,9 @@ int nes_accept(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
3406 memset(&nes_quad, 0, sizeof(nes_quad)); 3243 memset(&nes_quad, 0, sizeof(nes_quad));
3407 nes_quad.DstIpAdrIndex = 3244 nes_quad.DstIpAdrIndex =
3408 cpu_to_le32((u32)PCI_FUNC(nesdev->pcidev->devfn) << 24); 3245 cpu_to_le32((u32)PCI_FUNC(nesdev->pcidev->devfn) << 24);
3409 nes_quad.SrcIpadr = htonl(cm_node->mapped_rem_addr); 3246 nes_quad.SrcIpadr = htonl(cm_node->rem_addr);
3410 nes_quad.TcpPorts[0] = htons(cm_node->mapped_rem_port); 3247 nes_quad.TcpPorts[0] = htons(cm_node->rem_port);
3411 nes_quad.TcpPorts[1] = htons(cm_node->mapped_loc_port); 3248 nes_quad.TcpPorts[1] = htons(cm_node->loc_port);
3412 3249
3413 /* Produce hash key */ 3250 /* Produce hash key */
3414 crc_value = get_crc_value(&nes_quad); 3251 crc_value = get_crc_value(&nes_quad);
@@ -3437,8 +3274,8 @@ int nes_accept(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
3437 cm_event.event = IW_CM_EVENT_ESTABLISHED; 3274 cm_event.event = IW_CM_EVENT_ESTABLISHED;
3438 cm_event.status = 0; 3275 cm_event.status = 0;
3439 cm_event.provider_data = (void *)nesqp; 3276 cm_event.provider_data = (void *)nesqp;
3440 cm_event.local_addr = cm_id->local_addr; 3277 cm_event.local_addr = cm_id->m_local_addr;
3441 cm_event.remote_addr = cm_id->remote_addr; 3278 cm_event.remote_addr = cm_id->m_remote_addr;
3442 cm_event.private_data = NULL; 3279 cm_event.private_data = NULL;
3443 cm_event.private_data_len = 0; 3280 cm_event.private_data_len = 0;
3444 cm_event.ird = cm_node->ird_size; 3281 cm_event.ird = cm_node->ird_size;
@@ -3508,11 +3345,8 @@ int nes_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
3508 struct nes_cm_node *cm_node; 3345 struct nes_cm_node *cm_node;
3509 struct nes_cm_info cm_info; 3346 struct nes_cm_info cm_info;
3510 int apbvt_set = 0; 3347 int apbvt_set = 0;
3511 struct sockaddr_in *laddr = (struct sockaddr_in *)&cm_id->local_addr; 3348 struct sockaddr_in *laddr = (struct sockaddr_in *)&cm_id->m_local_addr;
3512 struct sockaddr_in *raddr = (struct sockaddr_in *)&cm_id->remote_addr; 3349 struct sockaddr_in *raddr = (struct sockaddr_in *)&cm_id->m_remote_addr;
3513 struct iwpm_dev_data pm_reg_msg;
3514 struct iwpm_sa_data pm_msg;
3515 int iwpm_err = 0;
3516 3350
3517 if (cm_id->remote_addr.ss_family != AF_INET) 3351 if (cm_id->remote_addr.ss_family != AF_INET)
3518 return -ENOSYS; 3352 return -ENOSYS;
@@ -3558,37 +3392,13 @@ int nes_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
3558 cm_info.cm_id = cm_id; 3392 cm_info.cm_id = cm_id;
3559 cm_info.conn_type = NES_CM_IWARP_CONN_TYPE; 3393 cm_info.conn_type = NES_CM_IWARP_CONN_TYPE;
3560 3394
3561 /* No port mapper available, go with the specified peer information */
3562 cm_info.mapped_loc_addr = cm_info.loc_addr;
3563 cm_info.mapped_loc_port = cm_info.loc_port;
3564 cm_info.mapped_rem_addr = cm_info.rem_addr;
3565 cm_info.mapped_rem_port = cm_info.rem_port;
3566
3567 nes_form_reg_msg(nesvnic, &pm_reg_msg);
3568 iwpm_err = iwpm_register_pid(&pm_reg_msg, RDMA_NL_NES);
3569 if (iwpm_err) {
3570 nes_debug(NES_DBG_NLMSG,
3571 "Port Mapper reg pid fail (err = %d).\n", iwpm_err);
3572 }
3573 if (iwpm_valid_pid() && !iwpm_err) {
3574 nes_form_pm_msg(&cm_info, &pm_msg);
3575 iwpm_err = iwpm_add_and_query_mapping(&pm_msg, RDMA_NL_NES);
3576 if (iwpm_err)
3577 nes_debug(NES_DBG_NLMSG,
3578 "Port Mapper query fail (err = %d).\n", iwpm_err);
3579 else
3580 nes_record_pm_msg(&cm_info, &pm_msg);
3581 }
3582
3583 if (laddr->sin_addr.s_addr != raddr->sin_addr.s_addr) { 3395 if (laddr->sin_addr.s_addr != raddr->sin_addr.s_addr) {
3584 nes_manage_apbvt(nesvnic, cm_info.mapped_loc_port, 3396 nes_manage_apbvt(nesvnic, cm_info.loc_port,
3585 PCI_FUNC(nesdev->pcidev->devfn), NES_MANAGE_APBVT_ADD); 3397 PCI_FUNC(nesdev->pcidev->devfn),
3398 NES_MANAGE_APBVT_ADD);
3586 apbvt_set = 1; 3399 apbvt_set = 1;
3587 } 3400 }
3588 3401
3589 if (nes_create_mapinfo(&cm_info))
3590 return -ENOMEM;
3591
3592 cm_id->add_ref(cm_id); 3402 cm_id->add_ref(cm_id);
3593 3403
3594 /* create a connect CM node connection */ 3404 /* create a connect CM node connection */
@@ -3597,14 +3407,12 @@ int nes_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
3597 &cm_info); 3407 &cm_info);
3598 if (!cm_node) { 3408 if (!cm_node) {
3599 if (apbvt_set) 3409 if (apbvt_set)
3600 nes_manage_apbvt(nesvnic, cm_info.mapped_loc_port, 3410 nes_manage_apbvt(nesvnic, cm_info.loc_port,
3601 PCI_FUNC(nesdev->pcidev->devfn), 3411 PCI_FUNC(nesdev->pcidev->devfn),
3602 NES_MANAGE_APBVT_DEL); 3412 NES_MANAGE_APBVT_DEL);
3603 3413
3604 nes_debug(NES_DBG_NLMSG, "Delete mapped_loc_port = %04X\n", 3414 nes_debug(NES_DBG_NLMSG, "Delete loc_port = %04X\n",
3605 cm_info.mapped_loc_port); 3415 cm_info.loc_port);
3606 nes_remove_mapinfo(cm_info.loc_addr, cm_info.loc_port,
3607 cm_info.mapped_loc_addr, cm_info.mapped_loc_port);
3608 cm_id->rem_ref(cm_id); 3416 cm_id->rem_ref(cm_id);
3609 return -ENOMEM; 3417 return -ENOMEM;
3610 } 3418 }
@@ -3633,12 +3441,12 @@ int nes_create_listen(struct iw_cm_id *cm_id, int backlog)
3633 struct nes_cm_listener *cm_node; 3441 struct nes_cm_listener *cm_node;
3634 struct nes_cm_info cm_info; 3442 struct nes_cm_info cm_info;
3635 int err; 3443 int err;
3636 struct sockaddr_in *laddr = (struct sockaddr_in *)&cm_id->local_addr; 3444 struct sockaddr_in *laddr = (struct sockaddr_in *)&cm_id->m_local_addr;
3637 3445
3638 nes_debug(NES_DBG_CM, "cm_id = %p, local port = 0x%04X.\n", 3446 nes_debug(NES_DBG_CM, "cm_id = %p, local port = 0x%04X.\n",
3639 cm_id, ntohs(laddr->sin_port)); 3447 cm_id, ntohs(laddr->sin_port));
3640 3448
3641 if (cm_id->local_addr.ss_family != AF_INET) 3449 if (cm_id->m_local_addr.ss_family != AF_INET)
3642 return -ENOSYS; 3450 return -ENOSYS;
3643 nesvnic = to_nesvnic(cm_id->device); 3451 nesvnic = to_nesvnic(cm_id->device);
3644 if (!nesvnic) 3452 if (!nesvnic)
@@ -3658,10 +3466,6 @@ int nes_create_listen(struct iw_cm_id *cm_id, int backlog)
3658 3466
3659 cm_info.conn_type = NES_CM_IWARP_CONN_TYPE; 3467 cm_info.conn_type = NES_CM_IWARP_CONN_TYPE;
3660 3468
3661 /* No port mapper available, go with the specified info */
3662 cm_info.mapped_loc_addr = cm_info.loc_addr;
3663 cm_info.mapped_loc_port = cm_info.loc_port;
3664
3665 cm_node = g_cm_core->api->listen(g_cm_core, nesvnic, &cm_info); 3469 cm_node = g_cm_core->api->listen(g_cm_core, nesvnic, &cm_info);
3666 if (!cm_node) { 3470 if (!cm_node) {
3667 printk(KERN_ERR "%s[%u] Error returned from listen API call\n", 3471 printk(KERN_ERR "%s[%u] Error returned from listen API call\n",
@@ -3673,10 +3477,7 @@ int nes_create_listen(struct iw_cm_id *cm_id, int backlog)
3673 cm_node->tos = cm_id->tos; 3477 cm_node->tos = cm_id->tos;
3674 3478
3675 if (!cm_node->reused_node) { 3479 if (!cm_node->reused_node) {
3676 if (nes_create_mapinfo(&cm_info)) 3480 err = nes_manage_apbvt(nesvnic, cm_node->loc_port,
3677 return -ENOMEM;
3678
3679 err = nes_manage_apbvt(nesvnic, cm_node->mapped_loc_port,
3680 PCI_FUNC(nesvnic->nesdev->pcidev->devfn), 3481 PCI_FUNC(nesvnic->nesdev->pcidev->devfn),
3681 NES_MANAGE_APBVT_ADD); 3482 NES_MANAGE_APBVT_ADD);
3682 if (err) { 3483 if (err) {
@@ -3786,8 +3587,8 @@ static void cm_event_connected(struct nes_cm_event *event)
3786 nesvnic = to_nesvnic(nesqp->ibqp.device); 3587 nesvnic = to_nesvnic(nesqp->ibqp.device);
3787 nesdev = nesvnic->nesdev; 3588 nesdev = nesvnic->nesdev;
3788 nesadapter = nesdev->nesadapter; 3589 nesadapter = nesdev->nesadapter;
3789 laddr = (struct sockaddr_in *)&cm_id->local_addr; 3590 laddr = (struct sockaddr_in *)&cm_id->m_local_addr;
3790 raddr = (struct sockaddr_in *)&cm_id->remote_addr; 3591 raddr = (struct sockaddr_in *)&cm_id->m_remote_addr;
3791 cm_event_laddr = (struct sockaddr_in *)&cm_event.local_addr; 3592 cm_event_laddr = (struct sockaddr_in *)&cm_event.local_addr;
3792 3593
3793 if (nesqp->destroyed) 3594 if (nesqp->destroyed)
@@ -3802,10 +3603,10 @@ static void cm_event_connected(struct nes_cm_event *event)
3802 3603
3803 /* set the QP tsa context */ 3604 /* set the QP tsa context */
3804 nesqp->nesqp_context->tcpPorts[0] = 3605 nesqp->nesqp_context->tcpPorts[0] =
3805 cpu_to_le16(cm_node->mapped_loc_port); 3606 cpu_to_le16(cm_node->loc_port);
3806 nesqp->nesqp_context->tcpPorts[1] = 3607 nesqp->nesqp_context->tcpPorts[1] =
3807 cpu_to_le16(cm_node->mapped_rem_port); 3608 cpu_to_le16(cm_node->rem_port);
3808 nesqp->nesqp_context->ip0 = cpu_to_le32(cm_node->mapped_rem_addr); 3609 nesqp->nesqp_context->ip0 = cpu_to_le32(cm_node->rem_addr);
3809 3610
3810 nesqp->nesqp_context->misc2 |= cpu_to_le32( 3611 nesqp->nesqp_context->misc2 |= cpu_to_le32(
3811 (u32)PCI_FUNC(nesdev->pcidev->devfn) << 3612 (u32)PCI_FUNC(nesdev->pcidev->devfn) <<
@@ -3835,9 +3636,9 @@ static void cm_event_connected(struct nes_cm_event *event)
3835 3636
3836 nes_quad.DstIpAdrIndex = 3637 nes_quad.DstIpAdrIndex =
3837 cpu_to_le32((u32)PCI_FUNC(nesdev->pcidev->devfn) << 24); 3638 cpu_to_le32((u32)PCI_FUNC(nesdev->pcidev->devfn) << 24);
3838 nes_quad.SrcIpadr = htonl(cm_node->mapped_rem_addr); 3639 nes_quad.SrcIpadr = htonl(cm_node->rem_addr);
3839 nes_quad.TcpPorts[0] = htons(cm_node->mapped_rem_port); 3640 nes_quad.TcpPorts[0] = htons(cm_node->rem_port);
3840 nes_quad.TcpPorts[1] = htons(cm_node->mapped_loc_port); 3641 nes_quad.TcpPorts[1] = htons(cm_node->loc_port);
3841 3642
3842 /* Produce hash key */ 3643 /* Produce hash key */
3843 crc_value = get_crc_value(&nes_quad); 3644 crc_value = get_crc_value(&nes_quad);
@@ -3858,14 +3659,14 @@ static void cm_event_connected(struct nes_cm_event *event)
3858 cm_event.provider_data = cm_id->provider_data; 3659 cm_event.provider_data = cm_id->provider_data;
3859 cm_event_laddr->sin_family = AF_INET; 3660 cm_event_laddr->sin_family = AF_INET;
3860 cm_event_laddr->sin_port = laddr->sin_port; 3661 cm_event_laddr->sin_port = laddr->sin_port;
3861 cm_event.remote_addr = cm_id->remote_addr; 3662 cm_event.remote_addr = cm_id->m_remote_addr;
3862 3663
3863 cm_event.private_data = (void *)event->cm_node->mpa_frame_buf; 3664 cm_event.private_data = (void *)event->cm_node->mpa_frame_buf;
3864 cm_event.private_data_len = (u8)event->cm_node->mpa_frame_size; 3665 cm_event.private_data_len = (u8)event->cm_node->mpa_frame_size;
3865 cm_event.ird = cm_node->ird_size; 3666 cm_event.ird = cm_node->ird_size;
3866 cm_event.ord = cm_node->ord_size; 3667 cm_event.ord = cm_node->ord_size;
3867 3668
3868 cm_event_laddr->sin_addr.s_addr = htonl(event->cm_info.rem_addr); 3669 cm_event_laddr->sin_addr.s_addr = htonl(event->cm_info.loc_addr);
3869 ret = cm_id->event_handler(cm_id, &cm_event); 3670 ret = cm_id->event_handler(cm_id, &cm_event);
3870 nes_debug(NES_DBG_CM, "OFA CM event_handler returned, ret=%d\n", ret); 3671 nes_debug(NES_DBG_CM, "OFA CM event_handler returned, ret=%d\n", ret);
3871 3672
@@ -3913,8 +3714,8 @@ static void cm_event_connect_error(struct nes_cm_event *event)
3913 cm_event.event = IW_CM_EVENT_CONNECT_REPLY; 3714 cm_event.event = IW_CM_EVENT_CONNECT_REPLY;
3914 cm_event.status = -ECONNRESET; 3715 cm_event.status = -ECONNRESET;
3915 cm_event.provider_data = cm_id->provider_data; 3716 cm_event.provider_data = cm_id->provider_data;
3916 cm_event.local_addr = cm_id->local_addr; 3717 cm_event.local_addr = cm_id->m_local_addr;
3917 cm_event.remote_addr = cm_id->remote_addr; 3718 cm_event.remote_addr = cm_id->m_remote_addr;
3918 cm_event.private_data = NULL; 3719 cm_event.private_data = NULL;
3919 cm_event.private_data_len = 0; 3720 cm_event.private_data_len = 0;
3920 3721
@@ -3970,8 +3771,8 @@ static void cm_event_reset(struct nes_cm_event *event)
3970 cm_event.event = IW_CM_EVENT_DISCONNECT; 3771 cm_event.event = IW_CM_EVENT_DISCONNECT;
3971 cm_event.status = -ECONNRESET; 3772 cm_event.status = -ECONNRESET;
3972 cm_event.provider_data = cm_id->provider_data; 3773 cm_event.provider_data = cm_id->provider_data;
3973 cm_event.local_addr = cm_id->local_addr; 3774 cm_event.local_addr = cm_id->m_local_addr;
3974 cm_event.remote_addr = cm_id->remote_addr; 3775 cm_event.remote_addr = cm_id->m_remote_addr;
3975 cm_event.private_data = NULL; 3776 cm_event.private_data = NULL;
3976 cm_event.private_data_len = 0; 3777 cm_event.private_data_len = 0;
3977 3778
@@ -3981,8 +3782,8 @@ static void cm_event_reset(struct nes_cm_event *event)
3981 cm_event.event = IW_CM_EVENT_CLOSE; 3782 cm_event.event = IW_CM_EVENT_CLOSE;
3982 cm_event.status = 0; 3783 cm_event.status = 0;
3983 cm_event.provider_data = cm_id->provider_data; 3784 cm_event.provider_data = cm_id->provider_data;
3984 cm_event.local_addr = cm_id->local_addr; 3785 cm_event.local_addr = cm_id->m_local_addr;
3985 cm_event.remote_addr = cm_id->remote_addr; 3786 cm_event.remote_addr = cm_id->m_remote_addr;
3986 cm_event.private_data = NULL; 3787 cm_event.private_data = NULL;
3987 cm_event.private_data_len = 0; 3788 cm_event.private_data_len = 0;
3988 nes_debug(NES_DBG_CM, "NODE %p Generating CLOSE\n", event->cm_node); 3789 nes_debug(NES_DBG_CM, "NODE %p Generating CLOSE\n", event->cm_node);
diff --git a/drivers/infiniband/hw/nes/nes_cm.h b/drivers/infiniband/hw/nes/nes_cm.h
index 147c2c884227..d827d03e3941 100644
--- a/drivers/infiniband/hw/nes/nes_cm.h
+++ b/drivers/infiniband/hw/nes/nes_cm.h
@@ -293,8 +293,8 @@ struct nes_cm_listener {
293 struct list_head list; 293 struct list_head list;
294 struct nes_cm_core *cm_core; 294 struct nes_cm_core *cm_core;
295 u8 loc_mac[ETH_ALEN]; 295 u8 loc_mac[ETH_ALEN];
296 nes_addr_t loc_addr, mapped_loc_addr; 296 nes_addr_t loc_addr;
297 u16 loc_port, mapped_loc_port; 297 u16 loc_port;
298 struct iw_cm_id *cm_id; 298 struct iw_cm_id *cm_id;
299 enum nes_cm_conn_type conn_type; 299 enum nes_cm_conn_type conn_type;
300 atomic_t ref_count; 300 atomic_t ref_count;
@@ -309,9 +309,7 @@ struct nes_cm_listener {
309/* per connection node and node state information */ 309/* per connection node and node state information */
310struct nes_cm_node { 310struct nes_cm_node {
311 nes_addr_t loc_addr, rem_addr; 311 nes_addr_t loc_addr, rem_addr;
312 nes_addr_t mapped_loc_addr, mapped_rem_addr;
313 u16 loc_port, rem_port; 312 u16 loc_port, rem_port;
314 u16 mapped_loc_port, mapped_rem_port;
315 313
316 u8 loc_mac[ETH_ALEN]; 314 u8 loc_mac[ETH_ALEN];
317 u8 rem_mac[ETH_ALEN]; 315 u8 rem_mac[ETH_ALEN];
@@ -368,11 +366,6 @@ struct nes_cm_info {
368 u16 rem_port; 366 u16 rem_port;
369 nes_addr_t loc_addr; 367 nes_addr_t loc_addr;
370 nes_addr_t rem_addr; 368 nes_addr_t rem_addr;
371 u16 mapped_loc_port;
372 u16 mapped_rem_port;
373 nes_addr_t mapped_loc_addr;
374 nes_addr_t mapped_rem_addr;
375
376 enum nes_cm_conn_type conn_type; 369 enum nes_cm_conn_type conn_type;
377 int backlog; 370 int backlog;
378}; 371};
diff --git a/drivers/infiniband/hw/nes/nes_verbs.c b/drivers/infiniband/hw/nes/nes_verbs.c
index 8c4daf7f22ec..804021ddd358 100644
--- a/drivers/infiniband/hw/nes/nes_verbs.c
+++ b/drivers/infiniband/hw/nes/nes_verbs.c
@@ -3768,6 +3768,8 @@ struct nes_ib_device *nes_init_ofa_device(struct net_device *netdev)
3768 nesibdev->ibdev.iwcm->create_listen = nes_create_listen; 3768 nesibdev->ibdev.iwcm->create_listen = nes_create_listen;
3769 nesibdev->ibdev.iwcm->destroy_listen = nes_destroy_listen; 3769 nesibdev->ibdev.iwcm->destroy_listen = nes_destroy_listen;
3770 nesibdev->ibdev.get_port_immutable = nes_port_immutable; 3770 nesibdev->ibdev.get_port_immutable = nes_port_immutable;
3771 memcpy(nesibdev->ibdev.iwcm->ifname, netdev->name,
3772 sizeof(nesibdev->ibdev.iwcm->ifname));
3771 3773
3772 return nesibdev; 3774 return nesibdev;
3773} 3775}