> -----Original Message----- > From: Ursula Braun [mailto:ubr...@linux.vnet.ibm.com] > Sent: Tuesday, October 10, 2017 9:14 AM > To: da...@davemloft.net > Cc: netdev@vger.kernel.org; linux-r...@vger.kernel.org; linux- > s...@vger.kernel.org; j...@linux.vnet.ibm.com; schwidef...@de.ibm.com; > heiko.carst...@de.ibm.com; ra...@linux.vnet.ibm.com; > ubr...@linux.vnet.ibm.com; Parav Pandit <pa...@mellanox.com> > Subject: [PATCH net 1/2] net/smc: replace function pointer get_netdev() > > SMC should not open code the function pointer get_netdev of the IB device. > Replacing ib_query_gid(..., NULL) with ib_query_gid(..., gid_attr) allows > access > to the netdev. > > Signed-off-by: Ursula Braun <ubr...@linux.vnet.ibm.com> > Suggested-by: Parav Pandit <pa...@mellanox.com> Looks fine to me. Minor nit below. Reviewed-by: Parav Pandit <pa...@mellanox.com>
> --- > net/smc/smc_ib.c | 26 +++++++++----------------- > 1 file changed, 9 insertions(+), 17 deletions(-) > > diff --git a/net/smc/smc_ib.c b/net/smc/smc_ib.c index > 0b5852299158..b428c0f6c782 100644 > --- a/net/smc/smc_ib.c > +++ b/net/smc/smc_ib.c > @@ -369,26 +369,17 @@ void smc_ib_buf_unmap_sg(struct smc_ib_device > *smcibdev, > > static int smc_ib_fill_gid_and_mac(struct smc_ib_device *smcibdev, u8 ibport) > { > - struct net_device *ndev; > + struct ib_gid_attr gattr; > int rc; > > rc = ib_query_gid(smcibdev->ibdev, ibport, 0, > - &smcibdev->gid[ibport - 1], NULL); > - /* the SMC protocol requires specification of the roce MAC address; > - * if net_device cannot be determined, it can be derived from gid 0 > - */ > - ndev = smcibdev->ibdev->get_netdev(smcibdev->ibdev, ibport); > - if (ndev) { > - memcpy(&smcibdev->mac, ndev->dev_addr, ETH_ALEN); > - dev_put(ndev); > - } else if (!rc) { > - memcpy(&smcibdev->mac[ibport - 1][0], > - &smcibdev->gid[ibport - 1].raw[8], 3); > - memcpy(&smcibdev->mac[ibport - 1][3], > - &smcibdev->gid[ibport - 1].raw[13], 3); > - smcibdev->mac[ibport - 1][0] &= ~0x02; > - } > - return rc; > + &smcibdev->gid[ibport - 1], &gattr); > + if (rc || !gattr.ndev) > + return -ENODEV; > + > + memcpy(smcibdev->mac[ibport - 1], gattr.ndev->dev_addr, ETH_ALEN); > + dev_put(gattr.ndev); > + return 0; > } > > /* Create an identifier unique for this instance of SMC-R. > @@ -419,6 +410,7 @@ int smc_ib_remember_port_attr(struct smc_ib_device > *smcibdev, u8 ibport) > &smcibdev->pattr[ibport - 1]); > if (rc) > goto out; > + /* the SMC protocol requires specification of the roce MAC address */ RoCE MAC address > rc = smc_ib_fill_gid_and_mac(smcibdev, ibport); > if (rc) > goto out; > -- > 2.13.5