Commit acd1130e authored by Michał Mirosław's avatar Michał Mirosław Committed by David S. Miller

net: reduce and unify printk level in netdev_fix_features()

Reduce printk() levels to KERN_INFO in netdev_fix_features() as this will
be used by ethtool and might spam dmesg unnecessarily.

This converts the function to use netdev_info() instead of plain printk().

As a side effect, bonding and bridge devices will now log dropped features
on every slave device change.
Signed-off-by: default avatarMichał Mirosław <mirq-linux@rere.qmqm.pl>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 04ed3e74
...@@ -1400,8 +1400,8 @@ static int bond_compute_features(struct bonding *bond) ...@@ -1400,8 +1400,8 @@ static int bond_compute_features(struct bonding *bond)
done: done:
features |= (bond_dev->features & BOND_VLAN_FEATURES); features |= (bond_dev->features & BOND_VLAN_FEATURES);
bond_dev->features = netdev_fix_features(features, NULL); bond_dev->features = netdev_fix_features(bond_dev, features);
bond_dev->vlan_features = netdev_fix_features(vlan_features, NULL); bond_dev->vlan_features = netdev_fix_features(bond_dev, vlan_features);
bond_dev->hard_header_len = max_hard_header_len; bond_dev->hard_header_len = max_hard_header_len;
return 0; return 0;
......
...@@ -2399,7 +2399,7 @@ extern char *netdev_drivername(const struct net_device *dev, char *buffer, int l ...@@ -2399,7 +2399,7 @@ extern char *netdev_drivername(const struct net_device *dev, char *buffer, int l
extern void linkwatch_run_queue(void); extern void linkwatch_run_queue(void);
u32 netdev_increment_features(u32 all, u32 one, u32 mask); u32 netdev_increment_features(u32 all, u32 one, u32 mask);
u32 netdev_fix_features(u32 features, const char *name); u32 netdev_fix_features(struct net_device *dev, u32 features);
void netif_stacked_transfer_operstate(const struct net_device *rootdev, void netif_stacked_transfer_operstate(const struct net_device *rootdev,
struct net_device *dev); struct net_device *dev);
......
...@@ -379,7 +379,7 @@ void br_features_recompute(struct net_bridge *br) ...@@ -379,7 +379,7 @@ void br_features_recompute(struct net_bridge *br)
} }
done: done:
br->dev->features = netdev_fix_features(features, NULL); br->dev->features = netdev_fix_features(br->dev, features);
} }
/* called with RTNL */ /* called with RTNL */
......
...@@ -5213,58 +5213,49 @@ static void rollback_registered(struct net_device *dev) ...@@ -5213,58 +5213,49 @@ static void rollback_registered(struct net_device *dev)
rollback_registered_many(&single); rollback_registered_many(&single);
} }
u32 netdev_fix_features(u32 features, const char *name) u32 netdev_fix_features(struct net_device *dev, u32 features)
{ {
/* Fix illegal checksum combinations */ /* Fix illegal checksum combinations */
if ((features & NETIF_F_HW_CSUM) && if ((features & NETIF_F_HW_CSUM) &&
(features & (NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM))) { (features & (NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM))) {
if (name) netdev_info(dev, "mixed HW and IP checksum settings.\n");
printk(KERN_NOTICE "%s: mixed HW and IP checksum settings.\n",
name);
features &= ~(NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM); features &= ~(NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM);
} }
if ((features & NETIF_F_NO_CSUM) && if ((features & NETIF_F_NO_CSUM) &&
(features & (NETIF_F_HW_CSUM|NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM))) { (features & (NETIF_F_HW_CSUM|NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM))) {
if (name) netdev_info(dev, "mixed no checksumming and other settings.\n");
printk(KERN_NOTICE "%s: mixed no checksumming and other settings.\n",
name);
features &= ~(NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM|NETIF_F_HW_CSUM); features &= ~(NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM|NETIF_F_HW_CSUM);
} }
/* Fix illegal SG+CSUM combinations. */ /* Fix illegal SG+CSUM combinations. */
if ((features & NETIF_F_SG) && if ((features & NETIF_F_SG) &&
!(features & NETIF_F_ALL_CSUM)) { !(features & NETIF_F_ALL_CSUM)) {
if (name) netdev_info(dev,
printk(KERN_NOTICE "%s: Dropping NETIF_F_SG since no " "Dropping NETIF_F_SG since no checksum feature.\n");
"checksum feature.\n", name);
features &= ~NETIF_F_SG; features &= ~NETIF_F_SG;
} }
/* TSO requires that SG is present as well. */ /* TSO requires that SG is present as well. */
if ((features & NETIF_F_TSO) && !(features & NETIF_F_SG)) { if ((features & NETIF_F_TSO) && !(features & NETIF_F_SG)) {
if (name) netdev_info(dev, "Dropping NETIF_F_TSO since no SG feature.\n");
printk(KERN_NOTICE "%s: Dropping NETIF_F_TSO since no "
"SG feature.\n", name);
features &= ~NETIF_F_TSO; features &= ~NETIF_F_TSO;
} }
/* UFO needs SG and checksumming */
if (features & NETIF_F_UFO) { if (features & NETIF_F_UFO) {
/* maybe split UFO into V4 and V6? */ /* maybe split UFO into V4 and V6? */
if (!((features & NETIF_F_GEN_CSUM) || if (!((features & NETIF_F_GEN_CSUM) ||
(features & (NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM)) (features & (NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM))
== (NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM))) { == (NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM))) {
if (name) netdev_info(dev,
printk(KERN_ERR "%s: Dropping NETIF_F_UFO " "Dropping NETIF_F_UFO since no checksum offload features.\n");
"since no checksum offload features.\n",
name);
features &= ~NETIF_F_UFO; features &= ~NETIF_F_UFO;
} }
if (!(features & NETIF_F_SG)) { if (!(features & NETIF_F_SG)) {
if (name) netdev_info(dev,
printk(KERN_ERR "%s: Dropping NETIF_F_UFO " "Dropping NETIF_F_UFO since no NETIF_F_SG feature.\n");
"since no NETIF_F_SG feature.\n", name);
features &= ~NETIF_F_UFO; features &= ~NETIF_F_UFO;
} }
} }
...@@ -5407,7 +5398,7 @@ int register_netdevice(struct net_device *dev) ...@@ -5407,7 +5398,7 @@ int register_netdevice(struct net_device *dev)
if (dev->iflink == -1) if (dev->iflink == -1)
dev->iflink = dev->ifindex; dev->iflink = dev->ifindex;
dev->features = netdev_fix_features(dev->features, dev->name); dev->features = netdev_fix_features(dev, dev->features);
/* Enable software GSO if SG is supported. */ /* Enable software GSO if SG is supported. */
if (dev->features & NETIF_F_SG) if (dev->features & NETIF_F_SG)
......
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