diff options
Diffstat (limited to 'drivers/net/macvlan.c')
-rw-r--r-- | drivers/net/macvlan.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c index 94198366de7f..09ababe54a5b 100644 --- a/drivers/net/macvlan.c +++ b/drivers/net/macvlan.c | |||
@@ -689,8 +689,19 @@ static netdev_features_t macvlan_fix_features(struct net_device *dev, | |||
689 | netdev_features_t features) | 689 | netdev_features_t features) |
690 | { | 690 | { |
691 | struct macvlan_dev *vlan = netdev_priv(dev); | 691 | struct macvlan_dev *vlan = netdev_priv(dev); |
692 | netdev_features_t mask; | ||
692 | 693 | ||
693 | return features & (vlan->set_features | ~MACVLAN_FEATURES); | 694 | features |= NETIF_F_ALL_FOR_ALL; |
695 | features &= (vlan->set_features | ~MACVLAN_FEATURES); | ||
696 | mask = features; | ||
697 | |||
698 | features = netdev_increment_features(vlan->lowerdev->features, | ||
699 | features, | ||
700 | mask); | ||
701 | if (!vlan->fwd_priv) | ||
702 | features |= NETIF_F_LLTX; | ||
703 | |||
704 | return features; | ||
694 | } | 705 | } |
695 | 706 | ||
696 | static const struct ethtool_ops macvlan_ethtool_ops = { | 707 | static const struct ethtool_ops macvlan_ethtool_ops = { |
@@ -1009,9 +1020,8 @@ static int macvlan_device_event(struct notifier_block *unused, | |||
1009 | break; | 1020 | break; |
1010 | case NETDEV_FEAT_CHANGE: | 1021 | case NETDEV_FEAT_CHANGE: |
1011 | list_for_each_entry(vlan, &port->vlans, list) { | 1022 | list_for_each_entry(vlan, &port->vlans, list) { |
1012 | vlan->dev->features = dev->features & MACVLAN_FEATURES; | ||
1013 | vlan->dev->gso_max_size = dev->gso_max_size; | 1023 | vlan->dev->gso_max_size = dev->gso_max_size; |
1014 | netdev_features_change(vlan->dev); | 1024 | netdev_update_features(vlan->dev); |
1015 | } | 1025 | } |
1016 | break; | 1026 | break; |
1017 | case NETDEV_UNREGISTER: | 1027 | case NETDEV_UNREGISTER: |