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