Lines Matching full:ini
604 static int smc_find_rdma_device(struct smc_sock *smc, struct smc_init_info *ini) in smc_find_rdma_device() argument
610 smc_pnet_find_roce_resource(smc->clcsock->sk, ini); in smc_find_rdma_device()
611 if (!ini->ib_dev) in smc_find_rdma_device()
618 static int smc_find_ism_device(struct smc_sock *smc, struct smc_init_info *ini) in smc_find_ism_device() argument
621 smc_pnet_find_ism_resource(smc->clcsock->sk, ini); in smc_find_ism_device()
622 if (!ini->ism_dev[0]) in smc_find_ism_device()
625 ini->ism_chid[0] = smc_ism_get_chid(ini->ism_dev[0]); in smc_find_ism_device()
630 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
633 int i = (!ini->ism_dev[0]) ? 1 : 0; in smc_find_ism_v2_is_unique_chid()
636 if (ini->ism_chid[i] == chid) in smc_find_ism_v2_is_unique_chid()
645 struct smc_init_info *ini) in smc_find_ism_v2_device_clnt() argument
652 if (smcd_indicated(ini->smc_type_v1)) in smc_find_ism_v2_device_clnt()
656 if (smcd->going_away || smcd == ini->ism_dev[0]) in smc_find_ism_v2_device_clnt()
659 if (!smc_find_ism_v2_is_unique_chid(chid, ini, i)) in smc_find_ism_v2_device_clnt()
663 ini->ism_dev[i] = smcd; in smc_find_ism_v2_device_clnt()
664 ini->ism_chid[i] = chid; in smc_find_ism_v2_device_clnt()
665 ini->is_smcd = true; in smc_find_ism_v2_device_clnt()
673 ini->ism_offered_cnt = i - 1; in smc_find_ism_v2_device_clnt()
674 if (!ini->ism_dev[0] && !ini->ism_dev[1]) in smc_find_ism_v2_device_clnt()
675 ini->smcd_version = 0; in smc_find_ism_v2_device_clnt()
682 struct smc_init_info *ini) in smc_connect_ism_vlan_setup() argument
684 if (ini->vlan_id && smc_ism_get_vlan(ini->ism_dev[0], ini->vlan_id)) in smc_connect_ism_vlan_setup()
690 struct smc_init_info *ini) in smc_find_proposal_devices() argument
695 if (ini->smcd_version & SMC_V1) { in smc_find_proposal_devices()
696 if (smc_find_ism_device(smc, ini) || in smc_find_proposal_devices()
697 smc_connect_ism_vlan_setup(smc, ini)) { in smc_find_proposal_devices()
698 if (ini->smc_type_v1 == SMC_TYPE_B) in smc_find_proposal_devices()
699 ini->smc_type_v1 = SMC_TYPE_R; in smc_find_proposal_devices()
701 ini->smc_type_v1 = SMC_TYPE_N; in smc_find_proposal_devices()
703 if (smc_find_rdma_device(smc, ini)) { in smc_find_proposal_devices()
704 if (ini->smc_type_v1 == SMC_TYPE_B) in smc_find_proposal_devices()
705 ini->smc_type_v1 = SMC_TYPE_D; in smc_find_proposal_devices()
707 ini->smc_type_v1 = SMC_TYPE_N; in smc_find_proposal_devices()
710 if (smc_ism_is_v2_capable() && smc_find_ism_v2_device_clnt(smc, ini)) in smc_find_proposal_devices()
711 ini->smc_type_v2 = SMC_TYPE_N; in smc_find_proposal_devices()
714 if (!smcr_indicated(ini->smc_type_v1) && in smc_find_proposal_devices()
715 ini->smc_type_v1 == SMC_TYPE_N && ini->smc_type_v2 == SMC_TYPE_N) in smc_find_proposal_devices()
725 struct smc_init_info *ini) in smc_connect_ism_vlan_cleanup() argument
727 if (!smcd_indicated(ini->smc_type_v1)) in smc_connect_ism_vlan_cleanup()
729 if (ini->vlan_id && smc_ism_put_vlan(ini->ism_dev[0], ini->vlan_id)) in smc_connect_ism_vlan_cleanup()
742 struct smc_init_info *ini) in smc_connect_clc() argument
747 rc = smc_clc_send_proposal(smc, ini); in smc_connect_clc()
758 struct smc_init_info *ini) in smc_connect_rdma() argument
763 ini->is_smcd = false; in smc_connect_rdma()
764 ini->ib_lcl = &aclc->r0.lcl; in smc_connect_rdma()
765 ini->ib_clcqpn = ntoh24(aclc->r0.qpn); in smc_connect_rdma()
766 ini->first_contact_peer = aclc->hdr.typev2 & SMC_FIRST_CONTACT_MASK; in smc_connect_rdma()
769 reason_code = smc_conn_create(smc, ini); in smc_connect_rdma()
777 if (ini->first_contact_local) { in smc_connect_rdma()
807 if (ini->first_contact_local) in smc_connect_rdma()
818 if (ini->first_contact_local) { in smc_connect_rdma()
831 reason_code = smc_clc_send_confirm(smc, ini->first_contact_local, in smc_connect_rdma()
838 if (ini->first_contact_local) { in smc_connect_rdma()
855 smc_conn_abort(smc, ini->first_contact_local); in smc_connect_rdma()
867 struct smc_init_info *ini) in smc_v2_determine_accepted_chid() argument
871 for (i = 0; i < ini->ism_offered_cnt + 1; i++) { in smc_v2_determine_accepted_chid()
872 if (ini->ism_chid[i] == ntohs(aclc->chid)) { in smc_v2_determine_accepted_chid()
873 ini->ism_selected = i; in smc_v2_determine_accepted_chid()
884 struct smc_init_info *ini) in smc_connect_ism() argument
888 ini->is_smcd = true; in smc_connect_ism()
889 ini->first_contact_peer = aclc->hdr.typev2 & SMC_FIRST_CONTACT_MASK; in smc_connect_ism()
895 rc = smc_v2_determine_accepted_chid(aclc_v2, ini); in smc_connect_ism()
899 ini->ism_peer_gid[ini->ism_selected] = aclc->d0.gid; in smc_connect_ism()
903 rc = smc_conn_create(smc, ini); in smc_connect_ism()
921 rc = smc_clc_send_confirm(smc, ini->first_contact_local, in smc_connect_ism()
934 smc_conn_abort(smc, ini->first_contact_local); in smc_connect_ism()
942 static int smc_connect_check_aclc(struct smc_init_info *ini, in smc_connect_check_aclc() argument
946 !smcr_indicated(ini->smc_type_v1)) || in smc_connect_check_aclc()
948 ((!smcd_indicated(ini->smc_type_v1) && in smc_connect_check_aclc()
949 !smcd_indicated(ini->smc_type_v2)) || in smc_connect_check_aclc()
951 !smcd_indicated(ini->smc_type_v1)) || in smc_connect_check_aclc()
953 !smcd_indicated(ini->smc_type_v2))))) in smc_connect_check_aclc()
965 struct smc_init_info *ini = NULL; in __smc_connect() local
981 ini = kzalloc(sizeof(*ini), GFP_KERNEL); in __smc_connect()
982 if (!ini) in __smc_connect()
986 ini->smcd_version = SMC_V1; in __smc_connect()
987 ini->smcd_version |= smc_ism_is_v2_capable() ? SMC_V2 : 0; in __smc_connect()
988 ini->smc_type_v1 = SMC_TYPE_B; in __smc_connect()
989 ini->smc_type_v2 = smc_ism_is_v2_capable() ? SMC_TYPE_D : SMC_TYPE_N; in __smc_connect()
992 if (smc_vlan_by_tcpsk(smc->clcsock, ini)) { in __smc_connect()
993 ini->smcd_version &= ~SMC_V1; in __smc_connect()
994 ini->smc_type_v1 = SMC_TYPE_N; in __smc_connect()
995 if (!ini->smcd_version) { in __smc_connect()
1001 rc = smc_find_proposal_devices(smc, ini); in __smc_connect()
1014 rc = smc_connect_clc(smc, aclc2, ini); in __smc_connect()
1019 rc = smc_connect_check_aclc(ini, aclc); in __smc_connect()
1021 ini->smcd_version = version; in __smc_connect()
1027 rc = smc_connect_rdma(smc, aclc, ini); in __smc_connect()
1029 rc = smc_connect_ism(smc, aclc, ini); in __smc_connect()
1034 smc_connect_ism_vlan_cleanup(smc, ini); in __smc_connect()
1036 kfree(ini); in __smc_connect()
1040 smc_connect_ism_vlan_cleanup(smc, ini); in __smc_connect()
1043 kfree(ini); in __smc_connect()
1382 struct smc_init_info *ini) in smc_listen_v2_check() argument
1388 ini->smc_type_v1 = pclc->hdr.typev1; in smc_listen_v2_check()
1389 ini->smc_type_v2 = pclc->hdr.typev2; in smc_listen_v2_check()
1390 ini->smcd_version = ini->smc_type_v1 != SMC_TYPE_N ? SMC_V1 : 0; in smc_listen_v2_check()
1392 ini->smcd_version |= in smc_listen_v2_check()
1393 ini->smc_type_v2 != SMC_TYPE_N ? SMC_V2 : 0; in smc_listen_v2_check()
1394 if (!(ini->smcd_version & SMC_V2)) { in smc_listen_v2_check()
1399 ini->smcd_version &= ~SMC_V2; in smc_listen_v2_check()
1405 ini->smcd_version &= ~SMC_V2; in smc_listen_v2_check()
1411 ini->smcd_version &= ~SMC_V2; in smc_listen_v2_check()
1416 if (!ini->smcd_version) in smc_listen_v2_check()
1440 struct smc_init_info *ini) in smc_listen_rdma_init() argument
1445 rc = smc_conn_create(new_smc, ini); in smc_listen_rdma_init()
1458 struct smc_init_info *ini) in smc_listen_ism_init() argument
1462 rc = smc_conn_create(new_smc, ini); in smc_listen_ism_init()
1469 smc_conn_abort(new_smc, ini->first_contact_local); in smc_listen_ism_init()
1478 struct smc_init_info *ini, in smc_is_already_selected() argument
1484 if (smcd == ini->ism_dev[i]) in smc_is_already_selected()
1491 static void smc_check_ism_v2_match(struct smc_init_info *ini, in smc_check_ism_v2_match() argument
1500 if (smc_is_already_selected(smcd, ini, *matches)) in smc_check_ism_v2_match()
1504 ini->ism_peer_gid[*matches] = proposed_gid; in smc_check_ism_v2_match()
1505 ini->ism_dev[*matches] = smcd; in smc_check_ism_v2_match()
1512 static void smc_find_ism_store_rc(u32 rc, struct smc_init_info *ini) in smc_find_ism_store_rc() argument
1514 if (!ini->rc) in smc_find_ism_store_rc()
1515 ini->rc = rc; in smc_find_ism_store_rc()
1520 struct smc_init_info *ini) in smc_find_ism_v2_device_serv() argument
1530 if (!(ini->smcd_version & SMC_V2) || !smcd_indicated(ini->smc_type_v2)) in smc_find_ism_v2_device_serv()
1538 smc_find_ism_store_rc(SMC_CLC_DECL_NOSEID, ini); in smc_find_ism_v2_device_serv()
1545 smc_check_ism_v2_match(ini, ntohs(pclc_smcd->ism.chid), in smc_find_ism_v2_device_serv()
1551 smc_check_ism_v2_match(ini, in smc_find_ism_v2_device_serv()
1558 if (ini->ism_dev[0]) { in smc_find_ism_v2_device_serv()
1559 smc_ism_get_system_eid(ini->ism_dev[0], &eid); in smc_find_ism_v2_device_serv()
1567 smcd_version = ini->smcd_version; in smc_find_ism_v2_device_serv()
1569 ini->smcd_version = SMC_V2; in smc_find_ism_v2_device_serv()
1570 ini->is_smcd = true; in smc_find_ism_v2_device_serv()
1571 ini->ism_selected = i; in smc_find_ism_v2_device_serv()
1572 rc = smc_listen_ism_init(new_smc, ini); in smc_find_ism_v2_device_serv()
1574 smc_find_ism_store_rc(rc, ini); in smc_find_ism_v2_device_serv()
1581 ini->smcd_version = smcd_version; /* restore original value */ in smc_find_ism_v2_device_serv()
1584 ini->smcd_version &= ~SMC_V2; in smc_find_ism_v2_device_serv()
1585 ini->ism_dev[0] = NULL; in smc_find_ism_v2_device_serv()
1586 ini->is_smcd = false; in smc_find_ism_v2_device_serv()
1591 struct smc_init_info *ini) in smc_find_ism_v1_device_serv() argument
1597 if (!(ini->smcd_version & SMC_V1) || !smcd_indicated(ini->smc_type_v1)) in smc_find_ism_v1_device_serv()
1599 ini->is_smcd = true; /* prepare ISM check */ in smc_find_ism_v1_device_serv()
1600 ini->ism_peer_gid[0] = ntohll(pclc_smcd->ism.gid); in smc_find_ism_v1_device_serv()
1601 rc = smc_find_ism_device(new_smc, ini); in smc_find_ism_v1_device_serv()
1604 ini->ism_selected = 0; in smc_find_ism_v1_device_serv()
1605 rc = smc_listen_ism_init(new_smc, ini); in smc_find_ism_v1_device_serv()
1610 smc_find_ism_store_rc(rc, ini); in smc_find_ism_v1_device_serv()
1611 ini->ism_dev[0] = NULL; in smc_find_ism_v1_device_serv()
1612 ini->is_smcd = false; in smc_find_ism_v1_device_serv()
1631 struct smc_init_info *ini) in smc_find_rdma_v1_device_serv() argument
1635 if (!smcr_indicated(ini->smc_type_v1)) in smc_find_rdma_v1_device_serv()
1639 ini->ib_lcl = &pclc->lcl; in smc_find_rdma_v1_device_serv()
1640 rc = smc_find_rdma_device(new_smc, ini); in smc_find_rdma_v1_device_serv()
1643 if (ini->smc_type_v1 == SMC_TYPE_B) in smc_find_rdma_v1_device_serv()
1648 rc = smc_listen_rdma_init(new_smc, ini); in smc_find_rdma_v1_device_serv()
1651 return smc_listen_rdma_reg(new_smc, ini->first_contact_local); in smc_find_rdma_v1_device_serv()
1657 struct smc_init_info *ini) in smc_listen_find_device() argument
1662 smc_find_ism_v2_device_serv(new_smc, pclc, ini); in smc_listen_find_device()
1663 if (ini->ism_dev[0]) in smc_listen_find_device()
1666 if (!(ini->smcd_version & SMC_V1)) in smc_listen_find_device()
1667 return ini->rc ?: SMC_CLC_DECL_NOSMCD2DEV; in smc_listen_find_device()
1672 return ini->rc ?: rc; in smc_listen_find_device()
1675 if (smc_vlan_by_tcpsk(new_smc->clcsock, ini)) in smc_listen_find_device()
1676 return ini->rc ?: SMC_CLC_DECL_GETVLANERR; in smc_listen_find_device()
1679 smc_find_ism_v1_device_serv(new_smc, pclc, ini); in smc_listen_find_device()
1680 if (ini->ism_dev[0]) in smc_listen_find_device()
1685 return ini->rc ?: SMC_CLC_DECL_NOSMCDDEV; in smc_listen_find_device()
1688 rc = smc_find_rdma_v1_device_serv(new_smc, pclc, ini); in smc_listen_find_device()
1689 smc_find_ism_store_rc(rc, ini); in smc_listen_find_device()
1691 return (!rc) ? 0 : ini->rc; in smc_listen_find_device()
1729 struct smc_init_info *ini = NULL; in smc_listen_work() local
1768 ini = kzalloc(sizeof(*ini), GFP_KERNEL); in smc_listen_work()
1769 if (!ini) { in smc_listen_work()
1775 rc = smc_listen_v2_check(new_smc, pclc, ini); in smc_listen_work()
1785 rc = smc_listen_find_device(new_smc, pclc, ini); in smc_listen_work()
1790 rc = smc_clc_send_accept(new_smc, ini->first_contact_local, in smc_listen_work()
1791 ini->smcd_version == SMC_V2 ? SMC_V2 : SMC_V1); in smc_listen_work()
1796 if (ini->is_smcd) in smc_listen_work()
1805 if (!ini->is_smcd) in smc_listen_work()
1811 if (!ini->is_smcd) { in smc_listen_work()
1813 ini->first_contact_local); in smc_listen_work()
1820 SMC_STAT_SERV_SUCC_INC(sock_net(newclcsock->sk), ini); in smc_listen_work()
1826 smc_listen_decline(new_smc, rc, ini ? ini->first_contact_local : 0, in smc_listen_work()
1829 kfree(ini); in smc_listen_work()