|
@@ -747,7 +747,7 @@ static struct lock_class_key macvlan_netdev_addr_lock_key;
|
|
|
|
|
|
#define MACVLAN_FEATURES \
|
|
|
(NETIF_F_SG | NETIF_F_ALL_CSUM | NETIF_F_HIGHDMA | NETIF_F_FRAGLIST | \
|
|
|
- NETIF_F_GSO | NETIF_F_TSO | NETIF_F_UFO | \
|
|
|
+ NETIF_F_GSO | NETIF_F_TSO | NETIF_F_UFO | NETIF_F_LRO | \
|
|
|
NETIF_F_TSO_ECN | NETIF_F_TSO6 | NETIF_F_GRO | NETIF_F_RXCSUM | \
|
|
|
NETIF_F_HW_VLAN_CTAG_FILTER | NETIF_F_HW_VLAN_STAG_FILTER)
|
|
|
|
|
@@ -784,6 +784,7 @@ static int macvlan_init(struct net_device *dev)
|
|
|
(lowerdev->state & MACVLAN_STATE_MASK);
|
|
|
dev->features = lowerdev->features & MACVLAN_FEATURES;
|
|
|
dev->features |= ALWAYS_ON_FEATURES;
|
|
|
+ dev->hw_features |= NETIF_F_LRO;
|
|
|
dev->vlan_features = lowerdev->vlan_features & MACVLAN_FEATURES;
|
|
|
dev->gso_max_size = lowerdev->gso_max_size;
|
|
|
dev->iflink = lowerdev->ifindex;
|
|
@@ -936,15 +937,15 @@ static netdev_features_t macvlan_fix_features(struct net_device *dev,
|
|
|
netdev_features_t features)
|
|
|
{
|
|
|
struct macvlan_dev *vlan = netdev_priv(dev);
|
|
|
+ netdev_features_t lowerdev_features = vlan->lowerdev->features;
|
|
|
netdev_features_t mask;
|
|
|
|
|
|
features |= NETIF_F_ALL_FOR_ALL;
|
|
|
features &= (vlan->set_features | ~MACVLAN_FEATURES);
|
|
|
mask = features;
|
|
|
|
|
|
- features = netdev_increment_features(vlan->lowerdev->features,
|
|
|
- features,
|
|
|
- mask);
|
|
|
+ lowerdev_features &= (features | ~NETIF_F_LRO);
|
|
|
+ features = netdev_increment_features(lowerdev_features, features, mask);
|
|
|
features |= ALWAYS_ON_FEATURES;
|
|
|
features &= ~NETIF_F_NETNS_LOCAL;
|
|
|
|