diff options
-rw-r--r-- | net/core/devlink.c | 18 |
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, | |||
5358 | void devlink_port_type_eth_set(struct devlink_port *devlink_port, | 5358 | void 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 | } |
5381 | EXPORT_SYMBOL_GPL(devlink_port_type_eth_set); | 5395 | EXPORT_SYMBOL_GPL(devlink_port_type_eth_set); |