On Tue, Apr 02, 2019 at 03:21:27PM +0000, Parav Pandit wrote: > > > > -----Original Message----- > > From: linux-rdma-owner@xxxxxxxxxxxxxxx <linux-rdma- > > owner@xxxxxxxxxxxxxxx> On Behalf Of Leon Romanovsky > > Sent: Tuesday, April 2, 2019 8:50 AM > > To: Doug Ledford <dledford@xxxxxxxxxx>; Jason Gunthorpe > > <jgg@xxxxxxxxxxxx> > > Cc: Leon Romanovsky <leonro@xxxxxxxxxxxx>; RDMA mailing list <linux- > > rdma@xxxxxxxxxxxxxxx> > > Subject: [PATCH rdma-next v2] RDMA/nldev: Return device protocol > > > > From: Leon Romanovsky <leonro@xxxxxxxxxxxx> > > > > Reuse existing RDMA_NLDEV_ATTR_LINK_TYPE to give ability for stable > > names UDEV rule create Ib device stable names based on link type protocol. > > The assumption that devices like mlx4 with duality in their link type under > > one IB device struct won't be allowed in the future. > > > > Signed-off-by: Leon Romanovsky <leonro@xxxxxxxxxxxx> > > --- > > v1 -> v2: > > * Created special netlink attribute to return device protocol. > > v0 -> v1: > > * Added special return type for RXE to return same information as it > > was provided by link_set while RXE link is created. > > --- > > drivers/infiniband/core/nldev.c | 26 ++++++++++++++++++++++++++ > > include/uapi/rdma/rdma_netlink.h | 4 ++++ > > 2 files changed, 30 insertions(+) > > > > diff --git a/drivers/infiniband/core/nldev.c b/drivers/infiniband/core/nldev.c > > index 854f47d78d8e..1cd599a098f6 100644 > > --- a/drivers/infiniband/core/nldev.c > > +++ b/drivers/infiniband/core/nldev.c > > @@ -118,6 +118,8 @@ static const struct nla_policy > > nldev_policy[RDMA_NLDEV_ATTR_MAX] = { > > .len = RDMA_NLDEV_ATTR_ENTRY_STRLEN > > }, > > [RDMA_NLDEV_SYS_ATTR_NETNS_MODE] = { .type = NLA_U8 }, > > [RDMA_NLDEV_NET_NS_FD] = { .type = NLA_U32 }, > > + [RDMA_NLDEV_ATTR_DEV_PROTOCOL] = { .type = > > NLA_NUL_STRING, > > + .len = RDMA_NLDEV_ATTR_ENTRY_STRLEN > > }, > > }; > > > > static int put_driver_name_print_type(struct sk_buff *msg, const char > > *name, @@ -200,6 +202,7 @@ static int fill_nldev_handle(struct sk_buff > > *msg, struct ib_device *device) static int fill_dev_info(struct sk_buff *msg, > > struct ib_device *device) { > > char fw[IB_FW_VERSION_NAME_MAX]; > > + u8 port; > > > > if (fill_nldev_handle(msg, device)) > > return -EMSGSIZE; > > @@ -228,6 +231,29 @@ static int fill_dev_info(struct sk_buff *msg, struct > > ib_device *device) > > return -EMSGSIZE; > > if (nla_put_u8(msg, RDMA_NLDEV_ATTR_DEV_NODE_TYPE, device- > > >node_type)) > > return -EMSGSIZE; > > + > > + /* > > + * Link type is determined on first port and mlx4 device > > + * which can potentialy have two different link type for the same > > + * IB device is considered as better to be avoided in the future, > > + */ > > + port = rdma_start_port(device); > > + if (rdma_protocol_ib(device, port) && > > + nla_put_string(msg, RDMA_NLDEV_ATTR_DEV_PROTOCOL, "ib")) > > + return -EMSGSIZE; > > + if (rdma_protocol_iwarp(device, port) && > > + nla_put_string(msg, RDMA_NLDEV_ATTR_DEV_PROTOCOL, "iw")) > > + return -EMSGSIZE; > > + if (rdma_protocol_roce(device, port) && > > + nla_put_string(msg, RDMA_NLDEV_ATTR_DEV_PROTOCOL, "roce")) > > + return -EMSGSIZE; > > + if (rdma_protocol_usnic(device, port) && > > + nla_put_string(msg, RDMA_NLDEV_ATTR_DEV_PROTOCOL, > > "usnic")) > > + return -EMSGSIZE; > > + if (rdma_cap_opa_mad(device, port) && > > + nla_put_string(msg, RDMA_NLDEV_ATTR_DEV_PROTOCOL, "opa")) > > + return -EMSGSIZE; > > + > OPA definition is, > > #define RDMA_CORE_PORT_INTEL_OPA (RDMA_CORE_PORT_IBA_IB \ > | RDMA_CORE_CAP_OPA_MAD) > > So for OPA two attributes will be set, first IB followed by OPA. > I am not sure, it should be just 'ib'. CAP should be treated differently? You are right, I'll send new version. > > > return 0; > > } > > > > diff --git a/include/uapi/rdma/rdma_netlink.h > > b/include/uapi/rdma/rdma_netlink.h > > index 09b0ad8ea9d4..d4a5b7bcd51a 100644 > > --- a/include/uapi/rdma/rdma_netlink.h > > +++ b/include/uapi/rdma/rdma_netlink.h > > @@ -484,6 +484,10 @@ enum rdma_nldev_attr { > > * File descriptor handle of the net namespace object > > */ > > RDMA_NLDEV_NET_NS_FD, /* u32 */ > > + /* > > + * Device protocol, e.g. ib, iw, usnic, roce and opa > > + */ > > + RDMA_NLDEV_ATTR_DEV_PROTOCOL, /* string */ > > > Thanks. This is what I was asking initially to differentiate two properties. I sent it, but I don't agree with this change. > > > /* > > * Always the end > > -- > > 2.20.1 >
Attachment:
signature.asc
Description: PGP signature