net: Fix too optimistic NETIF_F_HW_CSUM features
NETIF_F_HW_CSUM is a superset of NETIF_F_IP_CSUM+NETIF_F_IPV6_CSUM, but some drivers miss the difference. Fix this and also fix UFO dependency on checksumming offload as it makes the same mistake in assumptions. Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl> Acked-by: Jon Mason <jon.mason@exar.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
900d495a18
commit
7903264402
@@ -5041,10 +5041,13 @@ unsigned long netdev_fix_features(unsigned long features, const char *name)
|
||||
}
|
||||
|
||||
if (features & NETIF_F_UFO) {
|
||||
if (!(features & NETIF_F_GEN_CSUM)) {
|
||||
/* 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 NETIF_F_HW_CSUM feature.\n",
|
||||
"since no checksum offload features.\n",
|
||||
name);
|
||||
features &= ~NETIF_F_UFO;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user