Re: [RFC WIP 1/2] RDMA/Core: add RDMA_NLDEV_CMD_NEWLINK/DELLLINK support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Sep 26, 2018 at 10:51:00AM -0500, Steve Wise wrote:
> 
> 
> On 9/25/2018 3:16 PM, Jason Gunthorpe wrote:
> > On Thu, Sep 13, 2018 at 12:16:20PM -0700, Steve Wise wrote:
> >> Add support for new LINK messages to allow adding and deleting rdma
> >> interfaces.  This will be used initially for soft rdma drivers which
> >> instantiate device instances dynamically by the admin specifying a netdev
> >> device to use.  The rdma_rxe module will be the first user of these
> >> messages.
> >>
> >> The design is modeled after RTNL_NEWLINK/DELLINK:  rdma drivers
> >> register with the rdma core if they provide link add/delete functions.
> >> Each driver registers with a unique "type" string, that is used to
> >> dispatch messages coming from user space.  A new RDMA_NLDEV_ATTR is
> >> defined for the "type" string.  User mode will pass 3 attributes in a
> >> NEWLINK message: RDMA_NLDEV_ATTR_IBDEV_NAME for the desired rdma device
> >> name to be created, RDMA_NLDEV_ATTR_LINK_TYPE for the "type" of link
> >> being added, and RDMA_NLDEV_ATTR_NDEV_NAME for the net_device interface
> >> to use for this link. The DELLINK message will contain the IBDEV_NAME
> >> and LINK_TYPE attributes.
> >>
> >> Signed-off-by: Steve Wise <swise@xxxxxxxxxxxxxxxxxxxxx>
> >>  drivers/infiniband/core/nldev.c  | 113 +++++++++++++++++++++++++++++++++++++++
> >>  include/rdma/rdma_netlink.h      |  11 ++++
> >>  include/uapi/rdma/rdma_netlink.h |   9 ++++
> >>  3 files changed, 133 insertions(+)
> >>
> >> diff --git a/drivers/infiniband/core/nldev.c b/drivers/infiniband/core/nldev.c
> >> index 0385ab438320..d107b982c210 100644
> >> +++ b/drivers/infiniband/core/nldev.c
> >> @@ -33,6 +33,7 @@
> >>  #include <linux/module.h>
> >>  #include <linux/pid.h>
> >>  #include <linux/pid_namespace.h>
> >> +#include <linux/mutex.h>
> >>  #include <net/netlink.h>
> >>  #include <rdma/rdma_cm.h>
> >>  #include <rdma/rdma_netlink.h>
> >> @@ -107,6 +108,8 @@
> >>  	[RDMA_NLDEV_ATTR_DRIVER_U32]		= { .type = NLA_U32 },
> >>  	[RDMA_NLDEV_ATTR_DRIVER_S64]		= { .type = NLA_S64 },
> >>  	[RDMA_NLDEV_ATTR_DRIVER_U64]		= { .type = NLA_U64 },
> >> +	[RDMA_NLDEV_ATTR_LINK_TYPE]		= { .type = NLA_NUL_STRING,
> >> +						    .len = IFNAMSIZ },
> >>  };
> >>  
> >>  static int put_driver_name_print_type(struct sk_buff *msg, const char *name,
> >> @@ -1072,6 +1075,110 @@ static int nldev_res_get_pd_dumpit(struct sk_buff *skb,
> >>  	return res_get_common_dumpit(skb, cb, RDMA_RESTRACK_PD);
> >>  }
> >>  
> >> +static LIST_HEAD(link_ops);
> >> +static DEFINE_MUTEX(link_ops_mutex);
> >> +
> >> +void rdma_link_register(struct rdma_link_ops *ops)
> >> +{
> >> +	mutex_lock(&link_ops_mutex);
> >> +	list_add(&ops->list, &link_ops);
> > 
> > Make sure the name is unique
> 
> The function name?

No, ops->type

Jason



[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Photo]     [Yosemite News]     [Yosemite Photos]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux