]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
devlink: Add a new devlink port lanes attribute and pass to netlink
authorDanielle Ratson <danieller@mellanox.com>
Thu, 9 Jul 2020 13:18:18 +0000 (16:18 +0300)
committerDavid S. Miller <davem@davemloft.net>
Thu, 9 Jul 2020 20:15:29 +0000 (13:15 -0700)
Add a new devlink port attribute that indicates the port's number of lanes.

Drivers are expected to set it via devlink_port_attrs_set(), before
registering the port.

The attribute is not passed to user space in case the number of lanes is
invalid (0).

Signed-off-by: Danielle Ratson <danieller@mellanox.com>
Reviewed-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlxsw/core.c
include/net/devlink.h
include/uapi/linux/devlink.h
net/core/devlink.c

index f44cb1a537f322f22249e9283adf3dfdb56b64da..6cde196f6b7059023fb75d0a47c2a2959b4213b2 100644 (file)
@@ -2134,6 +2134,7 @@ static int __mlxsw_core_port_init(struct mlxsw_core *mlxsw_core, u8 local_port,
        int err;
 
        attrs.split = split;
+       attrs.lanes = lanes;
        attrs.flavour = flavour;
        attrs.phys.port_number = port_number;
        attrs.phys.split_subport_number = split_port_subnumber;
index 8f9db991192d1a973b3beb1a0e44cb09f28fb85b..91a9f8770d08b6bde897dcefa9312b47d3c253d7 100644 (file)
@@ -68,10 +68,12 @@ struct devlink_port_pci_vf_attrs {
  * struct devlink_port_attrs - devlink port object
  * @flavour: flavour of the port
  * @split: indicates if this is split port
+ * @lanes: maximum number of lanes the port supports. 0 value is not passed to netlink.
  * @switch_id: if the port is part of switch, this is buffer with ID, otherwise this is NULL
  */
 struct devlink_port_attrs {
        u8 split:1;
+       u32 lanes;
        enum devlink_port_flavour flavour;
        struct netdev_phys_item_id switch_id;
        union {
index 87c83a82991b7cbe1c7b2d9cfe6bd85f630711ea..f741ab8d9cf049ff7b17db30bd95380cc3c92cfa 100644 (file)
@@ -455,6 +455,8 @@ enum devlink_attr {
 
        DEVLINK_ATTR_INFO_BOARD_SERIAL_NUMBER,  /* string */
 
+       DEVLINK_ATTR_PORT_LANES,                        /* u32 */
+
        /* add new attributes above here, update the policy in devlink.c */
 
        __DEVLINK_ATTR_MAX,
index 266936c383579a581bcb6ffbc2fd5522af881a62..7f26d1054974dc4106b4fbcd969d1b267dc391bb 100644 (file)
@@ -530,6 +530,10 @@ static int devlink_nl_port_attrs_put(struct sk_buff *msg,
 
        if (!devlink_port->attrs_set)
                return 0;
+       if (attrs->lanes) {
+               if (nla_put_u32(msg, DEVLINK_ATTR_PORT_LANES, attrs->lanes))
+                       return -EMSGSIZE;
+       }
        if (nla_put_u16(msg, DEVLINK_ATTR_PORT_FLAVOUR, attrs->flavour))
                return -EMSGSIZE;
        switch (devlink_port->attrs.flavour) {