Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
authorDavid S. Miller <davem@davemloft.net>
Wed, 6 Jul 2016 17:35:22 +0000 (10:35 -0700)
committerDavid S. Miller <davem@davemloft.net>
Wed, 6 Jul 2016 17:35:22 +0000 (10:35 -0700)
Conflicts:
drivers/net/ethernet/mellanox/mlx5/core/en.h
drivers/net/ethernet/mellanox/mlx5/core/en_main.c
drivers/net/usb/r8152.c

All three conflicts were overlapping changes.

Signed-off-by: David S. Miller <davem@davemloft.net>
19 files changed:
1  2 
drivers/net/bonding/bond_main.c
drivers/net/ethernet/broadcom/bcmsysport.c
drivers/net/ethernet/intel/e1000e/netdev.c
drivers/net/ethernet/mellanox/mlx5/core/en.h
drivers/net/ethernet/mellanox/mlx5/core/en_dcbnl.c
drivers/net/ethernet/mellanox/mlx5/core/en_main.c
drivers/net/ethernet/mellanox/mlx5/core/main.c
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
drivers/net/geneve.c
drivers/net/usb/r8152.c
drivers/s390/net/qeth_l2_main.c
drivers/s390/net/qeth_l3_main.c
include/linux/mlx5/driver.h
include/linux/skbuff.h
net/core/skbuff.c
net/ipv4/ip_output.c
net/packet/af_packet.c
net/rds/tcp.c
net/sched/act_mirred.c

Simple merge
@@@ -146,32 -143,10 +146,31 @@@ struct mlx5e_umr_wqe 
        struct mlx5_wqe_data_seg       data;
  };
  
 +static const char mlx5e_priv_flags[][ETH_GSTRING_LEN] = {
 +      "rx_cqe_moder",
 +};
 +
 +enum mlx5e_priv_flag {
 +      MLX5E_PFLAG_RX_CQE_BASED_MODER = (1 << 0),
 +};
 +
 +#define MLX5E_SET_PRIV_FLAG(priv, pflag, enable)    \
 +      do {                                        \
 +              if (enable)                         \
 +                      priv->pflags |= pflag;      \
 +              else                                \
 +                      priv->pflags &= ~pflag;     \
 +      } while (0)
 +
  #ifdef CONFIG_MLX5_CORE_EN_DCB
  #define MLX5E_MAX_BW_ALLOC 100 /* Max percentage of BW allocation */
- #define MLX5E_MIN_BW_ALLOC 1   /* Min percentage of BW allocation */
  #endif
  
 +struct mlx5e_cq_moder {
 +      u16 usec;
 +      u16 pkts;
 +};
 +
  struct mlx5e_params {
        u8  log_sq_size;
        u8  rq_wq_type;
@@@ -215,7 -190,7 +214,8 @@@ struct mlx5e_tstamp 
  enum {
        MLX5E_RQ_STATE_POST_WQES_ENABLE,
        MLX5E_RQ_STATE_UMR_WQE_IN_PROGRESS,
+       MLX5E_RQ_STATE_FLUSH_TIMEOUT,
 +      MLX5E_RQ_STATE_AM,
  };
  
  struct mlx5e_cq {
@@@ -626,9 -542,9 +630,10 @@@ struct mlx5e_priv 
        struct workqueue_struct    *wq;
        struct work_struct         update_carrier_work;
        struct work_struct         set_rx_mode_work;
+       struct work_struct         tx_timeout_work;
        struct delayed_work        update_stats_work;
  
 +      u32                        pflags;
        struct mlx5_core_dev      *mdev;
        struct net_device         *netdev;
        struct mlx5e_stats         stats;
  #include "eswitch.h"
  #include "vxlan.h"
  
+ enum {
+       MLX5_EN_QP_FLUSH_TIMEOUT_MS     = 5000,
+       MLX5_EN_QP_FLUSH_MSLEEP_QUANT   = 20,
+       MLX5_EN_QP_FLUSH_MAX_ITER       = MLX5_EN_QP_FLUSH_TIMEOUT_MS /
+                                         MLX5_EN_QP_FLUSH_MSLEEP_QUANT,
+ };
  struct mlx5e_rq_param {
 -      u32                        rqc[MLX5_ST_SZ_DW(rqc)];
 -      struct mlx5_wq_param       wq;
 +      u32                     rqc[MLX5_ST_SZ_DW(rqc)];
 +      struct mlx5_wq_param    wq;
 +      bool                    am_enabled;
  };
  
  struct mlx5e_sq_param {
@@@ -543,9 -574,8 +582,10 @@@ static void mlx5e_close_rq(struct mlx5e
        /* avoid destroying rq before mlx5e_poll_rx_cq() is done with it */
        napi_synchronize(&rq->channel->napi);
  
 +      cancel_work_sync(&rq->am.work);
 +
        mlx5e_disable_rq(rq);
+       mlx5e_free_rx_descs(rq);
        mlx5e_destroy_rq(rq);
  }
  
@@@ -810,12 -835,19 +853,19 @@@ static void mlx5e_close_sq(struct mlx5e
                if (mlx5e_sq_has_room_for(sq, 1))
                        mlx5e_send_nop(sq, true);
  
-               mlx5e_modify_sq(sq, MLX5_SQC_STATE_RDY, MLX5_SQC_STATE_ERR,
-                               false, 0);
+               err = mlx5e_modify_sq(sq, MLX5_SQC_STATE_RDY,
 -                                    MLX5_SQC_STATE_ERR);
++                                    MLX5_SQC_STATE_ERR, false, 0);
+               if (err)
+                       set_bit(MLX5E_SQ_STATE_TX_TIMEOUT, &sq->state);
        }
  
-       while (sq->cc != sq->pc) /* wait till sq is empty */
-               msleep(20);
+       /* wait till sq is empty, unless a TX timeout occurred on this SQ */
+       while (sq->cc != sq->pc &&
+              !test_bit(MLX5E_SQ_STATE_TX_TIMEOUT, &sq->state)) {
+               msleep(MLX5_EN_QP_FLUSH_MSLEEP_QUANT);
+               if (tout++ > MLX5_EN_QP_FLUSH_MAX_ITER)
+                       set_bit(MLX5E_SQ_STATE_TX_TIMEOUT, &sq->state);
+       }
  
        /* avoid destroying sq before mlx5e_poll_tx_cq() is done with it */
        napi_synchronize(&sq->channel->napi);
Simple merge
@@@ -624,7 -624,7 +624,8 @@@ struct r8152 
                int (*eee_get)(struct r8152 *, struct ethtool_eee *);
                int (*eee_set)(struct r8152 *, struct ethtool_eee *);
                bool (*in_nway)(struct r8152 *);
 +              void (*hw_phy_cfg)(struct r8152 *);
+               void (*autosuspend_en)(struct r8152 *tp, bool enable);
        } rtl_ops;
  
        int intr_interval;
@@@ -4157,7 -4156,7 +4176,8 @@@ static int rtl_ops_init(struct r8152 *t
                ops->eee_get            = r8152_get_eee;
                ops->eee_set            = r8152_set_eee;
                ops->in_nway            = rtl8152_in_nway;
 +              ops->hw_phy_cfg         = r8152b_hw_phy_cfg;
+               ops->autosuspend_en     = rtl_runtime_suspend_enable;
                break;
  
        case RTL_VER_03:
                ops->eee_get            = r8153_get_eee;
                ops->eee_set            = r8153_set_eee;
                ops->in_nway            = rtl8153_in_nway;
 +              ops->hw_phy_cfg         = r8153_hw_phy_cfg;
+               ops->autosuspend_en     = rtl8153_runtime_enable;
                break;
  
        default:
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
diff --cc net/rds/tcp.c
Simple merge
Simple merge