Hi all, On Mon, 2 Jul 2018 10:21:06 +1000 Stephen Rothwell wrote: > > Today's linux-next merge of the net-next tree got a conflict in: > > net/smc/smc_ib.c > > between commit: > > ddb457c6993b ("net/smc: Replace ib_query_gid with rdma_get_gid_attr") > > from the rdma tree and commit: > > be6a3f38ff2a ("net/smc: determine port attributes independent from pnet table") > > from the net-next tree. > > I fixed it up (see below) and can carry the fix as necessary. This > is now fixed as far as linux-next is concerned, but any non trivial > conflicts should be mentioned to your upstream maintainer when your tree > is submitted for merging. You may also want to consider cooperating > with the maintainer of the conflicting tree to minimise any particularly > complex conflicts. > > -- > Cheers, > Stephen Rothwell > > diff --cc net/smc/smc_ib.c > index 74f29f814ec1,36de2fd76170..000000000000 > --- a/net/smc/smc_ib.c > +++ b/net/smc/smc_ib.c > @@@ -144,6 -143,62 +144,66 @@@ out > return rc; > } > > + static int smc_ib_fill_gid_and_mac(struct smc_ib_device *smcibdev, u8 ibport) > + { > - struct ib_gid_attr gattr; > - int rc; > - > - rc = ib_query_gid(smcibdev->ibdev, ibport, 0, > - &smcibdev->gid[ibport - 1], &gattr); > - if (rc || !gattr.ndev) > - return -ENODEV; > ++ const struct ib_gid_attr *gattr; > ++ int rc = 0; > + > - memcpy(smcibdev->mac[ibport - 1], gattr.ndev->dev_addr, ETH_ALEN); > - dev_put(gattr.ndev); > - return 0; > ++ gattr = rdma_get_gid_attr(smcibdev->ibdev, ibport, 0); > ++ if (IS_ERR(gattr)) > ++ return PTR_ERR(gattr); > ++ if (!gattr->ndev) { > ++ rc = -ENODEV; > ++ goto done; > ++ } > ++ smcibdev->gid[ibport - 1] = gattr->gid; > ++ memcpy(smcibdev->mac[ibport - 1], gattr->ndev->dev_addr, ETH_ALEN); > ++done: > ++ rdma_put_gid_attr(gattr); > ++ return rc; > + } > + > + /* Create an identifier unique for this instance of SMC-R. > + * The MAC-address of the first active registered IB device > + * plus a random 2-byte number is used to create this identifier. > + * This name is delivered to the peer during connection initialization. > + */ > + static inline void smc_ib_define_local_systemid(struct smc_ib_device *smcibdev, > + u8 ibport) > + { > + memcpy(&local_systemid[2], &smcibdev->mac[ibport - 1], > + sizeof(smcibdev->mac[ibport - 1])); > + get_random_bytes(&local_systemid[0], 2); > + } > + > + bool smc_ib_port_active(struct smc_ib_device *smcibdev, u8 ibport) > + { > + return smcibdev->pattr[ibport - 1].state == IB_PORT_ACTIVE; > + } > + > + static int smc_ib_remember_port_attr(struct smc_ib_device *smcibdev, u8 ibport) > + { > + int rc; > + > + memset(&smcibdev->pattr[ibport - 1], 0, > + sizeof(smcibdev->pattr[ibport - 1])); > + rc = ib_query_port(smcibdev->ibdev, ibport, > + &smcibdev->pattr[ibport - 1]); > + if (rc) > + goto out; > + /* the SMC protocol requires specification of the RoCE MAC address */ > + rc = smc_ib_fill_gid_and_mac(smcibdev, ibport); > + if (rc) > + goto out; > + if (!strncmp(local_systemid, SMC_LOCAL_SYSTEMID_RESET, > + sizeof(local_systemid)) && > + smc_ib_port_active(smcibdev, ibport)) > + /* create unique system identifier */ > + smc_ib_define_local_systemid(smcibdev, ibport); > + out: > + return rc; > + } > + > /* process context wrapper for might_sleep smc_ib_remember_port_attr */ > static void smc_ib_port_event_work(struct work_struct *work) > { This is now a conflict between Linus' tree and the rdma tree. -- Cheers, Stephen Rothwell