#define MLX5E_MAX_COAL_FRAMES          MLX5_MAX_CQ_COUNT
 
 static void
-mlx5e_set_priv_channels_coalesce(struct mlx5e_priv *priv, struct ethtool_coalesce *coal)
+mlx5e_set_priv_channels_tx_coalesce(struct mlx5e_priv *priv, struct ethtool_coalesce *coal)
 {
        struct mlx5_core_dev *mdev = priv->mdev;
        int tc;
                                                coal->tx_coalesce_usecs,
                                                coal->tx_max_coalesced_frames);
                }
+       }
+}
+
+static void
+mlx5e_set_priv_channels_rx_coalesce(struct mlx5e_priv *priv, struct ethtool_coalesce *coal)
+{
+       struct mlx5_core_dev *mdev = priv->mdev;
+       int i;
+
+       for (i = 0; i < priv->channels.num; ++i) {
+               struct mlx5e_channel *c = priv->channels.c[i];
 
                mlx5_core_modify_cq_moderation(mdev, &c->rq.cq.mcq,
                                               coal->rx_coalesce_usecs,
        reset_tx = !!coal->use_adaptive_tx_coalesce != priv->channels.params.tx_dim_enabled;
 
        if (!reset_rx && !reset_tx) {
-               mlx5e_set_priv_channels_coalesce(priv, coal);
+               if (!coal->use_adaptive_rx_coalesce)
+                       mlx5e_set_priv_channels_rx_coalesce(priv, coal);
+               if (!coal->use_adaptive_tx_coalesce)
+                       mlx5e_set_priv_channels_tx_coalesce(priv, coal);
                priv->channels.params = new_channels.params;
                goto out;
        }