Commit 8b40f21b authored by David S. Miller's avatar David S. Miller

Merge branch 'mlx4-avoid-devlink-port-type-not-set-warnings'

Jakub Kicinski says:

====================
mlx4: avoid devlink port type not set warnings

This small set addresses the issue of mlx4 potentially not setting
devlink port type when Ethernet or IB driver is not built, but
port has that type.

v2:
 - add patch 1
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 6eb8b7fb 0313c7c2
...@@ -3031,6 +3031,17 @@ static int mlx4_init_port_info(struct mlx4_dev *dev, int port) ...@@ -3031,6 +3031,17 @@ static int mlx4_init_port_info(struct mlx4_dev *dev, int port)
if (err) if (err)
return err; return err;
/* Ethernet and IB drivers will normally set the port type,
* but if they are not built set the type now to prevent
* devlink_port_type_warn() from firing.
*/
if (!IS_ENABLED(CONFIG_MLX4_EN) &&
dev->caps.port_type[port] == MLX4_PORT_TYPE_ETH)
devlink_port_type_eth_set(&info->devlink_port, NULL);
else if (!IS_ENABLED(CONFIG_MLX4_INFINIBAND) &&
dev->caps.port_type[port] == MLX4_PORT_TYPE_IB)
devlink_port_type_ib_set(&info->devlink_port, NULL);
info->dev = dev; info->dev = dev;
info->port = port; info->port = port;
if (!mlx4_is_slave(dev)) { if (!mlx4_is_slave(dev)) {
......
...@@ -7608,13 +7608,7 @@ static void __devlink_port_type_set(struct devlink_port *devlink_port, ...@@ -7608,13 +7608,7 @@ static void __devlink_port_type_set(struct devlink_port *devlink_port,
devlink_port_notify(devlink_port, DEVLINK_CMD_PORT_NEW); devlink_port_notify(devlink_port, DEVLINK_CMD_PORT_NEW);
} }
/** static void devlink_port_type_netdev_checks(struct devlink_port *devlink_port,
* devlink_port_type_eth_set - Set port type to Ethernet
*
* @devlink_port: devlink port
* @netdev: related netdevice
*/
void devlink_port_type_eth_set(struct devlink_port *devlink_port,
struct net_device *netdev) struct net_device *netdev)
{ {
const struct net_device_ops *ops = netdev->netdev_ops; const struct net_device_ops *ops = netdev->netdev_ops;
...@@ -7649,6 +7643,24 @@ void devlink_port_type_eth_set(struct devlink_port *devlink_port, ...@@ -7649,6 +7643,24 @@ void devlink_port_type_eth_set(struct devlink_port *devlink_port,
err = ops->ndo_get_port_parent_id(netdev, &ppid); err = ops->ndo_get_port_parent_id(netdev, &ppid);
WARN_ON(err != -EOPNOTSUPP); WARN_ON(err != -EOPNOTSUPP);
} }
}
/**
* devlink_port_type_eth_set - Set port type to Ethernet
*
* @devlink_port: devlink port
* @netdev: related netdevice
*/
void devlink_port_type_eth_set(struct devlink_port *devlink_port,
struct net_device *netdev)
{
if (netdev)
devlink_port_type_netdev_checks(devlink_port, netdev);
else
dev_warn(devlink_port->devlink->dev,
"devlink port type for port %d set to Ethernet without a software interface reference, device type not supported by the kernel?\n",
devlink_port->index);
__devlink_port_type_set(devlink_port, DEVLINK_PORT_TYPE_ETH, netdev); __devlink_port_type_set(devlink_port, DEVLINK_PORT_TYPE_ETH, netdev);
} }
EXPORT_SYMBOL_GPL(devlink_port_type_eth_set); EXPORT_SYMBOL_GPL(devlink_port_type_eth_set);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment