Lines Matching refs:ini

741 				    struct smc_init_info *ini)
744 memcpy(link->peer_gid, ini->peer_gid, SMC_GID_SIZE);
745 memcpy(link->peer_mac, ini->peer_mac, sizeof(link->peer_mac));
1001 static int smc_find_rdma_device(struct smc_sock *smc, struct smc_init_info *ini)
1007 smc_pnet_find_roce_resource(smc->clcsock->sk, ini);
1008 if (!ini->check_smcrv2 && !ini->ib_dev)
1010 if (ini->check_smcrv2 && !ini->smcrv2.ib_dev_v2)
1017 static int smc_find_ism_device(struct smc_sock *smc, struct smc_init_info *ini)
1020 smc_pnet_find_ism_resource(smc->clcsock->sk, ini);
1021 if (!ini->ism_dev[0])
1024 ini->ism_chid[0] = smc_ism_get_chid(ini->ism_dev[0]);
1029 static bool smc_find_ism_v2_is_unique_chid(u16 chid, struct smc_init_info *ini,
1032 int i = (!ini->ism_dev[0]) ? 1 : 0;
1035 if (ini->ism_chid[i] == chid)
1044 struct smc_init_info *ini)
1052 if (smcd_indicated(ini->smc_type_v1))
1056 if (smcd->going_away || smcd == ini->ism_dev[0])
1059 if (!smc_find_ism_v2_is_unique_chid(chid, ini, i))
1071 ini->ism_dev[i] = smcd;
1072 ini->ism_chid[i] = chid;
1073 ini->is_smcd = true;
1082 ini->ism_offered_cnt = i - 1;
1083 if (!ini->ism_dev[0] && !ini->ism_dev[1])
1084 ini->smcd_version = 0;
1091 struct smc_init_info *ini)
1093 if (ini->vlan_id && smc_ism_get_vlan(ini->ism_dev[0], ini->vlan_id))
1099 struct smc_init_info *ini)
1104 if (!(ini->smcd_version & SMC_V1) ||
1105 smc_find_ism_device(smc, ini) ||
1106 smc_connect_ism_vlan_setup(smc, ini))
1107 ini->smcd_version &= ~SMC_V1;
1111 if (!(ini->smcr_version & SMC_V1) ||
1112 smc_find_rdma_device(smc, ini))
1113 ini->smcr_version &= ~SMC_V1;
1116 ini->smc_type_v1 = smc_indicated_type(ini->smcd_version & SMC_V1,
1117 ini->smcr_version & SMC_V1);
1120 if (!(ini->smcd_version & SMC_V2) ||
1122 smc_find_ism_v2_device_clnt(smc, ini))
1123 ini->smcd_version &= ~SMC_V2;
1126 ini->check_smcrv2 = true;
1127 ini->smcrv2.saddr = smc->clcsock->sk->sk_rcv_saddr;
1128 if (!(ini->smcr_version & SMC_V2) ||
1131 smc_find_rdma_device(smc, ini))
1132 ini->smcr_version &= ~SMC_V2;
1133 ini->check_smcrv2 = false;
1135 ini->smc_type_v2 = smc_indicated_type(ini->smcd_version & SMC_V2,
1136 ini->smcr_version & SMC_V2);
1139 if (ini->smc_type_v1 == SMC_TYPE_N && ini->smc_type_v2 == SMC_TYPE_N)
1149 struct smc_init_info *ini)
1151 if (!smcd_indicated(ini->smc_type_v1))
1153 if (ini->vlan_id && smc_ism_put_vlan(ini->ism_dev[0], ini->vlan_id))
1166 struct smc_init_info *ini)
1171 rc = smc_clc_send_proposal(smc, ini);
1209 struct smc_init_info *ini)
1216 if (!ini->first_contact_peer || aclc->hdr.version == SMC_V1)
1220 memcpy(ini->smcrv2.nexthop_mac, &aclc->r0.lcl.mac, ETH_ALEN);
1221 ini->smcrv2.uses_gateway = false;
1225 ini->smcrv2.nexthop_mac,
1226 &ini->smcrv2.uses_gateway))
1228 if (!ini->smcrv2.uses_gateway) {
1234 ini->release_nr = fce->release;
1235 rc = smc_clc_clnt_v2x_features_validate(fce, ini);
1245 struct smc_init_info *ini)
1251 ini->is_smcd = false;
1252 ini->ib_clcqpn = ntoh24(aclc->r0.qpn);
1253 ini->first_contact_peer = aclc->hdr.typev2 & SMC_FIRST_CONTACT_MASK;
1254 memcpy(ini->peer_systemid, aclc->r0.lcl.id_for_peer, SMC_SYSTEMID_LEN);
1255 memcpy(ini->peer_gid, aclc->r0.lcl.gid, SMC_GID_SIZE);
1256 memcpy(ini->peer_mac, aclc->r0.lcl.mac, ETH_ALEN);
1257 ini->max_conns = SMC_CONN_PER_LGR_MAX;
1258 ini->max_links = SMC_LINKS_ADD_LNK_MAX;
1260 reason_code = smc_connect_rdma_v2_prepare(smc, aclc, ini);
1265 reason_code = smc_conn_create(smc, ini);
1273 if (ini->first_contact_local) {
1304 if (ini->first_contact_local)
1305 smc_link_save_peer_info(link, aclc, ini);
1315 if (ini->first_contact_local) {
1336 if (ini->first_contact_local)
1337 smc_fill_gid_list(link->lgr, &ini->smcrv2.gidlist,
1341 reason_code = smc_clc_send_confirm(smc, ini->first_contact_local,
1342 aclc->hdr.version, eid, ini);
1348 if (ini->first_contact_local) {
1365 smc_conn_abort(smc, ini->first_contact_local);
1377 struct smc_init_info *ini)
1381 for (i = 0; i < ini->ism_offered_cnt + 1; i++) {
1382 if (ini->ism_chid[i] == ntohs(aclc->d1.chid)) {
1383 ini->ism_selected = i;
1394 struct smc_init_info *ini)
1399 ini->is_smcd = true;
1400 ini->first_contact_peer = aclc->hdr.typev2 & SMC_FIRST_CONTACT_MASK;
1403 if (ini->first_contact_peer) {
1407 ini->release_nr = fce->release;
1408 rc = smc_clc_clnt_v2x_features_validate(fce, ini);
1413 rc = smc_v2_determine_accepted_chid(aclc, ini);
1417 if (__smc_ism_is_emulated(ini->ism_chid[ini->ism_selected]))
1418 ini->ism_peer_gid[ini->ism_selected].gid_ext =
1422 ini->ism_peer_gid[ini->ism_selected].gid = ntohll(aclc->d0.gid);
1426 rc = smc_conn_create(smc, ini);
1447 rc = smc_clc_send_confirm(smc, ini->first_contact_local,
1448 aclc->hdr.version, eid, ini);
1460 smc_conn_abort(smc, ini->first_contact_local);
1468 static int smc_connect_check_aclc(struct smc_init_info *ini,
1477 !smcr_indicated(ini->smc_type_v2)) ||
1479 !smcd_indicated(ini->smc_type_v2)))
1483 !smcr_indicated(ini->smc_type_v1)) ||
1485 !smcd_indicated(ini->smc_type_v1)))
1497 struct smc_init_info *ini = NULL;
1513 ini = kzalloc(sizeof(*ini), GFP_KERNEL);
1514 if (!ini)
1518 ini->smcd_version = SMC_V1 | SMC_V2;
1519 ini->smcr_version = SMC_V1 | SMC_V2;
1520 ini->smc_type_v1 = SMC_TYPE_B;
1521 ini->smc_type_v2 = SMC_TYPE_B;
1524 if (smc_vlan_by_tcpsk(smc->clcsock, ini)) {
1525 ini->smcd_version &= ~SMC_V1;
1526 ini->smcr_version = 0;
1527 ini->smc_type_v1 = SMC_TYPE_N;
1528 if (!ini->smcd_version) {
1534 rc = smc_find_proposal_devices(smc, ini);
1546 rc = smc_connect_clc(smc, aclc, ini);
1557 rc = smc_connect_check_aclc(ini, aclc);
1564 ini->smcr_version = version;
1565 rc = smc_connect_rdma(smc, aclc, ini);
1567 ini->smcd_version = version;
1568 rc = smc_connect_ism(smc, aclc, ini);
1574 smc_connect_ism_vlan_cleanup(smc, ini);
1576 kfree(ini);
1580 smc_connect_ism_vlan_cleanup(smc, ini);
1583 kfree(ini);
1976 struct smc_init_info *ini)
1982 ini->smc_type_v1 = pclc->hdr.typev1;
1983 ini->smc_type_v2 = pclc->hdr.typev2;
1984 ini->smcd_version = smcd_indicated(ini->smc_type_v1) ? SMC_V1 : 0;
1985 ini->smcr_version = smcr_indicated(ini->smc_type_v1) ? SMC_V1 : 0;
1987 if (smcd_indicated(ini->smc_type_v2))
1988 ini->smcd_version |= SMC_V2;
1989 if (smcr_indicated(ini->smc_type_v2))
1990 ini->smcr_version |= SMC_V2;
1992 if (!(ini->smcd_version & SMC_V2) && !(ini->smcr_version & SMC_V2)) {
1998 ini->smcd_version &= ~SMC_V2;
1999 ini->smcr_version &= ~SMC_V2;
2004 if (ini->smcd_version & SMC_V2) {
2006 ini->smcd_version &= ~SMC_V2;
2009 ini->smcd_version &= ~SMC_V2;
2013 ini->smcd_version &= ~SMC_V2;
2017 if (ini->smcr_version & SMC_V2) {
2019 ini->smcr_version &= ~SMC_V2;
2024 ini->release_nr = pclc_v2_ext->hdr.flag.release;
2026 ini->release_nr = SMC_RELEASE;
2029 if (!ini->smcd_version && !ini->smcr_version)
2053 struct smc_init_info *ini)
2058 rc = smc_conn_create(new_smc, ini);
2064 smc_conn_abort(new_smc, ini->first_contact_local);
2073 struct smc_init_info *ini)
2077 rc = smc_conn_create(new_smc, ini);
2084 smc_conn_abort(new_smc, ini->first_contact_local);
2093 struct smc_init_info *ini,
2099 if (smcd == ini->ism_dev[i])
2106 static void smc_check_ism_v2_match(struct smc_init_info *ini,
2116 if (smc_is_already_selected(smcd, ini, *matches))
2120 ini->ism_peer_gid[*matches].gid = proposed_gid->gid;
2122 ini->ism_peer_gid[*matches].gid_ext =
2125 ini->ism_dev[*matches] = smcd;
2132 static void smc_find_ism_store_rc(u32 rc, struct smc_init_info *ini)
2134 if (!ini->rc)
2135 ini->rc = rc;
2140 struct smc_init_info *ini)
2152 if (!(ini->smcd_version & SMC_V2) || !smcd_indicated(ini->smc_type_v2))
2164 smc_check_ism_v2_match(ini, ntohs(pclc_smcd->ism.chid),
2188 smc_check_ism_v2_match(ini, chid, &smcd_gid, &matches);
2192 if (!ini->ism_dev[0]) {
2193 smc_find_ism_store_rc(SMC_CLC_DECL_NOSMCD2DEV, ini);
2198 if (!smc_clc_match_eid(ini->negotiated_eid, smc_v2_ext,
2203 smcd_version = ini->smcd_version;
2205 ini->smcd_version = SMC_V2;
2206 ini->is_smcd = true;
2207 ini->ism_selected = i;
2208 rc = smc_listen_ism_init(new_smc, ini);
2210 smc_find_ism_store_rc(rc, ini);
2217 ini->smcd_version = smcd_version; /* restore original value */
2218 ini->negotiated_eid[0] = 0;
2221 ini->smcd_version &= ~SMC_V2;
2222 ini->ism_dev[0] = NULL;
2223 ini->is_smcd = false;
2228 struct smc_init_info *ini)
2234 if (!(ini->smcd_version & SMC_V1) || !smcd_indicated(ini->smc_type_v1))
2236 ini->is_smcd = true; /* prepare ISM check */
2237 ini->ism_peer_gid[0].gid = ntohll(pclc_smcd->ism.gid);
2238 ini->ism_peer_gid[0].gid_ext = 0;
2239 rc = smc_find_ism_device(new_smc, ini);
2242 ini->ism_selected = 0;
2243 rc = smc_listen_ism_init(new_smc, ini);
2248 smc_find_ism_store_rc(rc, ini);
2249 ini->smcd_version &= ~SMC_V1;
2250 ini->ism_dev[0] = NULL;
2251 ini->is_smcd = false;
2275 struct smc_init_info *ini)
2281 if (!(ini->smcr_version & SMC_V2) || !smcr_indicated(ini->smc_type_v2))
2285 if (!smc_clc_match_eid(ini->negotiated_eid, smc_v2_ext, NULL, NULL))
2289 memcpy(ini->peer_systemid, pclc->lcl.id_for_peer, SMC_SYSTEMID_LEN);
2290 memcpy(ini->peer_gid, smc_v2_ext->roce, SMC_GID_SIZE);
2291 memcpy(ini->peer_mac, pclc->lcl.mac, ETH_ALEN);
2292 ini->check_smcrv2 = true;
2293 ini->smcrv2.clc_sk = new_smc->clcsock->sk;
2294 ini->smcrv2.saddr = new_smc->clcsock->sk->sk_rcv_saddr;
2295 ini->smcrv2.daddr = smc_ib_gid_to_ipv4(smc_v2_ext->roce);
2296 rc = smc_find_rdma_device(new_smc, ini);
2298 smc_find_ism_store_rc(rc, ini);
2301 if (!ini->smcrv2.uses_gateway)
2302 memcpy(ini->smcrv2.nexthop_mac, pclc->lcl.mac, ETH_ALEN);
2304 smcr_version = ini->smcr_version;
2305 ini->smcr_version = SMC_V2;
2306 rc = smc_listen_rdma_init(new_smc, ini);
2308 rc = smc_listen_rdma_reg(new_smc, ini->first_contact_local);
2310 smc_conn_abort(new_smc, ini->first_contact_local);
2314 ini->smcr_version = smcr_version;
2315 smc_find_ism_store_rc(rc, ini);
2318 ini->smcr_version &= ~SMC_V2;
2319 ini->smcrv2.ib_dev_v2 = NULL;
2320 ini->check_smcrv2 = false;
2325 struct smc_init_info *ini)
2329 if (!(ini->smcr_version & SMC_V1) || !smcr_indicated(ini->smc_type_v1))
2333 memcpy(ini->peer_systemid, pclc->lcl.id_for_peer, SMC_SYSTEMID_LEN);
2334 memcpy(ini->peer_gid, pclc->lcl.gid, SMC_GID_SIZE);
2335 memcpy(ini->peer_mac, pclc->lcl.mac, ETH_ALEN);
2336 rc = smc_find_rdma_device(new_smc, ini);
2341 rc = smc_listen_rdma_init(new_smc, ini);
2344 return smc_listen_rdma_reg(new_smc, ini->first_contact_local);
2350 struct smc_init_info *ini)
2355 smc_find_ism_v2_device_serv(new_smc, pclc, ini);
2356 if (ini->ism_dev[0])
2362 smc_find_ism_store_rc(prfx_rc, ini);
2365 if (smc_vlan_by_tcpsk(new_smc->clcsock, ini))
2366 return ini->rc ?: SMC_CLC_DECL_GETVLANERR;
2370 smc_find_ism_v1_device_serv(new_smc, pclc, ini);
2371 if (ini->ism_dev[0])
2377 return ini->rc ?: SMC_CLC_DECL_NOSMCDDEV;
2380 smc_find_rdma_v2_device_serv(new_smc, pclc, ini);
2381 if (ini->smcrv2.ib_dev_v2)
2388 rc = smc_find_rdma_v1_device_serv(new_smc, pclc, ini);
2389 smc_find_ism_store_rc(rc, ini);
2390 return (!rc) ? 0 : ini->rc;
2399 struct smc_init_info *ini)
2405 smc_link_save_peer_info(link, cclc, ini);
2430 struct smc_init_info *ini = NULL;
2476 ini = kzalloc(sizeof(*ini), GFP_KERNEL);
2477 if (!ini) {
2483 rc = smc_listen_v2_check(new_smc, pclc, ini);
2487 rc = smc_clc_srv_v2x_features_validate(new_smc, pclc, ini);
2497 rc = smc_listen_find_device(new_smc, pclc, ini);
2502 accept_version = ini->is_smcd ? ini->smcd_version : ini->smcr_version;
2503 rc = smc_clc_send_accept(new_smc, ini->first_contact_local,
2504 accept_version, ini->negotiated_eid, ini);
2509 if (ini->is_smcd)
2518 if (!ini->is_smcd)
2523 rc = smc_clc_v2x_features_confirm_check(cclc, ini);
2525 if (!ini->is_smcd)
2536 if (!ini->is_smcd) {
2538 ini->first_contact_local, ini);
2545 SMC_STAT_SERV_SUCC_INC(sock_net(newclcsock->sk), ini);
2551 smc_listen_decline(new_smc, rc, ini ? ini->first_contact_local : 0,
2554 kfree(ini);