|
@@ -5213,58 +5213,49 @@ static void rollback_registered(struct net_device *dev)
|
|
|
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 */
|
|
|
if ((features & NETIF_F_HW_CSUM) &&
|
|
|
(features & (NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM))) {
|
|
|
- if (name)
|
|
|
- printk(KERN_NOTICE "%s: mixed HW and IP checksum settings.\n",
|
|
|
- name);
|
|
|
+ netdev_info(dev, "mixed HW and IP checksum settings.\n");
|
|
|
features &= ~(NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM);
|
|
|
}
|
|
|
|
|
|
if ((features & NETIF_F_NO_CSUM) &&
|
|
|
(features & (NETIF_F_HW_CSUM|NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM))) {
|
|
|
- if (name)
|
|
|
- printk(KERN_NOTICE "%s: mixed no checksumming and other settings.\n",
|
|
|
- name);
|
|
|
+ netdev_info(dev, "mixed no checksumming and other settings.\n");
|
|
|
features &= ~(NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM|NETIF_F_HW_CSUM);
|
|
|
}
|
|
|
|
|
|
/* Fix illegal SG+CSUM combinations. */
|
|
|
if ((features & NETIF_F_SG) &&
|
|
|
!(features & NETIF_F_ALL_CSUM)) {
|
|
|
- if (name)
|
|
|
- printk(KERN_NOTICE "%s: Dropping NETIF_F_SG since no "
|
|
|
- "checksum feature.\n", name);
|
|
|
+ netdev_info(dev,
|
|
|
+ "Dropping NETIF_F_SG since no checksum feature.\n");
|
|
|
features &= ~NETIF_F_SG;
|
|
|
}
|
|
|
|
|
|
/* TSO requires that SG is present as well. */
|
|
|
if ((features & NETIF_F_TSO) && !(features & NETIF_F_SG)) {
|
|
|
- if (name)
|
|
|
- printk(KERN_NOTICE "%s: Dropping NETIF_F_TSO since no "
|
|
|
- "SG feature.\n", name);
|
|
|
+ netdev_info(dev, "Dropping NETIF_F_TSO since no SG feature.\n");
|
|
|
features &= ~NETIF_F_TSO;
|
|
|
}
|
|
|
|
|
|
+ /* UFO needs SG and checksumming */
|
|
|
if (features & NETIF_F_UFO) {
|
|
|
/* maybe split UFO into V4 and V6? */
|
|
|
if (!((features & NETIF_F_GEN_CSUM) ||
|
|
|
(features & (NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM))
|
|
|
== (NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM))) {
|
|
|
- if (name)
|
|
|
- printk(KERN_ERR "%s: Dropping NETIF_F_UFO "
|
|
|
- "since no checksum offload features.\n",
|
|
|
- name);
|
|
|
+ netdev_info(dev,
|
|
|
+ "Dropping NETIF_F_UFO since no checksum offload features.\n");
|
|
|
features &= ~NETIF_F_UFO;
|
|
|
}
|
|
|
|
|
|
if (!(features & NETIF_F_SG)) {
|
|
|
- if (name)
|
|
|
- printk(KERN_ERR "%s: Dropping NETIF_F_UFO "
|
|
|
- "since no NETIF_F_SG feature.\n", name);
|
|
|
+ netdev_info(dev,
|
|
|
+ "Dropping NETIF_F_UFO since no NETIF_F_SG feature.\n");
|
|
|
features &= ~NETIF_F_UFO;
|
|
|
}
|
|
|
}
|
|
@@ -5407,7 +5398,7 @@ int register_netdevice(struct net_device *dev)
|
|
|
if (dev->iflink == -1)
|
|
|
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. */
|
|
|
if (dev->features & NETIF_F_SG)
|