Lines Matching refs:ini

527 				    struct smc_init_info *ini)  in smc_link_save_peer_info()  argument
530 memcpy(link->peer_gid, ini->peer_gid, SMC_GID_SIZE); in smc_link_save_peer_info()
531 memcpy(link->peer_mac, ini->peer_mac, sizeof(link->peer_mac)); in smc_link_save_peer_info()
643 static int smc_find_rdma_device(struct smc_sock *smc, struct smc_init_info *ini) in smc_find_rdma_device() argument
649 smc_pnet_find_roce_resource(smc->clcsock->sk, ini); in smc_find_rdma_device()
650 if (!ini->check_smcrv2 && !ini->ib_dev) in smc_find_rdma_device()
652 if (ini->check_smcrv2 && !ini->smcrv2.ib_dev_v2) in smc_find_rdma_device()
659 static int smc_find_ism_device(struct smc_sock *smc, struct smc_init_info *ini) in smc_find_ism_device() argument
662 smc_pnet_find_ism_resource(smc->clcsock->sk, ini); in smc_find_ism_device()
663 if (!ini->ism_dev[0]) in smc_find_ism_device()
666 ini->ism_chid[0] = smc_ism_get_chid(ini->ism_dev[0]); in smc_find_ism_device()
671 static bool smc_find_ism_v2_is_unique_chid(u16 chid, struct smc_init_info *ini, in smc_find_ism_v2_is_unique_chid() argument
674 int i = (!ini->ism_dev[0]) ? 1 : 0; in smc_find_ism_v2_is_unique_chid()
677 if (ini->ism_chid[i] == chid) in smc_find_ism_v2_is_unique_chid()
686 struct smc_init_info *ini) in smc_find_ism_v2_device_clnt() argument
693 if (smcd_indicated(ini->smc_type_v1)) in smc_find_ism_v2_device_clnt()
697 if (smcd->going_away || smcd == ini->ism_dev[0]) in smc_find_ism_v2_device_clnt()
700 if (!smc_find_ism_v2_is_unique_chid(chid, ini, i)) in smc_find_ism_v2_device_clnt()
704 ini->ism_dev[i] = smcd; in smc_find_ism_v2_device_clnt()
705 ini->ism_chid[i] = chid; in smc_find_ism_v2_device_clnt()
706 ini->is_smcd = true; in smc_find_ism_v2_device_clnt()
714 ini->ism_offered_cnt = i - 1; in smc_find_ism_v2_device_clnt()
715 if (!ini->ism_dev[0] && !ini->ism_dev[1]) in smc_find_ism_v2_device_clnt()
716 ini->smcd_version = 0; in smc_find_ism_v2_device_clnt()
723 struct smc_init_info *ini) in smc_connect_ism_vlan_setup() argument
725 if (ini->vlan_id && smc_ism_get_vlan(ini->ism_dev[0], ini->vlan_id)) in smc_connect_ism_vlan_setup()
731 struct smc_init_info *ini) in smc_find_proposal_devices() argument
736 if (!(ini->smcd_version & SMC_V1) || in smc_find_proposal_devices()
737 smc_find_ism_device(smc, ini) || in smc_find_proposal_devices()
738 smc_connect_ism_vlan_setup(smc, ini)) in smc_find_proposal_devices()
739 ini->smcd_version &= ~SMC_V1; in smc_find_proposal_devices()
743 if (!(ini->smcr_version & SMC_V1) || in smc_find_proposal_devices()
744 smc_find_rdma_device(smc, ini)) in smc_find_proposal_devices()
745 ini->smcr_version &= ~SMC_V1; in smc_find_proposal_devices()
748 ini->smc_type_v1 = smc_indicated_type(ini->smcd_version & SMC_V1, in smc_find_proposal_devices()
749 ini->smcr_version & SMC_V1); in smc_find_proposal_devices()
752 if (!(ini->smcd_version & SMC_V2) || in smc_find_proposal_devices()
754 smc_find_ism_v2_device_clnt(smc, ini)) in smc_find_proposal_devices()
755 ini->smcd_version &= ~SMC_V2; in smc_find_proposal_devices()
758 ini->check_smcrv2 = true; in smc_find_proposal_devices()
759 ini->smcrv2.saddr = smc->clcsock->sk->sk_rcv_saddr; in smc_find_proposal_devices()
760 if (!(ini->smcr_version & SMC_V2) || in smc_find_proposal_devices()
763 smc_find_rdma_device(smc, ini)) in smc_find_proposal_devices()
764 ini->smcr_version &= ~SMC_V2; in smc_find_proposal_devices()
765 ini->check_smcrv2 = false; in smc_find_proposal_devices()
767 ini->smc_type_v2 = smc_indicated_type(ini->smcd_version & SMC_V2, in smc_find_proposal_devices()
768 ini->smcr_version & SMC_V2); in smc_find_proposal_devices()
771 if (ini->smc_type_v1 == SMC_TYPE_N && ini->smc_type_v2 == SMC_TYPE_N) in smc_find_proposal_devices()
781 struct smc_init_info *ini) in smc_connect_ism_vlan_cleanup() argument
783 if (!smcd_indicated(ini->smc_type_v1)) in smc_connect_ism_vlan_cleanup()
785 if (ini->vlan_id && smc_ism_put_vlan(ini->ism_dev[0], ini->vlan_id)) in smc_connect_ism_vlan_cleanup()
798 struct smc_init_info *ini) in smc_connect_clc() argument
803 rc = smc_clc_send_proposal(smc, ini); in smc_connect_clc()
841 struct smc_init_info *ini) in smc_connect_rdma_v2_prepare() argument
849 if (!ini->first_contact_peer || aclc->hdr.version == SMC_V1) in smc_connect_rdma_v2_prepare()
853 memcpy(ini->smcrv2.nexthop_mac, &aclc->r0.lcl.mac, ETH_ALEN); in smc_connect_rdma_v2_prepare()
854 ini->smcrv2.uses_gateway = false; in smc_connect_rdma_v2_prepare()
858 ini->smcrv2.nexthop_mac, in smc_connect_rdma_v2_prepare()
859 &ini->smcrv2.uses_gateway)) in smc_connect_rdma_v2_prepare()
861 if (!ini->smcrv2.uses_gateway) { in smc_connect_rdma_v2_prepare()
872 struct smc_init_info *ini) in smc_connect_rdma() argument
878 ini->is_smcd = false; in smc_connect_rdma()
879 ini->ib_clcqpn = ntoh24(aclc->r0.qpn); in smc_connect_rdma()
880 ini->first_contact_peer = aclc->hdr.typev2 & SMC_FIRST_CONTACT_MASK; in smc_connect_rdma()
881 memcpy(ini->peer_systemid, aclc->r0.lcl.id_for_peer, SMC_SYSTEMID_LEN); in smc_connect_rdma()
882 memcpy(ini->peer_gid, aclc->r0.lcl.gid, SMC_GID_SIZE); in smc_connect_rdma()
883 memcpy(ini->peer_mac, aclc->r0.lcl.mac, ETH_ALEN); in smc_connect_rdma()
885 reason_code = smc_connect_rdma_v2_prepare(smc, aclc, ini); in smc_connect_rdma()
890 reason_code = smc_conn_create(smc, ini); in smc_connect_rdma()
898 if (ini->first_contact_local) { in smc_connect_rdma()
929 if (ini->first_contact_local) in smc_connect_rdma()
930 smc_link_save_peer_info(link, aclc, ini); in smc_connect_rdma()
940 if (ini->first_contact_local) { in smc_connect_rdma()
958 if (ini->first_contact_local) in smc_connect_rdma()
959 smc_fill_gid_list(link->lgr, &ini->smcrv2.gidlist, in smc_connect_rdma()
963 reason_code = smc_clc_send_confirm(smc, ini->first_contact_local, in smc_connect_rdma()
964 aclc->hdr.version, eid, ini); in smc_connect_rdma()
970 if (ini->first_contact_local) { in smc_connect_rdma()
987 smc_conn_abort(smc, ini->first_contact_local); in smc_connect_rdma()
999 struct smc_init_info *ini) in smc_v2_determine_accepted_chid() argument
1003 for (i = 0; i < ini->ism_offered_cnt + 1; i++) { in smc_v2_determine_accepted_chid()
1004 if (ini->ism_chid[i] == ntohs(aclc->d1.chid)) { in smc_v2_determine_accepted_chid()
1005 ini->ism_selected = i; in smc_v2_determine_accepted_chid()
1016 struct smc_init_info *ini) in smc_connect_ism() argument
1021 ini->is_smcd = true; in smc_connect_ism()
1022 ini->first_contact_peer = aclc->hdr.typev2 & SMC_FIRST_CONTACT_MASK; in smc_connect_ism()
1028 rc = smc_v2_determine_accepted_chid(aclc_v2, ini); in smc_connect_ism()
1032 ini->ism_peer_gid[ini->ism_selected] = aclc->d0.gid; in smc_connect_ism()
1036 rc = smc_conn_create(smc, ini); in smc_connect_ism()
1061 rc = smc_clc_send_confirm(smc, ini->first_contact_local, in smc_connect_ism()
1074 smc_conn_abort(smc, ini->first_contact_local); in smc_connect_ism()
1082 static int smc_connect_check_aclc(struct smc_init_info *ini, in smc_connect_check_aclc() argument
1091 !smcr_indicated(ini->smc_type_v2)) || in smc_connect_check_aclc()
1093 !smcd_indicated(ini->smc_type_v2))) in smc_connect_check_aclc()
1097 !smcr_indicated(ini->smc_type_v1)) || in smc_connect_check_aclc()
1099 !smcd_indicated(ini->smc_type_v1))) in smc_connect_check_aclc()
1112 struct smc_init_info *ini = NULL; in __smc_connect() local
1128 ini = kzalloc(sizeof(*ini), GFP_KERNEL); in __smc_connect()
1129 if (!ini) in __smc_connect()
1133 ini->smcd_version = SMC_V1 | SMC_V2; in __smc_connect()
1134 ini->smcr_version = SMC_V1 | SMC_V2; in __smc_connect()
1135 ini->smc_type_v1 = SMC_TYPE_B; in __smc_connect()
1136 ini->smc_type_v2 = SMC_TYPE_B; in __smc_connect()
1139 if (smc_vlan_by_tcpsk(smc->clcsock, ini)) { in __smc_connect()
1140 ini->smcd_version &= ~SMC_V1; in __smc_connect()
1141 ini->smcr_version = 0; in __smc_connect()
1142 ini->smc_type_v1 = SMC_TYPE_N; in __smc_connect()
1143 if (!ini->smcd_version) { in __smc_connect()
1149 rc = smc_find_proposal_devices(smc, ini); in __smc_connect()
1162 rc = smc_connect_clc(smc, aclc2, ini); in __smc_connect()
1167 rc = smc_connect_check_aclc(ini, aclc); in __smc_connect()
1174 ini->smcr_version = version; in __smc_connect()
1175 rc = smc_connect_rdma(smc, aclc, ini); in __smc_connect()
1177 ini->smcd_version = version; in __smc_connect()
1178 rc = smc_connect_ism(smc, aclc, ini); in __smc_connect()
1184 smc_connect_ism_vlan_cleanup(smc, ini); in __smc_connect()
1186 kfree(ini); in __smc_connect()
1190 smc_connect_ism_vlan_cleanup(smc, ini); in __smc_connect()
1193 kfree(ini); in __smc_connect()
1532 struct smc_init_info *ini) in smc_listen_v2_check() argument
1538 ini->smc_type_v1 = pclc->hdr.typev1; in smc_listen_v2_check()
1539 ini->smc_type_v2 = pclc->hdr.typev2; in smc_listen_v2_check()
1540 ini->smcd_version = smcd_indicated(ini->smc_type_v1) ? SMC_V1 : 0; in smc_listen_v2_check()
1541 ini->smcr_version = smcr_indicated(ini->smc_type_v1) ? SMC_V1 : 0; in smc_listen_v2_check()
1543 if (smcd_indicated(ini->smc_type_v2)) in smc_listen_v2_check()
1544 ini->smcd_version |= SMC_V2; in smc_listen_v2_check()
1545 if (smcr_indicated(ini->smc_type_v2)) in smc_listen_v2_check()
1546 ini->smcr_version |= SMC_V2; in smc_listen_v2_check()
1548 if (!(ini->smcd_version & SMC_V2) && !(ini->smcr_version & SMC_V2)) { in smc_listen_v2_check()
1554 ini->smcd_version &= ~SMC_V2; in smc_listen_v2_check()
1555 ini->smcr_version &= ~SMC_V2; in smc_listen_v2_check()
1560 if (ini->smcd_version & SMC_V2) { in smc_listen_v2_check()
1562 ini->smcd_version &= ~SMC_V2; in smc_listen_v2_check()
1565 ini->smcd_version &= ~SMC_V2; in smc_listen_v2_check()
1569 ini->smcd_version &= ~SMC_V2; in smc_listen_v2_check()
1573 if (ini->smcr_version & SMC_V2) { in smc_listen_v2_check()
1575 ini->smcr_version &= ~SMC_V2; in smc_listen_v2_check()
1581 if (!ini->smcd_version && !ini->smcr_version) in smc_listen_v2_check()
1605 struct smc_init_info *ini) in smc_listen_rdma_init() argument
1610 rc = smc_conn_create(new_smc, ini); in smc_listen_rdma_init()
1623 struct smc_init_info *ini) in smc_listen_ism_init() argument
1627 rc = smc_conn_create(new_smc, ini); in smc_listen_ism_init()
1634 smc_conn_abort(new_smc, ini->first_contact_local); in smc_listen_ism_init()
1643 struct smc_init_info *ini, in smc_is_already_selected() argument
1649 if (smcd == ini->ism_dev[i]) in smc_is_already_selected()
1656 static void smc_check_ism_v2_match(struct smc_init_info *ini, in smc_check_ism_v2_match() argument
1665 if (smc_is_already_selected(smcd, ini, *matches)) in smc_check_ism_v2_match()
1669 ini->ism_peer_gid[*matches] = proposed_gid; in smc_check_ism_v2_match()
1670 ini->ism_dev[*matches] = smcd; in smc_check_ism_v2_match()
1677 static void smc_find_ism_store_rc(u32 rc, struct smc_init_info *ini) in smc_find_ism_store_rc() argument
1679 if (!ini->rc) in smc_find_ism_store_rc()
1680 ini->rc = rc; in smc_find_ism_store_rc()
1685 struct smc_init_info *ini) in smc_find_ism_v2_device_serv() argument
1695 if (!(ini->smcd_version & SMC_V2) || !smcd_indicated(ini->smc_type_v2)) in smc_find_ism_v2_device_serv()
1705 smc_check_ism_v2_match(ini, ntohs(pclc_smcd->ism.chid), in smc_find_ism_v2_device_serv()
1711 smc_check_ism_v2_match(ini, in smc_find_ism_v2_device_serv()
1718 if (!ini->ism_dev[0]) { in smc_find_ism_v2_device_serv()
1719 smc_find_ism_store_rc(SMC_CLC_DECL_NOSMCD2DEV, ini); in smc_find_ism_v2_device_serv()
1724 if (!smc_clc_match_eid(ini->negotiated_eid, smc_v2_ext, in smc_find_ism_v2_device_serv()
1729 smcd_version = ini->smcd_version; in smc_find_ism_v2_device_serv()
1731 ini->smcd_version = SMC_V2; in smc_find_ism_v2_device_serv()
1732 ini->is_smcd = true; in smc_find_ism_v2_device_serv()
1733 ini->ism_selected = i; in smc_find_ism_v2_device_serv()
1734 rc = smc_listen_ism_init(new_smc, ini); in smc_find_ism_v2_device_serv()
1736 smc_find_ism_store_rc(rc, ini); in smc_find_ism_v2_device_serv()
1743 ini->smcd_version = smcd_version; /* restore original value */ in smc_find_ism_v2_device_serv()
1744 ini->negotiated_eid[0] = 0; in smc_find_ism_v2_device_serv()
1747 ini->smcd_version &= ~SMC_V2; in smc_find_ism_v2_device_serv()
1748 ini->ism_dev[0] = NULL; in smc_find_ism_v2_device_serv()
1749 ini->is_smcd = false; in smc_find_ism_v2_device_serv()
1754 struct smc_init_info *ini) in smc_find_ism_v1_device_serv() argument
1760 if (!(ini->smcd_version & SMC_V1) || !smcd_indicated(ini->smc_type_v1)) in smc_find_ism_v1_device_serv()
1762 ini->is_smcd = true; /* prepare ISM check */ in smc_find_ism_v1_device_serv()
1763 ini->ism_peer_gid[0] = ntohll(pclc_smcd->ism.gid); in smc_find_ism_v1_device_serv()
1764 rc = smc_find_ism_device(new_smc, ini); in smc_find_ism_v1_device_serv()
1767 ini->ism_selected = 0; in smc_find_ism_v1_device_serv()
1768 rc = smc_listen_ism_init(new_smc, ini); in smc_find_ism_v1_device_serv()
1773 smc_find_ism_store_rc(rc, ini); in smc_find_ism_v1_device_serv()
1774 ini->smcd_version &= ~SMC_V1; in smc_find_ism_v1_device_serv()
1775 ini->ism_dev[0] = NULL; in smc_find_ism_v1_device_serv()
1776 ini->is_smcd = false; in smc_find_ism_v1_device_serv()
1795 struct smc_init_info *ini) in smc_find_rdma_v2_device_serv() argument
1801 if (!(ini->smcr_version & SMC_V2) || !smcr_indicated(ini->smc_type_v2)) in smc_find_rdma_v2_device_serv()
1805 if (!smc_clc_match_eid(ini->negotiated_eid, smc_v2_ext, NULL, NULL)) in smc_find_rdma_v2_device_serv()
1809 memcpy(ini->peer_systemid, pclc->lcl.id_for_peer, SMC_SYSTEMID_LEN); in smc_find_rdma_v2_device_serv()
1810 memcpy(ini->peer_gid, smc_v2_ext->roce, SMC_GID_SIZE); in smc_find_rdma_v2_device_serv()
1811 memcpy(ini->peer_mac, pclc->lcl.mac, ETH_ALEN); in smc_find_rdma_v2_device_serv()
1812 ini->check_smcrv2 = true; in smc_find_rdma_v2_device_serv()
1813 ini->smcrv2.clc_sk = new_smc->clcsock->sk; in smc_find_rdma_v2_device_serv()
1814 ini->smcrv2.saddr = new_smc->clcsock->sk->sk_rcv_saddr; in smc_find_rdma_v2_device_serv()
1815 ini->smcrv2.daddr = smc_ib_gid_to_ipv4(smc_v2_ext->roce); in smc_find_rdma_v2_device_serv()
1816 rc = smc_find_rdma_device(new_smc, ini); in smc_find_rdma_v2_device_serv()
1818 smc_find_ism_store_rc(rc, ini); in smc_find_rdma_v2_device_serv()
1821 if (!ini->smcrv2.uses_gateway) in smc_find_rdma_v2_device_serv()
1822 memcpy(ini->smcrv2.nexthop_mac, pclc->lcl.mac, ETH_ALEN); in smc_find_rdma_v2_device_serv()
1824 smcr_version = ini->smcr_version; in smc_find_rdma_v2_device_serv()
1825 ini->smcr_version = SMC_V2; in smc_find_rdma_v2_device_serv()
1826 rc = smc_listen_rdma_init(new_smc, ini); in smc_find_rdma_v2_device_serv()
1828 rc = smc_listen_rdma_reg(new_smc, ini->first_contact_local); in smc_find_rdma_v2_device_serv()
1831 ini->smcr_version = smcr_version; in smc_find_rdma_v2_device_serv()
1832 smc_find_ism_store_rc(rc, ini); in smc_find_rdma_v2_device_serv()
1835 ini->smcr_version &= ~SMC_V2; in smc_find_rdma_v2_device_serv()
1836 ini->check_smcrv2 = false; in smc_find_rdma_v2_device_serv()
1841 struct smc_init_info *ini) in smc_find_rdma_v1_device_serv() argument
1845 if (!(ini->smcr_version & SMC_V1) || !smcr_indicated(ini->smc_type_v1)) in smc_find_rdma_v1_device_serv()
1849 memcpy(ini->peer_systemid, pclc->lcl.id_for_peer, SMC_SYSTEMID_LEN); in smc_find_rdma_v1_device_serv()
1850 memcpy(ini->peer_gid, pclc->lcl.gid, SMC_GID_SIZE); in smc_find_rdma_v1_device_serv()
1851 memcpy(ini->peer_mac, pclc->lcl.mac, ETH_ALEN); in smc_find_rdma_v1_device_serv()
1852 rc = smc_find_rdma_device(new_smc, ini); in smc_find_rdma_v1_device_serv()
1857 rc = smc_listen_rdma_init(new_smc, ini); in smc_find_rdma_v1_device_serv()
1860 return smc_listen_rdma_reg(new_smc, ini->first_contact_local); in smc_find_rdma_v1_device_serv()
1866 struct smc_init_info *ini) in smc_listen_find_device() argument
1871 smc_find_ism_v2_device_serv(new_smc, pclc, ini); in smc_listen_find_device()
1872 if (ini->ism_dev[0]) in smc_listen_find_device()
1878 smc_find_ism_store_rc(prfx_rc, ini); in smc_listen_find_device()
1881 if (smc_vlan_by_tcpsk(new_smc->clcsock, ini)) in smc_listen_find_device()
1882 return ini->rc ?: SMC_CLC_DECL_GETVLANERR; in smc_listen_find_device()
1886 smc_find_ism_v1_device_serv(new_smc, pclc, ini); in smc_listen_find_device()
1887 if (ini->ism_dev[0]) in smc_listen_find_device()
1893 return ini->rc ?: SMC_CLC_DECL_NOSMCDDEV; in smc_listen_find_device()
1896 smc_find_rdma_v2_device_serv(new_smc, pclc, ini); in smc_listen_find_device()
1897 if (ini->smcrv2.ib_dev_v2) in smc_listen_find_device()
1904 rc = smc_find_rdma_v1_device_serv(new_smc, pclc, ini); in smc_listen_find_device()
1905 smc_find_ism_store_rc(rc, ini); in smc_listen_find_device()
1906 return (!rc) ? 0 : ini->rc; in smc_listen_find_device()
1915 struct smc_init_info *ini) in smc_listen_rdma_finish() argument
1921 smc_link_save_peer_info(link, cclc, ini); in smc_listen_rdma_finish()
1946 struct smc_init_info *ini = NULL; in smc_listen_work() local
1989 ini = kzalloc(sizeof(*ini), GFP_KERNEL); in smc_listen_work()
1990 if (!ini) { in smc_listen_work()
1996 rc = smc_listen_v2_check(new_smc, pclc, ini); in smc_listen_work()
2006 rc = smc_listen_find_device(new_smc, pclc, ini); in smc_listen_work()
2011 accept_version = ini->is_smcd ? ini->smcd_version : ini->smcr_version; in smc_listen_work()
2012 rc = smc_clc_send_accept(new_smc, ini->first_contact_local, in smc_listen_work()
2013 accept_version, ini->negotiated_eid); in smc_listen_work()
2018 if (ini->is_smcd) in smc_listen_work()
2027 if (!ini->is_smcd) in smc_listen_work()
2033 if (!ini->is_smcd) { in smc_listen_work()
2035 ini->first_contact_local, ini); in smc_listen_work()
2042 SMC_STAT_SERV_SUCC_INC(sock_net(newclcsock->sk), ini); in smc_listen_work()
2048 smc_listen_decline(new_smc, rc, ini ? ini->first_contact_local : 0, in smc_listen_work()
2051 kfree(ini); in smc_listen_work()