aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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);