aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJiri Pirko <jiri@mellanox.com>2019-04-03 08:24:27 -0400
committerDavid S. Miller <davem@davemloft.net>2019-04-04 20:42:36 -0400
commit119c0b5721da9d97f95202c4ad1be2919dac64b0 (patch)
tree4ed514e63ea3eecef324d74d6fd6a32214285a6e
parent15b04aceeb83086ea3109c331cb7d8c2767fa0c6 (diff)
net: devlink: add warning for ndo_get_port_parent_id set when not needed
Currently if the driver registers devlink port instance, he should set the devlink port attributes as well. Then the devlink core is able to obtain switch id itself, no need for driver to implement the ndo. Once all drivers will implement devlink port registration, this ndo should be removed. This warning guides new drivers to do things as they should be done. Signed-off-by: Jiri Pirko <jiri@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--net/core/devlink.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/net/core/devlink.c b/net/core/devlink.c
index d9fbf94ea2a3..b2715a187a11 100644
--- a/net/core/devlink.c
+++ b/net/core/devlink.c
@@ -5358,24 +5358,38 @@ static void __devlink_port_type_set(struct devlink_port *devlink_port,
5358void devlink_port_type_eth_set(struct devlink_port *devlink_port, 5358void devlink_port_type_eth_set(struct devlink_port *devlink_port,
5359 struct net_device *netdev) 5359 struct net_device *netdev)
5360{ 5360{
5361 const struct net_device_ops *ops = netdev->netdev_ops;
5362
5361 /* If driver registers devlink port, it should set devlink port 5363 /* If driver registers devlink port, it should set devlink port
5362 * attributes accordingly so the compat functions are called 5364 * attributes accordingly so the compat functions are called
5363 * and the original ops are not used. 5365 * and the original ops are not used.
5364 */ 5366 */
5365 if (netdev->netdev_ops->ndo_get_phys_port_name) { 5367 if (ops->ndo_get_phys_port_name) {
5366 /* Some drivers use the same set of ndos for netdevs 5368 /* Some drivers use the same set of ndos for netdevs
5367 * that have devlink_port registered and also for 5369 * that have devlink_port registered and also for
5368 * those who don't. Make sure that ndo_get_phys_port_name 5370 * those who don't. Make sure that ndo_get_phys_port_name
5369 * returns -EOPNOTSUPP here in case it is defined. 5371 * returns -EOPNOTSUPP here in case it is defined.
5370 * Warn if not. 5372 * Warn if not.
5371 */ 5373 */
5372 const struct net_device_ops *ops = netdev->netdev_ops;
5373 char name[IFNAMSIZ]; 5374 char name[IFNAMSIZ];
5374 int err; 5375 int err;
5375 5376
5376 err = ops->ndo_get_phys_port_name(netdev, name, sizeof(name)); 5377 err = ops->ndo_get_phys_port_name(netdev, name, sizeof(name));
5377 WARN_ON(err != -EOPNOTSUPP); 5378 WARN_ON(err != -EOPNOTSUPP);
5378 } 5379 }
5380 if (ops->ndo_get_port_parent_id) {
5381 /* Some drivers use the same set of ndos for netdevs
5382 * that have devlink_port registered and also for
5383 * those who don't. Make sure that ndo_get_port_parent_id
5384 * returns -EOPNOTSUPP here in case it is defined.
5385 * Warn if not.
5386 */
5387 struct netdev_phys_item_id ppid;
5388 int err;
5389
5390 err = ops->ndo_get_port_parent_id(netdev, &ppid);
5391 WARN_ON(err != -EOPNOTSUPP);
5392 }
5379 __devlink_port_type_set(devlink_port, DEVLINK_PORT_TYPE_ETH, netdev); 5393 __devlink_port_type_set(devlink_port, DEVLINK_PORT_TYPE_ETH, netdev);
5380} 5394}
5381EXPORT_SYMBOL_GPL(devlink_port_type_eth_set); 5395EXPORT_SYMBOL_GPL(devlink_port_type_eth_set);