On Fri, Mar 30, 2018 at 11:03:36AM -0700, Steve Wise wrote: > diff --git a/drivers/infiniband/core/nldev.c b/drivers/infiniband/core/nldev.c > index 884843e..1a680a3 100644 > +++ b/drivers/infiniband/core/nldev.c > @@ -95,8 +95,25 @@ > [RDMA_NLDEV_ATTR_RES_PD_ENTRY] = { .type = NLA_NESTED }, > [RDMA_NLDEV_ATTR_RES_LOCAL_DMA_LKEY] = { .type = NLA_U32 }, > [RDMA_NLDEV_ATTR_RES_UNSAFE_GLOBAL_RKEY] = { .type = NLA_U32 }, > + [RDMA_NLDEV_ATTR_PROVIDER] = { .type = NLA_NESTED }, > + [RDMA_NLDEV_ATTR_PROVIDER_ENTRY] = { .type = NLA_NESTED }, > + [RDMA_NLDEV_ATTR_PROVIDER_STRING] = { .type = NLA_NUL_STRING, > + .len = RDMA_NLDEV_ATTR_ENTRY_STRLEN }, > + [RDMA_NLDEV_ATTR_PROVIDER_PRINT_TYPE] = { .type = NLA_U8 }, > + [RDMA_NLDEV_ATTR_PROVIDER_S32] = { .type = NLA_S32 }, > + [RDMA_NLDEV_ATTR_PROVIDER_U32] = { .type = NLA_U32 }, > + [RDMA_NLDEV_ATTR_PROVIDER_S64] = { .type = NLA_S64 }, > + [RDMA_NLDEV_ATTR_PROVIDER_U64] = { .type = NLA_U64 }, Why do we need 64 and 32 bit version of this? Pass everything as s64 or u64? > +static int provider_fill_res_entry(struct rdma_restrack_root *resroot, > + struct sk_buff *msg, > + struct rdma_restrack_entry *res) > +{ > + return resroot->fill_res_entry ? > + resroot->fill_res_entry(msg, res) : 0; > +} Just init resroot->fill_res_entry to a function that returns 0 and drop provider_fill_res_entry.. > + /* > + * provider-specific attributes. > + */ > + RDMA_NLDEV_ATTR_PROVIDER, /* nested table */ > + RDMA_NLDEV_ATTR_PROVIDER_ENTRY, /* nested table */ > + RDMA_NLDEV_ATTR_PROVIDER_STRING, /* string */ > + RDMA_NLDEV_ATTR_PROVIDER_PRINT_TYPE, /* u8 */ Document exactly what values PRINT_TYPE can take on, say, in an enum. Jason -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html