]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - drivers/net/bonding/bond_main.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
[karo-tx-linux.git] / drivers / net / bonding / bond_main.c
index 771a449d2f56384bae4a5409ffb588dfb40e1f61..b4351caf8e013dbe15fcaf7402e8c9dbaeee9abb 100644 (file)
@@ -1071,7 +1071,7 @@ static netdev_features_t bond_fix_features(struct net_device *dev,
                                 NETIF_F_HIGHDMA | NETIF_F_LRO)
 
 #define BOND_ENC_FEATURES      (NETIF_F_ALL_CSUM | NETIF_F_SG | NETIF_F_RXCSUM |\
-                                NETIF_F_TSO)
+                                NETIF_F_ALL_TSO)
 
 static void bond_compute_features(struct bonding *bond)
 {
@@ -2943,8 +2943,6 @@ static int bond_slave_netdev_event(unsigned long event,
        struct slave *slave = bond_slave_get_rtnl(slave_dev), *primary;
        struct bonding *bond;
        struct net_device *bond_dev;
-       u32 old_speed;
-       u8 old_duplex;
 
        /* A netdev event can be generated while enslaving a device
         * before netdev_rx_handler_register is called in which case
@@ -2965,17 +2963,9 @@ static int bond_slave_netdev_event(unsigned long event,
                break;
        case NETDEV_UP:
        case NETDEV_CHANGE:
-               old_speed = slave->speed;
-               old_duplex = slave->duplex;
-
                bond_update_speed_duplex(slave);
-
-               if (BOND_MODE(bond) == BOND_MODE_8023AD) {
-                       if (old_speed != slave->speed)
-                               bond_3ad_adapter_speed_changed(slave);
-                       if (old_duplex != slave->duplex)
-                               bond_3ad_adapter_duplex_changed(slave);
-               }
+               if (BOND_MODE(bond) == BOND_MODE_8023AD)
+                       bond_3ad_adapter_speed_duplex_changed(slave);
                /* Fallthrough */
        case NETDEV_DOWN:
                /* Refresh slave-array if applicable!
@@ -3136,6 +3126,10 @@ u32 bond_xmit_hash(struct bonding *bond, struct sk_buff *skb)
        struct flow_keys flow;
        u32 hash;
 
+       if (bond->params.xmit_policy == BOND_XMIT_POLICY_ENCAP34 &&
+           skb->l4_hash)
+               return skb->hash;
+
        if (bond->params.xmit_policy == BOND_XMIT_POLICY_LAYER2 ||
            !bond_flow_dissect(bond, skb, &flow))
                return bond_eth_hash(skb);