linux-rdma.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] rdma-core/libibverbs: display gid type in ibv_devinfo
@ 2020-01-31 10:32 Devesh Sharma
  2020-01-31 11:00 ` Parav Pandit
  0 siblings, 1 reply; 5+ messages in thread
From: Devesh Sharma @ 2020-01-31 10:32 UTC (permalink / raw)
  To: linux-rdma; +Cc: jgg, leon

It becomes difficult to make out from the output of ibv_devinfo
if a particular gid index is RoCE v2 or not.

Adding a string to the output of ibv_devinfo -v to display the
gid type at the end of gid.

Signed-off-by: Devesh Sharma <devesh.sharma@broadcom.com>
---
 libibverbs/examples/devinfo.c | 23 +++++++++++++++++++++--
 1 file changed, 21 insertions(+), 2 deletions(-)

diff --git a/libibverbs/examples/devinfo.c b/libibverbs/examples/devinfo.c
index bf53eac..63988ba 100644
--- a/libibverbs/examples/devinfo.c
+++ b/libibverbs/examples/devinfo.c
@@ -162,8 +162,18 @@ static const char *vl_str(uint8_t vl_num)
 	}
 }
 
+static const char *gid_type_str(enum ibv_gid_type type)
+{
+	switch (type) {
+	case 0: return "IB/RoCE v1";
+	case 1: return "RoCE v2";
+	default: return "invalid value";
+	}
+}
+
 static int print_all_port_gids(struct ibv_context *ctx, uint8_t port_num, int tbl_len)
 {
+	enum ibv_gid_type type;
 	union ibv_gid gid;
 	int rc = 0;
 	int i;
@@ -175,8 +185,16 @@ static int print_all_port_gids(struct ibv_context *ctx, uint8_t port_num, int tb
 			       port_num, i);
 			return rc;
 		}
+
+		rc = ibv_query_gid_type(ctx, port_num, i, &type);
+		if (rc) {
+			fprintf(stderr, "Failed to query gid type to port %d, index %d\n",
+				port_num, i);
+			return rc;
+		}
+
 		if (!null_gid(&gid))
-			printf("\t\t\tGID[%3d]:\t\t%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x\n",
+			printf("\t\t\tGID[%3d]:\t\t%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x, %s\n",
 			       i,
 			       gid.raw[ 0], gid.raw[ 1],
 			       gid.raw[ 2], gid.raw[ 3],
@@ -185,7 +203,8 @@ static int print_all_port_gids(struct ibv_context *ctx, uint8_t port_num, int tb
 			       gid.raw[ 8], gid.raw[ 9],
 			       gid.raw[10], gid.raw[11],
 			       gid.raw[12], gid.raw[13],
-			       gid.raw[14], gid.raw[15]);
+			       gid.raw[14], gid.raw[15],
+			       gid_type_str(type));
 	}
 	return rc;
 }
-- 
1.8.3.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* RE: [PATCH] rdma-core/libibverbs: display gid type in ibv_devinfo
  2020-01-31 10:32 [PATCH] rdma-core/libibverbs: display gid type in ibv_devinfo Devesh Sharma
@ 2020-01-31 11:00 ` Parav Pandit
  2020-01-31 15:40   ` Devesh Sharma
  0 siblings, 1 reply; 5+ messages in thread
From: Parav Pandit @ 2020-01-31 11:00 UTC (permalink / raw)
  To: Devesh Sharma, linux-rdma; +Cc: Jason Gunthorpe, leon

Hi Devesh,

> From: linux-rdma-owner@vger.kernel.org <linux-rdma-
> owner@vger.kernel.org> On Behalf Of Devesh Sharma


[..]

>  static int print_all_port_gids(struct ibv_context *ctx, uint8_t port_num, int
> tbl_len)  {
> +	enum ibv_gid_type type;
>  	union ibv_gid gid;
>  	int rc = 0;
>  	int i;
> @@ -175,8 +185,16 @@ static int print_all_port_gids(struct ibv_context *ctx,
> uint8_t port_num, int tb
>  			       port_num, i);
>  			return rc;
>  		}
> +
> +		rc = ibv_query_gid_type(ctx, port_num, i, &type);
> +		if (rc) {
> +			fprintf(stderr, "Failed to query gid type to port %d,
> index %d\n",
> +				port_num, i);
> +			return rc;
GID table can have holes depending on how IP addresses, vlan configured/removed.
ibv_query_gid_type() is masking the EINVAL error with RoCEv1 type so here return is ok.
But as good practice, instead of bailing out the loop, if it returns failure, skip the particular GID entry print.
This way rest of valid entries can be still printed.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] rdma-core/libibverbs: display gid type in ibv_devinfo
  2020-01-31 11:00 ` Parav Pandit
@ 2020-01-31 15:40   ` Devesh Sharma
  2020-01-31 15:53     ` Devesh Sharma
  0 siblings, 1 reply; 5+ messages in thread
From: Devesh Sharma @ 2020-01-31 15:40 UTC (permalink / raw)
  To: Parav Pandit; +Cc: linux-rdma, Jason Gunthorpe, leon

On Fri, Jan 31, 2020, 16:30 Parav Pandit <parav@mellanox.com> wrote:
>
> Hi Devesh,
>
> > From: linux-rdma-owner@vger.kernel.org <linux-rdma-
> > owner@vger.kernel.org> On Behalf Of Devesh Sharma
>
>
> [..]
>
> >  static int print_all_port_gids(struct ibv_context *ctx, uint8_t port_num, int
> > tbl_len)  {
> > +     enum ibv_gid_type type;
> >       union ibv_gid gid;
> >       int rc = 0;
> >       int i;
> > @@ -175,8 +185,16 @@ static int print_all_port_gids(struct ibv_context *ctx,
> > uint8_t port_num, int tb
> >                              port_num, i);
> >                       return rc;
> >               }
> > +
> > +             rc = ibv_query_gid_type(ctx, port_num, i, &type);
> > +             if (rc) {
> > +                     fprintf(stderr, "Failed to query gid type to port %d,
> > index %d\n",
> > +                             port_num, i);
> > +                     return rc;
> GID table can have holes depending on how IP addresses, vlan configured/removed.
> ibv_query_gid_type() is masking the EINVAL error with RoCEv1 type so here return is ok.
> But as good practice, instead of bailing out the loop, if it returns failure, skip the particular GID entry print.
> This way rest of valid entries can be still printed.

Okay, will send V2 shortly.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] rdma-core/libibverbs: display gid type in ibv_devinfo
  2020-01-31 15:40   ` Devesh Sharma
@ 2020-01-31 15:53     ` Devesh Sharma
  2020-01-31 16:56       ` Parav Pandit
  0 siblings, 1 reply; 5+ messages in thread
From: Devesh Sharma @ 2020-01-31 15:53 UTC (permalink / raw)
  To: Parav Pandit; +Cc: linux-rdma, Jason Gunthorpe, leon

On Fri, Jan 31, 2020 at 9:10 PM Devesh Sharma
<devesh.sharma@broadcom.com> wrote:
>
> On Fri, Jan 31, 2020, 16:30 Parav Pandit <parav@mellanox.com> wrote:
> >
> > Hi Devesh,
> >
> > > From: linux-rdma-owner@vger.kernel.org <linux-rdma-
> > > owner@vger.kernel.org> On Behalf Of Devesh Sharma
> >
> >
> > [..]
> >
> > >  static int print_all_port_gids(struct ibv_context *ctx, uint8_t port_num, int
> > > tbl_len)  {
> > > +     enum ibv_gid_type type;
> > >       union ibv_gid gid;
> > >       int rc = 0;
> > >       int i;
> > > @@ -175,8 +185,16 @@ static int print_all_port_gids(struct ibv_context *ctx,
> > > uint8_t port_num, int tb
> > >                              port_num, i);
> > >                       return rc;
> > >               }
> > > +
> > > +             rc = ibv_query_gid_type(ctx, port_num, i, &type);
> > > +             if (rc) {
> > > +                     fprintf(stderr, "Failed to query gid type to port %d,
> > > index %d\n",
> > > +                             port_num, i);
> > > +                     return rc;
> > GID table can have holes depending on how IP addresses, vlan configured/removed.
> > ibv_query_gid_type() is masking the EINVAL error with RoCEv1 type so here return is ok.
> > But as good practice, instead of bailing out the loop, if it returns failure, skip the particular GID entry print.
> > This way rest of valid entries can be still printed.
>
> Okay, will send V2 shortly.

Is this what you want:
if (rc) {
   print msg;
   save rc in tmp var;
   continue;
}

in the end after loop over
return saved-rc-tmp-var;
Alter saved-rc-tmp-var accordingly for good cases.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* RE: [PATCH] rdma-core/libibverbs: display gid type in ibv_devinfo
  2020-01-31 15:53     ` Devesh Sharma
@ 2020-01-31 16:56       ` Parav Pandit
  0 siblings, 0 replies; 5+ messages in thread
From: Parav Pandit @ 2020-01-31 16:56 UTC (permalink / raw)
  To: Devesh Sharma; +Cc: linux-rdma, Jason Gunthorpe, leon



> From: Devesh Sharma <devesh.sharma@broadcom.com>
> Sent: Friday, January 31, 2020 9:23 PM
> To: Parav Pandit <parav@mellanox.com>
> Cc: linux-rdma <linux-rdma@vger.kernel.org>; Jason Gunthorpe
> <jgg@mellanox.com>; leon@kernel.org
> Subject: Re: [PATCH] rdma-core/libibverbs: display gid type in ibv_devinfo
> 
> On Fri, Jan 31, 2020 at 9:10 PM Devesh Sharma
> <devesh.sharma@broadcom.com> wrote:
> >
> > On Fri, Jan 31, 2020, 16:30 Parav Pandit <parav@mellanox.com> wrote:
> > >
> > > Hi Devesh,
> > >
> > > > From: linux-rdma-owner@vger.kernel.org <linux-rdma-
> > > > owner@vger.kernel.org> On Behalf Of Devesh Sharma
> > >
> > >
> > > [..]
> > >
> > > >  static int print_all_port_gids(struct ibv_context *ctx, uint8_t
> > > > port_num, int
> > > > tbl_len)  {
> > > > +     enum ibv_gid_type type;
> > > >       union ibv_gid gid;
> > > >       int rc = 0;
> > > >       int i;
> > > > @@ -175,8 +185,16 @@ static int print_all_port_gids(struct
> > > > ibv_context *ctx, uint8_t port_num, int tb
> > > >                              port_num, i);
> > > >                       return rc;
> > > >               }
> > > > +
> > > > +             rc = ibv_query_gid_type(ctx, port_num, i, &type);
> > > > +             if (rc) {
> > > > +                     fprintf(stderr, "Failed to query gid type to
> > > > + port %d,
> > > > index %d\n",
> > > > +                             port_num, i);
> > > > +                     return rc;
> > > GID table can have holes depending on how IP addresses, vlan
> configured/removed.
> > > ibv_query_gid_type() is masking the EINVAL error with RoCEv1 type so here
> return is ok.
> > > But as good practice, instead of bailing out the loop, if it returns failure,
> skip the particular GID entry print.
> > > This way rest of valid entries can be still printed.
> >
> > Okay, will send V2 shortly.
> 
> Is this what you want:
> if (rc) {
>    print msg;
>    save rc in tmp var;
>    continue;
> }
> 
Bit simpler than that to just ignore the error (for an invalid gid entry).

rc = ibv_query_gid_type(ctx, port_num, i, &type);
if (rc) {
	rc = 0;
	continue;
}

> in the end after loop over
> return saved-rc-tmp-var;
> Alter saved-rc-tmp-var accordingly for good cases.

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2020-01-31 16:56 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-01-31 10:32 [PATCH] rdma-core/libibverbs: display gid type in ibv_devinfo Devesh Sharma
2020-01-31 11:00 ` Parav Pandit
2020-01-31 15:40   ` Devesh Sharma
2020-01-31 15:53     ` Devesh Sharma
2020-01-31 16:56       ` Parav Pandit

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).