Skip to contentSkip to conversation

RDMA tool driver-specific resource tracking

PATCH Superseded Steve Wise 3 participants 15 messages May 14, 2018 – May 15, 2018

Subsystems (3)

v2 of 3 Superseded Latest is v3 →

lore
Share & tools
lore

Steve Wise

author
#0 lore raw

v2 cover RDMA tool driver-specific resource tracking

Hello,

This series enhances the iproute2 rdma tool to include displaying driver-specific resource attributes. It is the user-space part of the kernel driver resource tracking series that has been accepted for merging into linux-4.18 [1]

If there are no additional review comments, it can now be merged, I think.

Changes since v1:
- commit log editorial fixes
- cite kernel commits that updated rdma_netlink.h in the iproute2 commit syncing this header
- reorder stack definitions ala "reverse christmas tree"
- correctly handle unknown driver attributes when printing

Changes since v0/rfc:
- changed "provider" to "driver" based on kernel side changes
- updated man pages
- removed "RFC" tag

Thanks,

Steve.

[1] https://www.spinics.net/lists/linux-rdma/msg64199.html

Steve Wise (3):
rdma: update rdma_netlink.h to get new driver attributes
rdma: print driver resource attributes
rdma: update man pages

 man/man8/rdma-resource.8              |  29 ++++-
 man/man8/rdma.8                       |   2 +-
 rdma/include/uapi/rdma/rdma_netlink.h |  26 +++++
 rdma/rdma.c                           |   9 +-
 rdma/rdma.h                           |  11 ++
 rdma/res.c                            |  30 ++----
 rdma/utils.c                          | 196 ++++++++++++++++++++++++++++++++++
 7 files changed, 277 insertions(+), 26 deletions(-)
Signature · 1 line
1.8.3.1
author
#1 lore raw

PATCH v2 1/3 rdma: update rdma_netlink.h to get new driver attributes

Pull in the rdma_netlink.h changes from kernel
commits:

25a0ad85156a ("RDMA/nldev: Add explicit pad attribute") da5c85078215 ("RDMA/nldev: add driver-specific resource tracking)"

---
 rdma/include/uapi/rdma/rdma_netlink.h | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)
rdma/include/uapi/rdma/rdma_netlink.h +26 -0
index 60416ed..40be0d8 100644
@@ -249,10 +249,22 @@ enum rdma_nldev_command {
 	RDMA_NLDEV_NUM_OPS
 };
 
+enum {
+	RDMA_NLDEV_ATTR_ENTRY_STRLEN = 16,
+};
+
+enum rdma_nldev_print_type {
+	RDMA_NLDEV_PRINT_TYPE_UNSPEC,
+	RDMA_NLDEV_PRINT_TYPE_HEX,
+};
+
 enum rdma_nldev_attr {
 	/* don't change the order or add anything between, this is ABI! */
 	RDMA_NLDEV_ATTR_UNSPEC,
 
+	/* Pad attribute for 64b alignment */
+	RDMA_NLDEV_ATTR_PAD = RDMA_NLDEV_ATTR_UNSPEC,
+
 	/* Identifier for ib_device */
 	RDMA_NLDEV_ATTR_DEV_INDEX,		/* u32 */
 
@@ -387,6 +399,20 @@ enum rdma_nldev_attr {
 	RDMA_NLDEV_ATTR_RES_PD_ENTRY,		/* nested table */
 	RDMA_NLDEV_ATTR_RES_LOCAL_DMA_LKEY,	/* u32 */
 	RDMA_NLDEV_ATTR_RES_UNSAFE_GLOBAL_RKEY,	/* u32 */
+	/*
+	 * driver-specific attributes.
+	 */
+	RDMA_NLDEV_ATTR_DRIVER,			/* nested table */
+	RDMA_NLDEV_ATTR_DRIVER_ENTRY,		/* nested table */
+	RDMA_NLDEV_ATTR_DRIVER_STRING,		/* string */
+	/*
+	 * u8 values from enum rdma_nldev_print_type
+	 */
+	RDMA_NLDEV_ATTR_DRIVER_PRINT_TYPE,	/* u8 */
+	RDMA_NLDEV_ATTR_DRIVER_S32,		/* s32 */
+	RDMA_NLDEV_ATTR_DRIVER_U32,		/* u32 */
+	RDMA_NLDEV_ATTR_DRIVER_S64,		/* s64 */
+	RDMA_NLDEV_ATTR_DRIVER_U64,		/* u64 */
 
 	/*
 	 * Provides logical name and index of netdevice which is
Signature · 1 line
1.8.3.1
#2 lore raw

Re: [PATCH v2 iproute2-next 1/3] rdma: update rdma_netlink.h to get new driver attributes

Quoted 9 lines · Steve Wise
rdma/include/uapi/rdma/rdma_netlink.h +1 -0
index 60416ed..40be0d8 100644
@@ -249,10 +249,22 @@ enum rdma_nldev_command {
 	RDMA_NLDEV_NUM_OPS
 };
 
+enum {

rdma/include/uapi/rdma/rdma_netlink.h enum rdma_nldev_command { · line 262

Quoted 10 lines
rdma/include/uapi/rdma/rdma_netlink.h +8 -0
+	RDMA_NLDEV_ATTR_ENTRY_STRLEN = 16,
+};
+
+enum rdma_nldev_print_type {
+	RDMA_NLDEV_PRINT_TYPE_UNSPEC,
+	RDMA_NLDEV_PRINT_TYPE_HEX,
+};
+
 enum rdma_nldev_attr {
 	/* don't change the order or add anything between, this is ABI! */

I asked this before and did not get a response. As the comment above states with an emphasis (!) ...

rdma/include/uapi/rdma/rdma_netlink.h enum rdma_nldev_command { · line 267

Quoted 5 lines
rdma/include/uapi/rdma/rdma_netlink.h +3 -0
 	RDMA_NLDEV_ATTR_UNSPEC,
 
+	/* Pad attribute for 64b alignment */
+	RDMA_NLDEV_ATTR_PAD = RDMA_NLDEV_ATTR_UNSPEC,
+

... are you really adding new attributes in the middle?

Quoted 11 lines
rdma/include/uapi/rdma/rdma_netlink.h +4 -0
 	/* Identifier for ib_device */
 	RDMA_NLDEV_ATTR_DEV_INDEX,		/* u32 */
 
@@ -387,6 +399,20 @@ enum rdma_nldev_attr {
 	RDMA_NLDEV_ATTR_RES_PD_ENTRY,		/* nested table */
 	RDMA_NLDEV_ATTR_RES_LOCAL_DMA_LKEY,	/* u32 */
 	RDMA_NLDEV_ATTR_RES_UNSAFE_GLOBAL_RKEY,	/* u32 */
+	/*
+	 * driver-specific attributes.
+	 */
+	RDMA_NLDEV_ATTR_DRIVER,			/* nested table */

rdma/include/uapi/rdma/rdma_netlink.h enum rdma_nldev_attr { · line 415

Quoted 10 lines
rdma/include/uapi/rdma/rdma_netlink.h +10 -0
+	RDMA_NLDEV_ATTR_DRIVER_ENTRY,		/* nested table */
+	RDMA_NLDEV_ATTR_DRIVER_STRING,		/* string */
+	/*
+	 * u8 values from enum rdma_nldev_print_type
+	 */
+	RDMA_NLDEV_ATTR_DRIVER_PRINT_TYPE,	/* u8 */
+	RDMA_NLDEV_ATTR_DRIVER_S32,		/* s32 */
+	RDMA_NLDEV_ATTR_DRIVER_U32,		/* u32 */
+	RDMA_NLDEV_ATTR_DRIVER_S64,		/* s64 */
+	RDMA_NLDEV_ATTR_DRIVER_U64,		/* u64 */

and again here.

Quoted 4 lines
rdma/include/uapi/rdma/rdma_netlink.h +0 -0
 	/*
 	 * Provides logical name and index of netdevice which is
 
#3 lore raw

Re: [PATCH v2 iproute2-next 1/3] rdma: update rdma_netlink.h to get new driver attributes

Quoted 24 lines · David Ahern
Quoted 9 lines · Steve Wise
rdma/include/uapi/rdma/rdma_netlink.h +1 -0
index 60416ed..40be0d8 100644
@@ -249,10 +249,22 @@ enum rdma_nldev_command {
 	RDMA_NLDEV_NUM_OPS
 };
 
+enum {

rdma/include/uapi/rdma/rdma_netlink.h enum rdma_nldev_command { · line 262

Quoted 10 lines
rdma/include/uapi/rdma/rdma_netlink.h +8 -0
+	RDMA_NLDEV_ATTR_ENTRY_STRLEN = 16,
+};
+
+enum rdma_nldev_print_type {
+	RDMA_NLDEV_PRINT_TYPE_UNSPEC,
+	RDMA_NLDEV_PRINT_TYPE_HEX,
+};
+
 enum rdma_nldev_attr {
 	/* don't change the order or add anything between, this is ABI! */

I asked this before and did not get a response. As the comment above states with an emphasis (!) ...

Quoted 7 lines

rdma/include/uapi/rdma/rdma_netlink.h enum rdma_nldev_command { · line 267

Quoted 5 lines
rdma/include/uapi/rdma/rdma_netlink.h +3 -0
 	RDMA_NLDEV_ATTR_UNSPEC,
 
+	/* Pad attribute for 64b alignment */
+	RDMA_NLDEV_ATTR_PAD = RDMA_NLDEV_ATTR_UNSPEC,
+

... are you really adding new attributes in the middle?

Not really. The new item is being explicitly set to the same value as the item above it. It therefore becomes two entries with the same enum value. The rest of the enum is all unchanged.

Quoted 33 lines
Quoted 11 lines
rdma/include/uapi/rdma/rdma_netlink.h +4 -0
 	/* Identifier for ib_device */
 	RDMA_NLDEV_ATTR_DEV_INDEX,		/* u32 */
 
@@ -387,6 +399,20 @@ enum rdma_nldev_attr {
 	RDMA_NLDEV_ATTR_RES_PD_ENTRY,		/* nested table */
 	RDMA_NLDEV_ATTR_RES_LOCAL_DMA_LKEY,	/* u32 */
 	RDMA_NLDEV_ATTR_RES_UNSAFE_GLOBAL_RKEY,	/* u32 */
+	/*
+	 * driver-specific attributes.
+	 */
+	RDMA_NLDEV_ATTR_DRIVER,			/* nested table */

rdma/include/uapi/rdma/rdma_netlink.h enum rdma_nldev_attr { · line 415

Quoted 10 lines
rdma/include/uapi/rdma/rdma_netlink.h +10 -0
+	RDMA_NLDEV_ATTR_DRIVER_ENTRY,		/* nested table */
+	RDMA_NLDEV_ATTR_DRIVER_STRING,		/* string */
+	/*
+	 * u8 values from enum rdma_nldev_print_type
+	 */
+	RDMA_NLDEV_ATTR_DRIVER_PRINT_TYPE,	/* u8 */
+	RDMA_NLDEV_ATTR_DRIVER_S32,		/* s32 */
+	RDMA_NLDEV_ATTR_DRIVER_U32,		/* u32 */
+	RDMA_NLDEV_ATTR_DRIVER_S64,		/* s64 */
+	RDMA_NLDEV_ATTR_DRIVER_U64,		/* u64 */

and again here.

rdma/include/uapi/rdma/rdma_netlink.h enum rdma_nldev_attr {

Quoted 4 lines
rdma/include/uapi/rdma/rdma_netlink.h +0 -0
 	/*
 	 * Provides logical name and index of netdevice which is
 

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

Signature · 3 lines
Doug Ledford <[email protected]>
    GPG KeyID: B826A3330E572FDD
    Key fingerprint = AE6B 1BDA 122B 23B4 265B  1274 B826 A333 0E57 2FDD
#4 lore raw

Re: [PATCH v2 iproute2-next 1/3] rdma: update rdma_netlink.h to get new driver attributes

Quoted 33 lines · Doug Ledford
Quoted 24 lines · David Ahern
Quoted 9 lines · Steve Wise
rdma/include/uapi/rdma/rdma_netlink.h +1 -0
index 60416ed..40be0d8 100644
@@ -249,10 +249,22 @@ enum rdma_nldev_command {
 	RDMA_NLDEV_NUM_OPS
 };
 
+enum {

rdma/include/uapi/rdma/rdma_netlink.h enum rdma_nldev_command { · line 262

Quoted 10 lines
rdma/include/uapi/rdma/rdma_netlink.h +8 -0
+	RDMA_NLDEV_ATTR_ENTRY_STRLEN = 16,
+};
+
+enum rdma_nldev_print_type {
+	RDMA_NLDEV_PRINT_TYPE_UNSPEC,
+	RDMA_NLDEV_PRINT_TYPE_HEX,
+};
+
 enum rdma_nldev_attr {
 	/* don't change the order or add anything between, this is ABI! */

I asked this before and did not get a response. As the comment above states with an emphasis (!) ...

Quoted 7 lines

rdma/include/uapi/rdma/rdma_netlink.h enum rdma_nldev_command { · line 267

Quoted 5 lines
rdma/include/uapi/rdma/rdma_netlink.h +3 -0
 	RDMA_NLDEV_ATTR_UNSPEC,
 
+	/* Pad attribute for 64b alignment */
+	RDMA_NLDEV_ATTR_PAD = RDMA_NLDEV_ATTR_UNSPEC,
+

... are you really adding new attributes in the middle?

Quoted 3 lines

Not really. The new item is being explicitly set to the same value as the item above it. It therefore becomes two entries with the same enum value. The rest of the enum is all unchanged.

sure for the above, but not the ones below.

Before this patch, this program:

$ cat a.c
#include <uapi/rdma/rdma_netlink.h>
#include <stdio.h>

int main(void)

{
	printf("RDMA_NLDEV_ATTR_NDEV_INDEX = %d\n", RDMA_NLDEV_ATTR_NDEV_INDEX);

	return 0;
}

prints this:

$ ./a.out
RDMA_NLDEV_ATTR_NDEV_INDEX = 50

After this patch,

$ ./a.out
RDMA_NLDEV_ATTR_NDEV_INDEX = 58
Quoted 35 lines
Quoted 34 lines
Quoted 12 lines
rdma/include/uapi/rdma/rdma_netlink.h +4 -0
 	/* Identifier for ib_device */
 	RDMA_NLDEV_ATTR_DEV_INDEX,		/* u32 */
 
@@ -387,6 +399,20 @@ enum rdma_nldev_attr {
 	RDMA_NLDEV_ATTR_RES_PD_ENTRY,		/* nested table */
 	RDMA_NLDEV_ATTR_RES_LOCAL_DMA_LKEY,	/* u32 */
 	RDMA_NLDEV_ATTR_RES_UNSAFE_GLOBAL_RKEY,	/* u32 */
+	/*
+	 * driver-specific attributes.
+	 */
+	RDMA_NLDEV_ATTR_DRIVER,			/* nested table */

rdma/include/uapi/rdma/rdma_netlink.h enum rdma_nldev_attr { · line 415

Quoted 10 lines
rdma/include/uapi/rdma/rdma_netlink.h +10 -0
+	RDMA_NLDEV_ATTR_DRIVER_ENTRY,		/* nested table */
+	RDMA_NLDEV_ATTR_DRIVER_STRING,		/* string */
+	/*
+	 * u8 values from enum rdma_nldev_print_type
+	 */
+	RDMA_NLDEV_ATTR_DRIVER_PRINT_TYPE,	/* u8 */
+	RDMA_NLDEV_ATTR_DRIVER_S32,		/* s32 */
+	RDMA_NLDEV_ATTR_DRIVER_U32,		/* u32 */
+	RDMA_NLDEV_ATTR_DRIVER_S64,		/* s64 */
+	RDMA_NLDEV_ATTR_DRIVER_U64,		/* u64 */

and again here.

rdma/include/uapi/rdma/rdma_netlink.h enum rdma_nldev_attr {

Quoted 4 lines
rdma/include/uapi/rdma/rdma_netlink.h +0 -0
 	/*
 	 * Provides logical name and index of netdevice which is
 

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" icat n the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html

#5 lore raw

Re: [PATCH v2 iproute2-next 1/3] rdma: update rdma_netlink.h to get new driver attributes

Quoted 14 lines · David Ahern

sure for the above, but not the ones below.

Before this patch, this program:

$ cat a.c
#include <uapi/rdma/rdma_netlink.h>
#include <stdio.h>

int main(void)

{
        printf("RDMA_NLDEV_ATTR_NDEV_INDEX = %d\n", RDMA_NLDEV_ATTR_NDEV_INDEX);

        return 0;
}
Quoted 7 lines

prints this:

$ ./a.out
RDMA_NLDEV_ATTR_NDEV_INDEX = 50

After this patch,

$ ./a.out
RDMA_NLDEV_ATTR_NDEV_INDEX = 58

I just sent an incremental fix to the list under separate cover. You can squash that fix into Steve's patch and it should resolve the issue. Or Steve can respin the set. Either way.

Signature · 3 lines
Doug Ledford <[email protected]>
    GPG KeyID: B826A3330E572FDD
    Key fingerprint = AE6B 1BDA 122B 23B4 265B  1274 B826 A333 0E57 2FDD
#6 lore raw

Re: [PATCH v2 iproute2-next 1/3] rdma: update rdma_netlink.h to get new driver attributes

Quoted 3 lines · Doug Ledford

I just sent an incremental fix to the list under separate cover. You can squash that fix into Steve's patch and it should resolve the issue. Or Steve can respin the set. Either way.

Once the patch has been committed to the upstream repo, spin a new set with the correct header update.

#7 lore raw

Re: [PATCH v2 iproute2-next 1/3] rdma: update rdma_netlink.h to get new driver attributes

Quoted 7 lines · David Ahern
Quoted 3 lines · Doug Ledford

I just sent an incremental fix to the list under separate cover. You can squash that fix into Steve's patch and it should resolve the issue. Or Steve can respin the set. Either way.

Once the patch has been committed to the upstream repo, spin a new set with the correct header update.

Well, I wrote it, so it's in my repo now ;-). I just sent it to the list because that's what you do when you are writing fixup patches even if you've already committed them.

Signature · 3 lines
Doug Ledford <[email protected]>
    GPG KeyID: B826A3330E572FDD
    Key fingerprint = AE6B 1BDA 122B 23B4 265B  1274 B826 A333 0E57 2FDD
author
#8 lore raw

RE: [PATCH v2 iproute2-next 1/3] rdma: update rdma_netlink.h to get new driver attributes

In reply to David Ahern
Quoted 12 lines

-----Original Message-----
From: David Ahern <[email protected]>
Sent: Tuesday, May 15, 2018 3:02 PM
To: Doug Ledford <[email protected]>; Steve Wise <[email protected]>; [email protected]
Cc: [email protected]; [email protected]; linux- [email protected]
Subject: Re: [PATCH v2 iproute2-next 1/3] rdma: update rdma_netlink.h to get new driver attributes

Quoted 7 lines
Quoted 3 lines · Doug Ledford

I just sent an incremental fix to the list under separate cover. You can squash that fix into Steve's patch and it should resolve the issue. Or Steve can respin the set. Either way.

Once the patch has been committed to the upstream repo, spin a new set with the correct header update.

Will do!

Steve.

author
#9 lore raw

RE: [PATCH v2 iproute2-next 1/3] rdma: update rdma_netlink.h to get new driver attributes

In reply to Doug Ledford
Quoted 25 lines · David Ahern
Quoted 2 lines · Steve Wise

Review

Quoted 1 line
(quoted diff) +0 -0

b/rdma/include/uapi/rdma/rdma_netlink.h

Quoted 21 lines
Quoted 8 lines

index 60416ed..40be0d8 100644

rdma/include/uapi/rdma/rdma_netlink.h +1 -0
@@ -249,10 +249,22 @@ enum rdma_nldev_command {
 	RDMA_NLDEV_NUM_OPS
 };
 
+enum {

rdma/include/uapi/rdma/rdma_netlink.h enum rdma_nldev_command { · line 262

Quoted 10 lines
rdma/include/uapi/rdma/rdma_netlink.h +8 -0
+	RDMA_NLDEV_ATTR_ENTRY_STRLEN = 16,
+};
+
+enum rdma_nldev_print_type {
+	RDMA_NLDEV_PRINT_TYPE_UNSPEC,
+	RDMA_NLDEV_PRINT_TYPE_HEX,
+};
+
 enum rdma_nldev_attr {
 	/* don't change the order or add anything between, this is ABI! */

I asked this before and did not get a response. As the comment above states with an emphasis (!) ...

Sorry David, I missed your question previously. ☹

Quoted 9 lines
Quoted 8 lines

rdma/include/uapi/rdma/rdma_netlink.h enum rdma_nldev_command { · line 267

Quoted 6 lines
rdma/include/uapi/rdma/rdma_netlink.h +3 -0
 	RDMA_NLDEV_ATTR_UNSPEC,
 
+	/* Pad attribute for 64b alignment */
+	RDMA_NLDEV_ATTR_PAD = RDMA_NLDEV_ATTR_UNSPEC,
+

... are you really adding new attributes in the middle?

Quoted 3 lines

Not really. The new item is being explicitly set to the same value as the item above it. It therefore becomes two entries with the same enum value. The rest of the enum is all unchanged.

Correct.

The reason this was done was because a kernel had already been released where 64b nlattrs were being padded with 0 instead of defining an explicit pad attribute. Jason thought the kernel side should define an explicit PAD attribute and use it. To preserve the ABI we defined it but set it to 0 (aka ATTR_UNSPEC aka the first in the enum).

Quoted 17 lines
Quoted 17 lines
Quoted 17 lines
rdma/include/uapi/rdma/rdma_netlink.h +9 -0
 	/* Identifier for ib_device */
 	RDMA_NLDEV_ATTR_DEV_INDEX,		/* u32 */
 
@@ -387,6 +399,20 @@ enum rdma_nldev_attr {
 	RDMA_NLDEV_ATTR_RES_PD_ENTRY,		/* nested table */
 	RDMA_NLDEV_ATTR_RES_LOCAL_DMA_LKEY,	/* u32 */
 	RDMA_NLDEV_ATTR_RES_UNSAFE_GLOBAL_RKEY,	/* u32 */
+	/*
+	 * driver-specific attributes.
+	 */
+	RDMA_NLDEV_ATTR_DRIVER,			/* nested table */
+	RDMA_NLDEV_ATTR_DRIVER_ENTRY,		/* nested table */
+	RDMA_NLDEV_ATTR_DRIVER_STRING,		/* string */
+	/*
+	 * u8 values from enum rdma_nldev_print_type
+	 */
Quoted 8 lines
Quoted 8 lines

rdma/include/uapi/rdma/rdma_netlink.h enum rdma_nldev_attr { · line 415

Quoted 5 lines
rdma/include/uapi/rdma/rdma_netlink.h +5 -0
+	RDMA_NLDEV_ATTR_DRIVER_PRINT_TYPE,	/* u8 */
+	RDMA_NLDEV_ATTR_DRIVER_S32,		/* s32 */
+	RDMA_NLDEV_ATTR_DRIVER_U32,		/* u32 */
+	RDMA_NLDEV_ATTR_DRIVER_S64,		/* s64 */
+	RDMA_NLDEV_ATTR_DRIVER_U64,		/* u64 */

and again here.

Ugh, this looks like a mistake maybe due to me rebasing and not noticing this commit added the name/index attrs.

5b2cc79de878 [email protected] RDMA/nldev: Provide netdevice name and index

Both of these are in -next to be merged upstream together.

Should I do anything?

#10 lore raw

Re: [PATCH v2 iproute2-next 1/3] rdma: update rdma_netlink.h to get new driver attributes

In reply to David Ahern
Quoted 18 lines · David Ahern
Quoted 17 lines · Steve Wise
rdma/include/uapi/rdma/rdma_netlink.h +8 -0
index 60416ed..40be0d8 100644
@@ -387,6 +399,20 @@ enum rdma_nldev_attr {
 	RDMA_NLDEV_ATTR_RES_PD_ENTRY,		/* nested table */
 	RDMA_NLDEV_ATTR_RES_LOCAL_DMA_LKEY,	/* u32 */
 	RDMA_NLDEV_ATTR_RES_UNSAFE_GLOBAL_RKEY,	/* u32 */
+	/*
+	 * driver-specific attributes.
+	 */
+	RDMA_NLDEV_ATTR_DRIVER,			/* nested table */
+	RDMA_NLDEV_ATTR_DRIVER_ENTRY,		/* nested table */
+	RDMA_NLDEV_ATTR_DRIVER_STRING,		/* string */
+	/*
+	 * u8 values from enum rdma_nldev_print_type
Quoted 8 lines

rdma/include/uapi/rdma/rdma_netlink.h enum rdma_nldev_attr { · line 415

Quoted 6 lines
rdma/include/uapi/rdma/rdma_netlink.h +6 -0
+	 */
+	RDMA_NLDEV_ATTR_DRIVER_PRINT_TYPE,	/* u8 */
+	RDMA_NLDEV_ATTR_DRIVER_S32,		/* s32 */
+	RDMA_NLDEV_ATTR_DRIVER_U32,		/* u32 */
+	RDMA_NLDEV_ATTR_DRIVER_S64,		/* s64 */
+	RDMA_NLDEV_ATTR_DRIVER_U64,		/* u64 */

and again here.

This chunk, however, is a problem. We'll need to fix that in the kernel and in this patch too.

Signature · 3 lines
Doug Ledford <[email protected]>
    GPG KeyID: B826A3330E572FDD
    Key fingerprint = AE6B 1BDA 122B 23B4 265B  1274 B826 A333 0E57 2FDD
author
#11 lore raw

RE: [PATCH v2 iproute2-next 1/3] rdma: update rdma_netlink.h to get new driver attributes

Quoted 42 lines

-----Original Message-----
From: [email protected] <linux-rdma- [email protected]> On Behalf Of Doug Ledford
Sent: Tuesday, May 15, 2018 2:53 PM
To: David Ahern <[email protected]>; Steve Wise <[email protected]>; [email protected]
Cc: [email protected]; [email protected]; linux- [email protected]
Subject: Re: [PATCH v2 iproute2-next 1/3] rdma: update rdma_netlink.h to get new driver attributes

Quoted 2 lines · David Ahern

Review

Quoted 1 line · Steve Wise
(quoted diff) +0 -0

b/rdma/include/uapi/rdma/rdma_netlink.h

Quoted 16 lines
Quoted 16 lines

index 60416ed..40be0d8 100644

rdma/include/uapi/rdma/rdma_netlink.h +8 -0
@@ -387,6 +399,20 @@ enum rdma_nldev_attr {
 	RDMA_NLDEV_ATTR_RES_PD_ENTRY,		/* nested table */
 	RDMA_NLDEV_ATTR_RES_LOCAL_DMA_LKEY,	/* u32 */
 	RDMA_NLDEV_ATTR_RES_UNSAFE_GLOBAL_RKEY,	/* u32 */
+	/*
+	 * driver-specific attributes.
+	 */
+	RDMA_NLDEV_ATTR_DRIVER,			/* nested table */
+	RDMA_NLDEV_ATTR_DRIVER_ENTRY,		/* nested table */
+	RDMA_NLDEV_ATTR_DRIVER_STRING,		/* string */
+	/*
+	 * u8 values from enum rdma_nldev_print_type
Quoted 8 lines

rdma/include/uapi/rdma/rdma_netlink.h enum rdma_nldev_attr { · line 415

Quoted 6 lines
rdma/include/uapi/rdma/rdma_netlink.h +6 -0
+	 */
+	RDMA_NLDEV_ATTR_DRIVER_PRINT_TYPE,	/* u8 */
+	RDMA_NLDEV_ATTR_DRIVER_S32,		/* s32 */
+	RDMA_NLDEV_ATTR_DRIVER_U32,		/* u32 */
+	RDMA_NLDEV_ATTR_DRIVER_S64,		/* s64 */
+	RDMA_NLDEV_ATTR_DRIVER_U64,		/* u64 */

and again here.

Quoted 2 lines

This chunk, however, is a problem. We'll need to fix that in the kernel and in this patch too.

I'll fix this series once I fix the kernel side. Doug, should I send a patch that basically moves the DRIVER attributes to the bottom?

Sorry about missing this!

Steve

#12 lore raw

Re: [PATCH v2 iproute2-next 1/3] rdma: update rdma_netlink.h to get new driver attributes

Quoted 41 lines · Steve Wise
Quoted 41 lines

-----Original Message-----
From: [email protected] <linux-rdma- [email protected]> On Behalf Of Doug Ledford
Sent: Tuesday, May 15, 2018 2:53 PM
To: David Ahern <[email protected]>; Steve Wise <[email protected]>; [email protected]
Cc: [email protected]; [email protected]; linux- [email protected]
Subject: Re: [PATCH v2 iproute2-next 1/3] rdma: update rdma_netlink.h to get new driver attributes

Quoted 2 lines · David Ahern

Review

Quoted 1 line · Steve Wise
(quoted diff) +0 -0

b/rdma/include/uapi/rdma/rdma_netlink.h

Quoted 24 lines
Quoted 12 lines

index 60416ed..40be0d8 100644

rdma/include/uapi/rdma/rdma_netlink.h +4 -0
@@ -387,6 +399,20 @@ enum rdma_nldev_attr {
 	RDMA_NLDEV_ATTR_RES_PD_ENTRY,		/* nested table */
 	RDMA_NLDEV_ATTR_RES_LOCAL_DMA_LKEY,	/* u32 */
 	RDMA_NLDEV_ATTR_RES_UNSAFE_GLOBAL_RKEY,	/* u32 */
+	/*
+	 * driver-specific attributes.
+	 */
+	RDMA_NLDEV_ATTR_DRIVER,			/* nested table */

rdma/include/uapi/rdma/rdma_netlink.h enum rdma_nldev_attr { · line 415

Quoted 10 lines
rdma/include/uapi/rdma/rdma_netlink.h +10 -0
+	RDMA_NLDEV_ATTR_DRIVER_ENTRY,		/* nested table */
+	RDMA_NLDEV_ATTR_DRIVER_STRING,		/* string */
+	/*
+	 * u8 values from enum rdma_nldev_print_type
+	 */
+	RDMA_NLDEV_ATTR_DRIVER_PRINT_TYPE,	/* u8 */
+	RDMA_NLDEV_ATTR_DRIVER_S32,		/* s32 */
+	RDMA_NLDEV_ATTR_DRIVER_U32,		/* u32 */
+	RDMA_NLDEV_ATTR_DRIVER_S64,		/* s64 */
+	RDMA_NLDEV_ATTR_DRIVER_U64,		/* u64 */

and again here.

Quoted 6 lines
Quoted 2 lines

This chunk, however, is a problem. We'll need to fix that in the kernel and in this patch too.

I'll fix this series once I fix the kernel side. Doug, should I send a patch that basically moves the DRIVER attributes to the bottom?

Sorry about missing this!

I missed it too. I knew about the first hunk, but thought this one was at the end. Anyway, I've already pushed the fix to my wip/dl-for-next branch, so you can get it there now.

Signature · 3 lines
Doug Ledford <[email protected]>
    GPG KeyID: B826A3330E572FDD
    Key fingerprint = AE6B 1BDA 122B 23B4 265B  1274 B826 A333 0E57 2FDD
author
#13 lore raw

PATCH v2 2/3 rdma: print driver resource attributes

In reply to Steve Wise

This enhancement allows printing rdma device-specific state, if provided by the kernel. This is done in a generic manner, so rdma tool doesn't need to know about the details of every type of rdma device.

Driver attributes for a rdma resource are in the form of <key, [print_type], value> tuples, where the key is a string and the value can be any supported driver attribute. The print_type attribute, if present, provides a print format to use vs the standard print format for the type. For example, the default print type for a PROVIDER_S32 value is "%d ", but "0x%x " if the print_type of PRINT_TYPE_HEX is included inthe tuple.

Driver resources are only printed when the -dd flag is present. If -p is present, then the output is formatted to not exceed 80 columns, otherwise it is printed as a single row to be grep/awk friendly.

Example output:

# rdma resource show qp lqpn 1028 -dd -p
link cxgb4_0/- lqpn 1028 rqpn 0 type RC state RTS rq-psn 0 sq-psn 0 path-mig-state MIGRATED pid 0 comm [nvme_rdma]
    sqid 1028 flushed 0 memsize 123968 cidx 85 pidx 85 wq_pidx 106 flush_cidx 85 in_use 0
    size 386 flags 0x0 rqid 1029 memsize 16768 cidx 43 pidx 41 wq_pidx 171 msn 44 rqt_hwaddr 0x2a8a5d00
    rqt_size 256 in_use 128 size 130 idx 43 wr_id 0xffff881057c03408 idx 40 wr_id 0xffff881057c033f0
---
 rdma/rdma.c  |   9 ++-
 rdma/rdma.h  |  11 ++++
 rdma/res.c   |  30 +++------
 rdma/utils.c | 196 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 224 insertions(+), 22 deletions(-)
rdma/rdma.c +7 -2
index b43e538..010e983 100644
@@ -129,13 +129,14 @@ int main(int argc, char **argv)
 		{ "batch",		required_argument,	NULL, 'b' },
 		{ NULL, 0, NULL, 0 }
 	};
+	bool show_driver_details = false;
 	const char *batch_file = NULL;
 	bool pretty_output = false;
 	bool show_details = false;
 	bool json_output = false;
 	bool force = false;
-	char *filename;
 	struct rd rd = {};
+	char *filename;
 	int opt;
 	int err;
 
@@ -152,7 +153,10 @@ int main(int argc, char **argv)
 			pretty_output = true;
 			break;
 		case 'd':
-			show_details = true;
+			if (show_details)
+				show_driver_details = true;
+			else
+				show_details = true;
 			break;
 		case 'j':
 			json_output = true;
@@ -180,6 +184,7 @@ int main(int argc, char **argv)
 	argv += optind;
 
 	rd.show_details = show_details;
+	rd.show_driver_details = show_driver_details;
 	rd.json_output = json_output;
 	rd.pretty_output = pretty_output;
 
rdma/rdma.h +11 -0
index 1908fc4..fcaf9e6 100644
@@ -55,6 +55,7 @@ struct rd {
 	char **argv;
 	char *filename;
 	bool show_details;
+	bool show_driver_details;
 	struct list_head dev_map_list;
 	uint32_t dev_idx;
 	uint32_t port_idx;
@@ -115,4 +116,14 @@ int rd_recv_msg(struct rd *rd, mnl_cb_t callback, void *data, uint32_t seq);
 void rd_prepare_msg(struct rd *rd, uint32_t cmd, uint32_t *seq, uint16_t flags);
 int rd_dev_init_cb(const struct nlmsghdr *nlh, void *data);
 int rd_attr_cb(const struct nlattr *attr, void *data);
+int rd_attr_check(const struct nlattr *attr, int *typep);
+
+/*
+ * Print helpers
+ */
+void print_driver_table(struct rd *rd, struct nlattr *tb);
+void newline(struct rd *rd);
+void newline_indent(struct rd *rd);
+#define MAX_LINE_LENGTH 80
+
 #endif /* _RDMA_TOOL_H_ */
rdma/res.c +10 -20
index 1a0aab6..074b992 100644
@@ -439,10 +439,8 @@ static int res_qp_parse_cb(const struct nlmsghdr *nlh, void *data)
 		if (nla_line[RDMA_NLDEV_ATTR_RES_PID])
 			free(comm);
 
-		if (rd->json_output)
-			jsonw_end_array(rd->jw);
-		else
-			pr_out("\n");
+		print_driver_table(rd, nla_line[RDMA_NLDEV_ATTR_DRIVER]);
+		newline(rd);
 	}
 	return MNL_CB_OK;
 }
@@ -678,10 +676,8 @@ static int res_cm_id_parse_cb(const struct nlmsghdr *nlh, void *data)
 		if (nla_line[RDMA_NLDEV_ATTR_RES_PID])
 			free(comm);
 
-		if (rd->json_output)
-			jsonw_end_array(rd->jw);
-		else
-			pr_out("\n");
+		print_driver_table(rd, nla_line[RDMA_NLDEV_ATTR_DRIVER]);
+		newline(rd);
 	}
 	return MNL_CB_OK;
 }
@@ -804,10 +800,8 @@ static int res_cq_parse_cb(const struct nlmsghdr *nlh, void *data)
 		if (nla_line[RDMA_NLDEV_ATTR_RES_PID])
 			free(comm);
 
-		if (rd->json_output)
-			jsonw_end_array(rd->jw);
-		else
-			pr_out("\n");
+		print_driver_table(rd, nla_line[RDMA_NLDEV_ATTR_DRIVER]);
+		newline(rd);
 	}
 	return MNL_CB_OK;
 }
@@ -919,10 +913,8 @@ static int res_mr_parse_cb(const struct nlmsghdr *nlh, void *data)
 		if (nla_line[RDMA_NLDEV_ATTR_RES_PID])
 			free(comm);
 
-		if (rd->json_output)
-			jsonw_end_array(rd->jw);
-		else
-			pr_out("\n");
+		print_driver_table(rd, nla_line[RDMA_NLDEV_ATTR_DRIVER]);
+		newline(rd);
 	}
 	return MNL_CB_OK;
 }
@@ -1004,10 +996,8 @@ static int res_pd_parse_cb(const struct nlmsghdr *nlh, void *data)
 		if (nla_line[RDMA_NLDEV_ATTR_RES_PID])
 			free(comm);
 
-		if (rd->json_output)
-			jsonw_end_array(rd->jw);
-		else
-			pr_out("\n");
+		print_driver_table(rd, nla_line[RDMA_NLDEV_ATTR_DRIVER]);
+		newline(rd);
 	}
 	return MNL_CB_OK;
 }
rdma/utils.c +196 -0

213 lines not on this page · raw message

Signature · 1 line
1.8.3.1
author
#14 lore raw

PATCH v2 3/3 rdma: update man pages

In reply to Steve Wise

Update the man pages for the resource attributes as well as the driver-specific attributes.

---
 man/man8/rdma-resource.8 | 29 ++++++++++++++++++++++++++---
 man/man8/rdma.8          |  2 +-
 2 files changed, 27 insertions(+), 4 deletions(-)
man/man8/rdma-resource.8 +26 -3
index ff5d25d..40b073d 100644
@@ -7,13 +7,16 @@ rdma-resource \- rdma resource configuration
 .in +8
 .ti -8
 .B rdma
-.RI "[ " OPTIONS " ]"
-.B resource
-.RI  " { " COMMAND " | "
+.RI "[ " OPTIONS " ] " RESOURCE " { " COMMAND " | "
 .BR help " }"
 .sp
 
 .ti -8
+.IR RESOURCE " := { "
+.BR cm_id " | " cq " | " mr " | " pd " | " qp " }"
+.sp
+
+.ti -8
 .IR OPTIONS " := { "
 \fB\-j\fR[\fIson\fR] |
 \fB\-d\fR[\fIetails\fR] }
@@ -70,11 +73,31 @@ rdma res show qp link mlx5_4/- -d
 Detailed view.
 .RE
 .PP
+rdma res show qp link mlx5_4/- -dd
+.RS 4
+Detailed view including driver-specific details.
+.RE
+.PP
 rdma res show qp link mlx5_4/1 lqpn 0-6
 .RS 4
 Limit to specific Local QPNs.
 .RE
 .PP
+rdma resource show cm_id dst-port 7174
+.RS 4
+Show CM_IDs with destination ip port of 7174.
+.RE
+.PP
+rdma resource show cm_id src-addr 172.16.0.100
+.RS 4
+Show CM_IDs bound to local ip address 172.16.0.100
+.RE
+.PP
+rdma resource show cq pid 30489
+.RS 4
+Show CQs belonging to pid 30489
+.RE
+.PP
 
 .SH SEE ALSO
 .BR rdma (8),
man/man8/rdma.8 +1 -1
index 6f88f37..12aa149 100644
@@ -49,7 +49,7 @@ If there were any errors during execution of the commands, the application retur
 
 .TP
 .BR "\-d" , " --details"
-Output detailed information.
+Output detailed information.  Adding a second \-d includes driver-specific details.
 
 .TP
 .BR "\-p" , " --pretty"
Signature · 1 line
1.8.3.1