Lines Matching refs:ini
596 static int smc_find_rdma_device(struct smc_sock *smc, struct smc_init_info *ini)
602 smc_pnet_find_roce_resource(smc->clcsock->sk, ini);
603 if (!ini->ib_dev)
610 static int smc_find_ism_device(struct smc_sock *smc, struct smc_init_info *ini)
613 smc_pnet_find_ism_resource(smc->clcsock->sk, ini);
614 if (!ini->ism_dev[0])
617 ini->ism_chid[0] = smc_ism_get_chid(ini->ism_dev[0]);
622 static bool smc_find_ism_v2_is_unique_chid(u16 chid, struct smc_init_info *ini,
625 int i = (!ini->ism_dev[0]) ? 1 : 0;
628 if (ini->ism_chid[i] == chid)
637 struct smc_init_info *ini)
644 if (smcd_indicated(ini->smc_type_v1))
648 if (smcd->going_away || smcd == ini->ism_dev[0])
651 if (!smc_find_ism_v2_is_unique_chid(chid, ini, i))
655 ini->ism_dev[i] = smcd;
656 ini->ism_chid[i] = chid;
657 ini->is_smcd = true;
665 ini->ism_offered_cnt = i - 1;
666 if (!ini->ism_dev[0] && !ini->ism_dev[1])
667 ini->smcd_version = 0;
674 struct smc_init_info *ini)
676 if (ini->vlan_id && smc_ism_get_vlan(ini->ism_dev[0], ini->vlan_id))
682 struct smc_init_info *ini)
687 if (ini->smcd_version & SMC_V1) {
688 if (smc_find_ism_device(smc, ini) ||
689 smc_connect_ism_vlan_setup(smc, ini)) {
690 if (ini->smc_type_v1 == SMC_TYPE_B)
691 ini->smc_type_v1 = SMC_TYPE_R;
693 ini->smc_type_v1 = SMC_TYPE_N;
695 if (smc_find_rdma_device(smc, ini)) {
696 if (ini->smc_type_v1 == SMC_TYPE_B)
697 ini->smc_type_v1 = SMC_TYPE_D;
699 ini->smc_type_v1 = SMC_TYPE_N;
702 if (smc_ism_v2_capable && smc_find_ism_v2_device_clnt(smc, ini))
703 ini->smc_type_v2 = SMC_TYPE_N;
706 if (!smcr_indicated(ini->smc_type_v1) &&
707 ini->smc_type_v1 == SMC_TYPE_N && ini->smc_type_v2 == SMC_TYPE_N)
717 struct smc_init_info *ini)
719 if (!smcd_indicated(ini->smc_type_v1))
721 if (ini->vlan_id && smc_ism_put_vlan(ini->ism_dev[0], ini->vlan_id))
734 struct smc_init_info *ini)
739 rc = smc_clc_send_proposal(smc, ini);
750 struct smc_init_info *ini)
755 ini->is_smcd = false;
756 ini->ib_lcl = &aclc->r0.lcl;
757 ini->ib_clcqpn = ntoh24(aclc->r0.qpn);
758 ini->first_contact_peer = aclc->hdr.typev2 & SMC_FIRST_CONTACT_MASK;
761 reason_code = smc_conn_create(smc, ini);
769 if (ini->first_contact_local) {
799 if (ini->first_contact_local)
810 if (ini->first_contact_local) {
823 reason_code = smc_clc_send_confirm(smc, ini->first_contact_local,
830 if (ini->first_contact_local) {
847 smc_connect_abort(smc, ini->first_contact_local);
859 struct smc_init_info *ini)
863 for (i = 0; i < ini->ism_offered_cnt + 1; i++) {
864 if (ini->ism_chid[i] == ntohs(aclc->chid)) {
865 ini->ism_selected = i;
876 struct smc_init_info *ini)
880 ini->is_smcd = true;
881 ini->first_contact_peer = aclc->hdr.typev2 & SMC_FIRST_CONTACT_MASK;
887 rc = smc_v2_determine_accepted_chid(aclc_v2, ini);
891 ini->ism_peer_gid[ini->ism_selected] = aclc->d0.gid;
895 rc = smc_conn_create(smc, ini);
913 rc = smc_clc_send_confirm(smc, ini->first_contact_local,
926 smc_connect_abort(smc, ini->first_contact_local);
934 static int smc_connect_check_aclc(struct smc_init_info *ini,
938 !smcr_indicated(ini->smc_type_v1)) ||
940 ((!smcd_indicated(ini->smc_type_v1) &&
941 !smcd_indicated(ini->smc_type_v2)) ||
943 !smcd_indicated(ini->smc_type_v1)) ||
945 !smcd_indicated(ini->smc_type_v2)))))
957 struct smc_init_info *ini = NULL;
973 ini = kzalloc(sizeof(*ini), GFP_KERNEL);
974 if (!ini)
978 ini->smcd_version = SMC_V1;
979 ini->smcd_version |= smc_ism_v2_capable ? SMC_V2 : 0;
980 ini->smc_type_v1 = SMC_TYPE_B;
981 ini->smc_type_v2 = smc_ism_v2_capable ? SMC_TYPE_D : SMC_TYPE_N;
984 if (smc_vlan_by_tcpsk(smc->clcsock, ini)) {
985 ini->smcd_version &= ~SMC_V1;
986 ini->smc_type_v1 = SMC_TYPE_N;
987 if (!ini->smcd_version) {
993 rc = smc_find_proposal_devices(smc, ini);
1006 rc = smc_connect_clc(smc, aclc2, ini);
1011 rc = smc_connect_check_aclc(ini, aclc);
1013 ini->smcd_version = version;
1019 rc = smc_connect_rdma(smc, aclc, ini);
1021 rc = smc_connect_ism(smc, aclc, ini);
1025 smc_connect_ism_vlan_cleanup(smc, ini);
1027 kfree(ini);
1031 smc_connect_ism_vlan_cleanup(smc, ini);
1034 kfree(ini);
1377 struct smc_init_info *ini)
1382 ini->smc_type_v1 = pclc->hdr.typev1;
1383 ini->smc_type_v2 = pclc->hdr.typev2;
1384 ini->smcd_version = ini->smc_type_v1 != SMC_TYPE_N ? SMC_V1 : 0;
1386 ini->smcd_version |=
1387 ini->smc_type_v2 != SMC_TYPE_N ? SMC_V2 : 0;
1389 ini->smcd_version &= ~SMC_V2;
1394 ini->smcd_version &= ~SMC_V2;
1399 ini->smcd_version &= ~SMC_V2;
1402 if (!ini->smcd_version) {
1433 struct smc_init_info *ini)
1438 rc = smc_conn_create(new_smc, ini);
1451 struct smc_init_info *ini)
1455 rc = smc_conn_create(new_smc, ini);
1462 if (ini->first_contact_local)
1474 struct smc_init_info *ini,
1480 if (smcd == ini->ism_dev[i])
1487 static void smc_check_ism_v2_match(struct smc_init_info *ini,
1496 if (smc_is_already_selected(smcd, ini, *matches))
1500 ini->ism_peer_gid[*matches] = proposed_gid;
1501 ini->ism_dev[*matches] = smcd;
1510 struct smc_init_info *ini)
1520 if (!(ini->smcd_version & SMC_V2) || !smcd_indicated(ini->smc_type_v2))
1533 smc_check_ism_v2_match(ini, ntohs(pclc_smcd->ism.chid),
1539 smc_check_ism_v2_match(ini,
1546 if (ini->ism_dev[0]) {
1547 smc_ism_get_system_eid(ini->ism_dev[0], &eid);
1555 smcd_version = ini->smcd_version;
1557 ini->smcd_version = SMC_V2;
1558 ini->is_smcd = true;
1559 ini->ism_selected = i;
1560 if (smc_listen_ism_init(new_smc, ini))
1566 ini->smcd_version = smcd_version; /* restore original value */
1569 ini->smcd_version &= ~SMC_V2;
1570 ini->ism_dev[0] = NULL;
1571 ini->is_smcd = false;
1576 struct smc_init_info *ini)
1581 if (!(ini->smcd_version & SMC_V1) || !smcd_indicated(ini->smc_type_v1))
1583 ini->is_smcd = true; /* prepare ISM check */
1584 ini->ism_peer_gid[0] = ntohll(pclc_smcd->ism.gid);
1585 if (smc_find_ism_device(new_smc, ini))
1587 ini->ism_selected = 0;
1588 if (!smc_listen_ism_init(new_smc, ini))
1592 ini->ism_dev[0] = NULL;
1593 ini->is_smcd = false;
1612 struct smc_init_info *ini)
1616 if (!smcr_indicated(ini->smc_type_v1))
1620 ini->ib_lcl = &pclc->lcl;
1621 rc = smc_find_rdma_device(new_smc, ini);
1624 if (ini->smc_type_v1 == SMC_TYPE_B)
1629 rc = smc_listen_rdma_init(new_smc, ini);
1632 return smc_listen_rdma_reg(new_smc, ini->first_contact_local);
1638 struct smc_init_info *ini)
1643 smc_find_ism_v2_device_serv(new_smc, pclc, ini);
1644 if (ini->ism_dev[0])
1647 if (!(ini->smcd_version & SMC_V1))
1656 if (smc_vlan_by_tcpsk(new_smc->clcsock, ini))
1660 smc_find_ism_v1_device_serv(new_smc, pclc, ini);
1661 if (ini->ism_dev[0])
1668 return smc_find_rdma_v1_device_serv(new_smc, pclc, ini);
1706 struct smc_init_info *ini = NULL;
1746 ini = kzalloc(sizeof(*ini), GFP_KERNEL);
1747 if (!ini) {
1753 rc = smc_listen_v2_check(new_smc, pclc, ini);
1763 rc = smc_listen_find_device(new_smc, pclc, ini);
1768 rc = smc_clc_send_accept(new_smc, ini->first_contact_local,
1769 ini->smcd_version == SMC_V2 ? SMC_V2 : SMC_V1);
1774 if (ini->is_smcd)
1783 if (!ini->is_smcd)
1789 if (!ini->is_smcd) {
1791 ini->first_contact_local);
1803 smc_listen_decline(new_smc, rc, ini ? ini->first_contact_local : 0,
1806 kfree(ini);