Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

devlink: extend attrs_set for setting port flavours

Devlink ports can have specific flavour according to the purpose of use.
This patch extend attrs_set so the driver can say which flavour port
has. Initial flavours are:
physical, cpu, dsa
User can query this to see right away what is the purpose of each port.

Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Jiri Pirko and committed by
David S. Miller
5ec1380a b9ffcbaf

+24 -4
+2 -2
drivers/net/ethernet/mellanox/mlxsw/core.c
··· 1722 1722 struct devlink_port *devlink_port = &mlxsw_core_port->devlink_port; 1723 1723 1724 1724 mlxsw_core_port->port_driver_priv = port_driver_priv; 1725 - devlink_port_attrs_set(devlink_port, port_number, 1726 - split, split_port_subnumber); 1725 + devlink_port_attrs_set(devlink_port, DEVLINK_PORT_FLAVOUR_PHYSICAL, 1726 + port_number, split, split_port_subnumber); 1727 1727 devlink_port_type_eth_set(devlink_port, dev); 1728 1728 } 1729 1729 EXPORT_SYMBOL(mlxsw_core_port_eth_set);
+3 -2
drivers/net/ethernet/netronome/nfp/nfp_devlink.c
··· 175 175 return ret; 176 176 177 177 devlink_port_type_eth_set(&port->dl_port, port->netdev); 178 - devlink_port_attrs_set(&port->dl_port, eth_port.label_port, 179 - eth_port.is_split, eth_port.label_subport); 178 + devlink_port_attrs_set(&port->dl_port, DEVLINK_PORT_FLAVOUR_PHYSICAL, 179 + eth_port.label_port, eth_port.is_split, 180 + eth_port.label_subport); 180 181 181 182 devlink = priv_to_devlink(app->pf); 182 183
+3
include/net/devlink.h
··· 37 37 38 38 struct devlink_port_attrs { 39 39 bool set; 40 + enum devlink_port_flavour flavour; 40 41 u32 port_number; /* same value as "split group" */ 41 42 bool split; 42 43 u32 split_subport_number; ··· 375 374 struct ib_device *ibdev); 376 375 void devlink_port_type_clear(struct devlink_port *devlink_port); 377 376 void devlink_port_attrs_set(struct devlink_port *devlink_port, 377 + enum devlink_port_flavour flavour, 378 378 u32 port_number, bool split, 379 379 u32 split_subport_number); 380 380 int devlink_sb_register(struct devlink *devlink, unsigned int sb_index, ··· 476 474 } 477 475 478 476 static inline void devlink_port_attrs_set(struct devlink_port *devlink_port, 477 + enum devlink_port_flavour flavour, 479 478 u32 port_number, bool split, 480 479 u32 split_subport_number) 481 480 {
+11
include/uapi/linux/devlink.h
··· 132 132 DEVLINK_ESWITCH_ENCAP_MODE_BASIC, 133 133 }; 134 134 135 + enum devlink_port_flavour { 136 + DEVLINK_PORT_FLAVOUR_PHYSICAL, /* Any kind of a port physically 137 + * facing the user. 138 + */ 139 + DEVLINK_PORT_FLAVOUR_CPU, /* CPU port */ 140 + DEVLINK_PORT_FLAVOUR_DSA, /* Distributed switch architecture 141 + * interconnect port. 142 + */ 143 + }; 144 + 135 145 enum devlink_attr { 136 146 /* don't change the order or add anything between, this is ABI! */ 137 147 DEVLINK_ATTR_UNSPEC, ··· 234 224 DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_ID, /* u64 */ 235 225 DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_UNITS,/* u64 */ 236 226 227 + DEVLINK_ATTR_PORT_FLAVOUR, /* u16 */ 237 228 DEVLINK_ATTR_PORT_NUMBER, /* u32 */ 238 229 DEVLINK_ATTR_PORT_SPLIT_SUBPORT_NUMBER, /* u32 */ 239 230
+5
net/core/devlink.c
··· 460 460 461 461 if (!attrs->set) 462 462 return 0; 463 + if (nla_put_u16(msg, DEVLINK_ATTR_PORT_FLAVOUR, attrs->flavour)) 464 + return -EMSGSIZE; 463 465 if (nla_put_u32(msg, DEVLINK_ATTR_PORT_NUMBER, attrs->port_number)) 464 466 return -EMSGSIZE; 465 467 if (!attrs->split) ··· 2993 2991 * devlink_port_attrs_set - Set port attributes 2994 2992 * 2995 2993 * @devlink_port: devlink port 2994 + * @flavour: flavour of the port 2996 2995 * @port_number: number of the port that is facing user, for example 2997 2996 * the front panel port number 2998 2997 * @split: indicates if this is split port ··· 3001 2998 * of subport. 3002 2999 */ 3003 3000 void devlink_port_attrs_set(struct devlink_port *devlink_port, 3001 + enum devlink_port_flavour flavour, 3004 3002 u32 port_number, bool split, 3005 3003 u32 split_subport_number) 3006 3004 { 3007 3005 struct devlink_port_attrs *attrs = &devlink_port->attrs; 3008 3006 3009 3007 attrs->set = true; 3008 + attrs->flavour = flavour; 3010 3009 attrs->port_number = port_number; 3011 3010 attrs->split = split; 3012 3011 attrs->split_subport_number = split_subport_number;