On Fri, Mar 29, 2019 at 03:31:29PM -0300, Jason Gunthorpe wrote: > On Sun, Mar 10, 2019 at 05:27:47PM +0200, Leon Romanovsky wrote: > > 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> > > drivers/infiniband/core/nldev.c | 24 ++++++++++++++++++++++++ > > 1 file changed, 24 insertions(+) > > > > diff --git a/drivers/infiniband/core/nldev.c b/drivers/infiniband/core/nldev.c > > index ccf84142acd0..f07b1bce9ee8 100644 > > +++ b/drivers/infiniband/core/nldev.c > > @@ -200,6 +200,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 +229,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_LINK_TYPE, "ib")) > > + return -EMSGSIZE; > > + if (rdma_protocol_iwarp(device, port) && > > + nla_put_string(msg, RDMA_NLDEV_ATTR_LINK_TYPE, "iw")) > > + return -EMSGSIZE; > > + if (rdma_protocol_roce(device, port) && > > + nla_put_string(msg, RDMA_NLDEV_ATTR_LINK_TYPE, "roce")) > > + return -EMSGSIZE; > > + if (rdma_protocol_usnic(device, port) && > > + nla_put_string(msg, RDMA_NLDEV_ATTR_LINK_TYPE, "usnic")) > > + return -EMSGSIZE; > > + if (rdma_cap_opa_mad(device, port) && > > + nla_put_string(msg, RDMA_NLDEV_ATTR_LINK_TYPE, "opa")) > > + return -EMSGSIZE; > > This needs to use a different enum name, RDMA_NLDEV_ATTR_LINK_TYPE is > a 'rdma-link-X' value (ie rxe), not a link technology name. > > If we do return RDMA_NLDEV_ATTR_LINK_TYPE during a get it should > mirror the value that was supplied during RDMA_NLDEV_CMD_NEWLINK and > not something else. Why exactly? It is our decision what to return and because for real devices we won't support multiple protocols at the same time, we will return real link type for them, e.g. ib, iwarp e.t.c. We already discussed it in this thread and agreed that rxe is just an name which can be wired to be roce in kernel. Thanks > > Jason
Attachment:
signature.asc
Description: PGP signature