net/mlx5e: Avoid reset netdev stats on configuration changes
[sfrench/cifs-2.6.git] / drivers / net / ethernet / mellanox / mlx5 / core / en.h
index c3c79f2835d280ba199b9b4f239bcfe1bd125e86..1c04df043e07178edd7f454965e55d0a6ec67cf4 100644 (file)
@@ -358,7 +358,6 @@ struct mlx5e_txqsq {
        /* dirtied @xmit */
        u16                        pc ____cacheline_aligned_in_smp;
        u32                        dma_fifo_pc;
        /* dirtied @xmit */
        u16                        pc ____cacheline_aligned_in_smp;
        u32                        dma_fifo_pc;
-       struct mlx5e_sq_stats      stats;
 
        struct mlx5e_cq            cq;
 
 
        struct mlx5e_cq            cq;
 
@@ -371,6 +370,7 @@ struct mlx5e_txqsq {
        /* read only */
        struct mlx5_wq_cyc         wq;
        u32                        dma_fifo_mask;
        /* read only */
        struct mlx5_wq_cyc         wq;
        u32                        dma_fifo_mask;
+       struct mlx5e_sq_stats     *stats;
        void __iomem              *uar_map;
        struct netdev_queue       *txq;
        u32                        sqn;
        void __iomem              *uar_map;
        struct netdev_queue       *txq;
        u32                        sqn;
@@ -526,7 +526,7 @@ struct mlx5e_rq {
        struct mlx5e_channel  *channel;
        struct device         *pdev;
        struct net_device     *netdev;
        struct mlx5e_channel  *channel;
        struct device         *pdev;
        struct net_device     *netdev;
-       struct mlx5e_rq_stats  stats;
+       struct mlx5e_rq_stats *stats;
        struct mlx5e_cq        cq;
        struct mlx5e_page_cache page_cache;
        struct hwtstamp_config *tstamp;
        struct mlx5e_cq        cq;
        struct mlx5e_page_cache page_cache;
        struct hwtstamp_config *tstamp;
@@ -574,7 +574,7 @@ struct mlx5e_channel {
 
        /* data path - accessed per napi poll */
        struct irq_desc *irq_desc;
 
        /* data path - accessed per napi poll */
        struct irq_desc *irq_desc;
-       struct mlx5e_ch_stats      stats;
+       struct mlx5e_ch_stats     *stats;
 
        /* control */
        struct mlx5e_priv         *priv;
 
        /* control */
        struct mlx5e_priv         *priv;
@@ -590,6 +590,12 @@ struct mlx5e_channels {
        struct mlx5e_params    params;
 };
 
        struct mlx5e_params    params;
 };
 
+struct mlx5e_channel_stats {
+       struct mlx5e_ch_stats ch;
+       struct mlx5e_sq_stats sq[MLX5E_MAX_NUM_TC];
+       struct mlx5e_rq_stats rq;
+} ____cacheline_aligned_in_smp;
+
 enum mlx5e_traffic_types {
        MLX5E_TT_IPV4_TCP,
        MLX5E_TT_IPV6_TCP,
 enum mlx5e_traffic_types {
        MLX5E_TT_IPV4_TCP,
        MLX5E_TT_IPV6_TCP,
@@ -793,6 +799,8 @@ struct mlx5e_priv {
        struct mlx5_core_dev      *mdev;
        struct net_device         *netdev;
        struct mlx5e_stats         stats;
        struct mlx5_core_dev      *mdev;
        struct net_device         *netdev;
        struct mlx5e_stats         stats;
+       struct mlx5e_channel_stats channel_stats[MLX5E_MAX_NUM_CHANNELS];
+       u8                         max_opened_tc;
        struct hwtstamp_config     tstamp;
        u16                        q_counter;
        u16                        drop_rq_q_counter;
        struct hwtstamp_config     tstamp;
        u16                        q_counter;
        u16                        drop_rq_q_counter;