On 7/24/2024 12:26 AM, Kurt Kanzenbach wrote:
On Tue Jul 23 2024, Brett Creeley wrote:
@@ -5811,11 +5815,29 @@ static void igc_watchdog_task(struct work_struct *work)
          if (adapter->flags & IGC_FLAG_HAS_MSIX) {
                  u32 eics = 0;

-               for (i = 0; i < adapter->num_q_vectors; i++)
-                       eics |= adapter->q_vector[i]->eims_value;
-               wr32(IGC_EICS, eics);
+               for (i = 0; i < adapter->num_q_vectors; i++) {
+                       struct igc_q_vector *q_vector = adapter->q_vector[i];
+                       struct igc_ring *rx_ring;
+
+                       if (!q_vector->rx.ring)
+                               continue;
+
+                       rx_ring = 
adapter->rx_ring[q_vector->rx.ring->queue_index];
+
+                       if (test_bit(IGC_RING_FLAG_RX_ALLOC_FAILED, 
&rx_ring->flags)) {
+                               eics |= q_vector->eims_value;
+                               clear_bit(IGC_RING_FLAG_RX_ALLOC_FAILED, 
&rx_ring->flags);
+                       }

Tiny nit, but is there a reason to not use test_and_clear_bit() here?

I believe that question was answered by Sebastian on v1:

  https://lore.kernel.org/all/20240613062426.om5bq...@linutronix.de/

Other than that no particular reason.

Okay, that makes sense. I should have looked through the previous comments. Thanks for the link though.

Thanks,

Brett

Thanks,
Kurt

Reply via email to