diff mbox

[rdma-next,1/2] IB/core: Introduce and use rdma_is_zero_gid()

Message ID 20180523225739.GA14568@ziepe.ca (mailing list archive)
State RFC
Headers show

Commit Message

Jason Gunthorpe May 23, 2018, 10:57 p.m. UTC
On Tue, May 22, 2018 at 08:33:45PM +0300, Leon Romanovsky wrote:
> From: Parav Pandit <parav@mellanox.com>
> 
> Instead of open coding memcmp() to check whether a given GID is zero or
> not, use a helper function to do so.
> 
> Signed-off-by: Parav Pandit <parav@mellanox.com>
> Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
> ---
>  drivers/infiniband/core/cache.c   | 14 ++++++++++++--
>  drivers/infiniband/hw/mlx4/main.c |  2 +-
>  drivers/infiniband/hw/mlx4/qp.c   |  2 +-
>  include/rdma/ib_cache.h           |  1 +
>  4 files changed, 15 insertions(+), 4 deletions(-)

Applied, but I noticed this missed a memcmp, and I decided to drop the
memcpy's too. Here is delta, please check my change.

Would be nice to see the last two zgid users go away and with them the
global symbol too..

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Parav Pandit May 24, 2018, 2:43 a.m. UTC | #1
> -----Original Message-----
> From: Jason Gunthorpe [mailto:jgg@ziepe.ca]
> Sent: Wednesday, May 23, 2018 5:58 PM
> To: Leon Romanovsky <leon@kernel.org>
> Cc: Doug Ledford <dledford@redhat.com>; Leon Romanovsky
> <leonro@mellanox.com>; RDMA mailing list <linux-rdma@vger.kernel.org>;
> Parav Pandit <parav@mellanox.com>
> Subject: Re: [PATCH rdma-next 1/2] IB/core: Introduce and use
> rdma_is_zero_gid()
> 
> On Tue, May 22, 2018 at 08:33:45PM +0300, Leon Romanovsky wrote:
> > From: Parav Pandit <parav@mellanox.com>
> >
> > Instead of open coding memcmp() to check whether a given GID is zero
> > or not, use a helper function to do so.
> >
> > Signed-off-by: Parav Pandit <parav@mellanox.com>
> > Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
> > ---
> >  drivers/infiniband/core/cache.c   | 14 ++++++++++++--
> >  drivers/infiniband/hw/mlx4/main.c |  2 +-
> >  drivers/infiniband/hw/mlx4/qp.c   |  2 +-
> >  include/rdma/ib_cache.h           |  1 +
> >  4 files changed, 15 insertions(+), 4 deletions(-)
> 
> Applied, but I noticed this missed a memcmp, and I decided to drop the
> memcpy's too. Here is delta, please check my change.
2 out of 3 changes are fine.
cleanup_gid_table_port() cleanup was not needed because in next patch zero gid checking goes away as we completely rely on the state/validity of the gid.
But its fine, I will update the next patch to avoid merge conflict.

> 
> Would be nice to see the last two zgid users go away and with them the global
> symbol too..
> 
> diff --git a/drivers/infiniband/core/cache.c b/drivers/infiniband/core/cache.c
> index c09b63f9960387..82699f70e9b60b 100644
> --- a/drivers/infiniband/core/cache.c
> +++ b/drivers/infiniband/core/cache.c
> @@ -274,7 +274,7 @@ static void del_gid(struct ib_device *ib_dev, u8 port,
> 
>  	if (rdma_protocol_roce(ib_dev, port))
>  		del_roce_gid(ib_dev, port, table, ix);
> -	memcpy(&table->data_vec[ix].gid, &zgid, sizeof(zgid));
> +	memset(&table->data_vec[ix].gid, 0, sizeof(table->data_vec[ix].gid));
>  	memset(&table->data_vec[ix].attr, 0, sizeof(table->data_vec[ix].attr));
>  	table->data_vec[ix].context = NULL;
>  }
> @@ -734,8 +734,7 @@ static void cleanup_gid_table_port(struct ib_device
> *ib_dev, u8 port,
> 
>  	mutex_lock(&table->lock);
>  	for (i = 0; i < table->sz; ++i) {
> -		if (memcmp(&table->data_vec[i].gid, &zgid,
> -			   sizeof(table->data_vec[i].gid))) {
> +		if (!rdma_is_zero_gid(&table->data_vec[i].gid)) {
>  			del_gid(ib_dev, port, table, i);
>  			deleted = true;
>  		}
> diff --git a/drivers/infiniband/hw/mlx4/main.c
> b/drivers/infiniband/hw/mlx4/main.c
> index c6d6c1c3410ecd..bf12394c13c165 100644
> --- a/drivers/infiniband/hw/mlx4/main.c
> +++ b/drivers/infiniband/hw/mlx4/main.c
> @@ -345,7 +345,8 @@ static int mlx4_ib_del_gid(const struct ib_gid_attr *attr,
> void **context)
>  		if (!ctx->refcount) {
>  			unsigned int real_index = ctx->real_index;
> 
> -			memcpy(&port_gid_table->gids[real_index].gid, &zgid,
> sizeof(zgid));
> +			memset(&port_gid_table->gids[real_index].gid, 0,
> +			       sizeof(port_gid_table->gids[real_index].gid));
>  			kfree(port_gid_table->gids[real_index].ctx);
>  			port_gid_table->gids[real_index].ctx = NULL;
>  			hw_update = 1;
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/infiniband/core/cache.c b/drivers/infiniband/core/cache.c
index c09b63f9960387..82699f70e9b60b 100644
--- a/drivers/infiniband/core/cache.c
+++ b/drivers/infiniband/core/cache.c
@@ -274,7 +274,7 @@  static void del_gid(struct ib_device *ib_dev, u8 port,
 
 	if (rdma_protocol_roce(ib_dev, port))
 		del_roce_gid(ib_dev, port, table, ix);
-	memcpy(&table->data_vec[ix].gid, &zgid, sizeof(zgid));
+	memset(&table->data_vec[ix].gid, 0, sizeof(table->data_vec[ix].gid));
 	memset(&table->data_vec[ix].attr, 0, sizeof(table->data_vec[ix].attr));
 	table->data_vec[ix].context = NULL;
 }
@@ -734,8 +734,7 @@  static void cleanup_gid_table_port(struct ib_device *ib_dev, u8 port,
 
 	mutex_lock(&table->lock);
 	for (i = 0; i < table->sz; ++i) {
-		if (memcmp(&table->data_vec[i].gid, &zgid,
-			   sizeof(table->data_vec[i].gid))) {
+		if (!rdma_is_zero_gid(&table->data_vec[i].gid)) {
 			del_gid(ib_dev, port, table, i);
 			deleted = true;
 		}
diff --git a/drivers/infiniband/hw/mlx4/main.c b/drivers/infiniband/hw/mlx4/main.c
index c6d6c1c3410ecd..bf12394c13c165 100644
--- a/drivers/infiniband/hw/mlx4/main.c
+++ b/drivers/infiniband/hw/mlx4/main.c
@@ -345,7 +345,8 @@  static int mlx4_ib_del_gid(const struct ib_gid_attr *attr, void **context)
 		if (!ctx->refcount) {
 			unsigned int real_index = ctx->real_index;
 
-			memcpy(&port_gid_table->gids[real_index].gid, &zgid, sizeof(zgid));
+			memset(&port_gid_table->gids[real_index].gid, 0,
+			       sizeof(port_gid_table->gids[real_index].gid));
 			kfree(port_gid_table->gids[real_index].ctx);
 			port_gid_table->gids[real_index].ctx = NULL;
 			hw_update = 1;