Commit 9000edb7 authored by Jakub Kicinski's avatar Jakub Kicinski Committed by David S. Miller
Browse files

net: ethtool: require drivers to set supported_coalesce_params



Now that all in-tree drivers have been updated we can
make the supported_coalesce_params mandatory.

To save debugging time in case some driver was missed
(or is out of tree) add a warning when netdev is registered
with set_coalesce but without supported_coalesce_params.

Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
Reviewed-by: default avatarMichal Kubecek <mkubecek@suse.cz>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 329bab6e
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -458,6 +458,8 @@ struct ethtool_ops {
					 struct ethtool_stats *, u64 *);
};

int ethtool_check_ops(const struct ethtool_ops *ops);

struct ethtool_rx_flow_rule {
	struct flow_rule	*rule;
	unsigned long		priv[0];
+4 −0
Original line number Diff line number Diff line
@@ -9283,6 +9283,10 @@ int register_netdevice(struct net_device *dev)
	BUG_ON(dev->reg_state != NETREG_UNINITIALIZED);
	BUG_ON(!net);

	ret = ethtool_check_ops(dev->ethtool_ops);
	if (ret)
		return ret;

	spin_lock_init(&dev->addr_list_lock);
	lockdep_set_class(&dev->addr_list_lock, &dev->addr_list_lock_key);

+11 −0
Original line number Diff line number Diff line
@@ -289,3 +289,14 @@ out:
	kfree(indir);
	return ret;
}

int ethtool_check_ops(const struct ethtool_ops *ops)
{
	if (WARN_ON(ops->set_coalesce && !ops->supported_coalesce_params))
		return -EINVAL;
	/* NOTE: sufficiently insane drivers may swap ethtool_ops at runtime,
	 * the fact that ops are checked at registration time does not
	 * mean the ops attached to a netdev later on are sane.
	 */
	return 0;
}
+0 −3
Original line number Diff line number Diff line
@@ -1519,9 +1519,6 @@ ethtool_set_coalesce_supported(struct net_device *dev,
	u32 supported_params = dev->ethtool_ops->supported_coalesce_params;
	u32 nonzero_params = 0;

	if (!supported_params)
		return true;

	if (coalesce->rx_coalesce_usecs)
		nonzero_params |= ETHTOOL_COALESCE_RX_USECS;
	if (coalesce->rx_max_coalesced_frames)