On 04.12.23 13:24, Wen Gu wrote: > Thank you very much for review. See below. > > On 2023/12/2 00:30, Alexandra Winter wrote: >> >> >> On 30.11.23 12:28, Wen Gu wrote: >> [...] >>> diff --git a/net/smc/af_smc.c b/net/smc/af_smc.c >>> index 766a1f1..d1e18bf 100644 >>> --- a/net/smc/af_smc.c >>> +++ b/net/smc/af_smc.c >> [...] >>> @@ -1048,7 +1048,8 @@ static int smc_find_ism_v2_device_clnt(struct smc_sock *smc, >>> { >>> int rc = SMC_CLC_DECL_NOSMCDDEV; >>> struct smcd_dev *smcd; >>> - int i = 1; >>> + int i = 1, entry = 1; >>> + bool is_virtual; >>> u16 chid; >>> if (smcd_indicated(ini->smc_type_v1)) >>> @@ -1060,14 +1061,23 @@ static int smc_find_ism_v2_device_clnt(struct smc_sock *smc, >>> chid = smc_ism_get_chid(smcd); >>> if (!smc_find_ism_v2_is_unique_chid(chid, ini, i)) >>> continue; >>> + is_virtual = __smc_ism_is_virtual(chid); >>> if (!smc_pnet_is_pnetid_set(smcd->pnetid) || >>> smc_pnet_is_ndev_pnetid(sock_net(&smc->sk), smcd->pnetid)) { >>> + if (is_virtual && entry == SMC_MAX_ISM_DEVS) >>> + /* only one GID-CHID entry left in CLC Proposal SMC-Dv2 >>> + * extension. but a virtual ISM device's GID takes two >>> + * entries. So give up it and try the next potential ISM >>> + * device. >>> + */ >> >> It is really importatnt to note that virtual ISMs take 2 entries. >> But it is still hard to understand this piece of code. e.g. I was wondering for a while, >> why you mention CLC here... >> Maybe it would be easier to understand this, if you rename SMC_MAX_ISM_DEVS to something else? >> Something like SMCD_MAX_V2_GID_ENTRIES? >> > > I agree. > > But I perfer to define a new macro to represent the max ISMv2 entries in CLC proposal message, > e.g. SMCD_CLC_MAX_V2_GID_ENTRIES, and keep using SMC_MAX_ISM_DEVS to represent the max devices > that can be proposed. Both semantics are required in the code, such as: > > ini->ism_dev[SMC_MAX_ISM_DEVS] | smcd_v2_ext->gidchid[SMCD_CLC_MAX_V2_GID_ENTRIES] > ------------------------------------------------------------------------------------------- > [1:virtual_ISM_1] | [1:virtual_ISM_1 GID] > | [2:virtual_ISM_1 extension GID] > [2:ISM_2] | [3:ISM_2 GID/CHID] > [3:ISM_3] | [4:ISM_3 GID/CHID] > > And SMC_MAX_ISM_DEVS is required no more than SMCD_CLC_MAX_V2_GID_ENTRIES. I agree, this is even better.