spin_unlock(&adapter->stats64_lock);
 }
 
+static int igc_ethtool_get_previous_rx_coalesce(struct igc_adapter *adapter)
+{
+       return (adapter->rx_itr_setting <= 3) ?
+               adapter->rx_itr_setting : adapter->rx_itr_setting >> 2;
+}
+
+static int igc_ethtool_get_previous_tx_coalesce(struct igc_adapter *adapter)
+{
+       return (adapter->tx_itr_setting <= 3) ?
+               adapter->tx_itr_setting : adapter->tx_itr_setting >> 2;
+}
+
 static int igc_ethtool_get_coalesce(struct net_device *netdev,
                                    struct ethtool_coalesce *ec,
                                    struct kernel_ethtool_coalesce *kernel_coal,
 {
        struct igc_adapter *adapter = netdev_priv(netdev);
 
-       if (adapter->rx_itr_setting <= 3)
-               ec->rx_coalesce_usecs = adapter->rx_itr_setting;
-       else
-               ec->rx_coalesce_usecs = adapter->rx_itr_setting >> 2;
-
-       if (!(adapter->flags & IGC_FLAG_QUEUE_PAIRS)) {
-               if (adapter->tx_itr_setting <= 3)
-                       ec->tx_coalesce_usecs = adapter->tx_itr_setting;
-               else
-                       ec->tx_coalesce_usecs = adapter->tx_itr_setting >> 2;
-       }
+       ec->rx_coalesce_usecs = igc_ethtool_get_previous_rx_coalesce(adapter);
+       ec->tx_coalesce_usecs = igc_ethtool_get_previous_tx_coalesce(adapter);
 
        return 0;
 }
            ec->tx_coalesce_usecs == 2)
                return -EINVAL;
 
-       if ((adapter->flags & IGC_FLAG_QUEUE_PAIRS) && ec->tx_coalesce_usecs)
+       if ((adapter->flags & IGC_FLAG_QUEUE_PAIRS) &&
+           ec->tx_coalesce_usecs != igc_ethtool_get_previous_tx_coalesce(adapter)) {
+               NL_SET_ERR_MSG_MOD(extack,
+                                  "Queue Pair mode enabled, both Rx and Tx coalescing controlled by rx-usecs");
                return -EINVAL;
+       }
 
        /* If ITR is disabled, disable DMAC */
        if (ec->rx_coalesce_usecs == 0) {