static inline void ixgbe_irq_enable_queues(struct ixgbe_adapter *adapter,
                                           u64 qmask)
 {
-       u32 mask;
        struct ixgbe_hw *hw = &adapter->hw;
+       u32 mask;
 
        switch (hw->mac.type) {
        case ixgbe_mac_82598EB:
        memset(&rx_ring->rx_stats, 0, sizeof(rx_ring->rx_stats));
 }
 
+/**
+ * ixgbe_irq_disable_single - Disable single IRQ vector
+ * @adapter: adapter structure
+ * @ring: ring index
+ **/
+static void ixgbe_irq_disable_single(struct ixgbe_adapter *adapter, u32 ring)
+{
+       struct ixgbe_hw *hw = &adapter->hw;
+       u64 qmask = BIT_ULL(ring);
+       u32 mask;
+
+       switch (adapter->hw.mac.type) {
+       case ixgbe_mac_82598EB:
+               mask = qmask & IXGBE_EIMC_RTX_QUEUE;
+               IXGBE_WRITE_REG(&adapter->hw, IXGBE_EIMC, mask);
+               break;
+       case ixgbe_mac_82599EB:
+       case ixgbe_mac_X540:
+       case ixgbe_mac_X550:
+       case ixgbe_mac_X550EM_x:
+       case ixgbe_mac_x550em_a:
+               mask = (qmask & 0xFFFFFFFF);
+               if (mask)
+                       IXGBE_WRITE_REG(hw, IXGBE_EIMS_EX(0), mask);
+               mask = (qmask >> 32);
+               if (mask)
+                       IXGBE_WRITE_REG(hw, IXGBE_EIMS_EX(1), mask);
+               break;
+       default:
+               break;
+       }
+       IXGBE_WRITE_FLUSH(&adapter->hw);
+       if (adapter->flags & IXGBE_FLAG_MSIX_ENABLED)
+               synchronize_irq(adapter->msix_entries[ring].vector);
+       else
+               synchronize_irq(adapter->pdev->irq);
+}
+
 /**
  * ixgbe_txrx_ring_disable - Disable Rx/Tx/XDP Tx rings
  * @adapter: adapter structure
        tx_ring = adapter->tx_ring[ring];
        xdp_ring = adapter->xdp_ring[ring];
 
+       ixgbe_irq_disable_single(adapter, ring);
+
+       /* Rx/Tx/XDP Tx share the same napi context. */
+       napi_disable(&rx_ring->q_vector->napi);
+
        ixgbe_disable_txr(adapter, tx_ring);
        if (xdp_ring)
                ixgbe_disable_txr(adapter, xdp_ring);
        if (xdp_ring)
                synchronize_rcu();
 
-       /* Rx/Tx/XDP Tx share the same napi context. */
-       napi_disable(&rx_ring->q_vector->napi);
-
        ixgbe_clean_tx_ring(tx_ring);
        if (xdp_ring)
                ixgbe_clean_tx_ring(xdp_ring);
        tx_ring = adapter->tx_ring[ring];
        xdp_ring = adapter->xdp_ring[ring];
 
-       /* Rx/Tx/XDP Tx share the same napi context. */
-       napi_enable(&rx_ring->q_vector->napi);
-
        ixgbe_configure_tx_ring(adapter, tx_ring);
        if (xdp_ring)
                ixgbe_configure_tx_ring(adapter, xdp_ring);
        clear_bit(__IXGBE_TX_DISABLED, &tx_ring->state);
        if (xdp_ring)
                clear_bit(__IXGBE_TX_DISABLED, &xdp_ring->state);
+
+       /* Rx/Tx/XDP Tx share the same napi context. */
+       napi_enable(&rx_ring->q_vector->napi);
+       ixgbe_irq_enable_queues(adapter, BIT_ULL(ring));
+       IXGBE_WRITE_FLUSH(&adapter->hw);
 }
 
 /**