diff options
-rw-r--r-- | drivers/infiniband/hw/nes/nes.c | 25 | ||||
-rw-r--r-- | drivers/infiniband/hw/nes/nes_cm.c | 351 | ||||
-rw-r--r-- | drivers/infiniband/hw/nes/nes_cm.h | 11 | ||||
-rw-r--r-- | drivers/infiniband/hw/nes/nes_verbs.c | 2 |
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 | ||
112 | MODULE_DEVICE_TABLE(pci, nes_pci_table); | 112 | MODULE_DEVICE_TABLE(pci, nes_pci_table); |
113 | 113 | ||
114 | /* registered nes netlink callbacks */ | ||
115 | static 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 | |||
125 | static int nes_inetaddr_event(struct notifier_block *, unsigned long, void *); | 114 | static int nes_inetaddr_event(struct notifier_block *, unsigned long, void *); |
126 | static int nes_net_event(struct notifier_block *, unsigned long, void *); | 115 | static int nes_net_event(struct notifier_block *, unsigned long, void *); |
127 | static int nes_notifiers_registered; | 116 | static 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 | */ | ||
531 | static 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 | */ | ||
543 | static 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 | */ | ||
562 | static 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 | */ | ||
579 | static 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 | */ | ||
591 | static 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 | |||
599 | static 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 | */ | ||
613 | static 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 | */ | ||
626 | static 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 | */ |
1289 | static struct nes_cm_listener *find_listener(struct nes_cm_core *cm_core, | 1169 | static 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 */ |
310 | struct nes_cm_node { | 310 | struct 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 | } |