Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c91f48d6 authored by Guido Barzini's avatar Guido Barzini Committed by David S. Miller
Browse files

sfc: Survive ISR0=0 bug in the shared IRQ case

parent 2e803407
Loading
Loading
Loading
Loading
+9 −0
Original line number Original line Diff line number Diff line
@@ -1384,6 +1384,15 @@ static irqreturn_t efx_legacy_interrupt(int irq, void *dev_id)
		efx->last_irq_cpu = raw_smp_processor_id();
		efx->last_irq_cpu = raw_smp_processor_id();
		EFX_TRACE(efx, "IRQ %d on CPU %d status " EFX_DWORD_FMT "\n",
		EFX_TRACE(efx, "IRQ %d on CPU %d status " EFX_DWORD_FMT "\n",
			  irq, raw_smp_processor_id(), EFX_DWORD_VAL(reg));
			  irq, raw_smp_processor_id(), EFX_DWORD_VAL(reg));
	} else if (EFX_WORKAROUND_15783(efx)) {
		/* We can't return IRQ_HANDLED more than once on seeing ISR0=0
		 * because this might be a shared interrupt, but we do need to
		 * check the channel every time and preemptively rearm it if
		 * it's idle. */
		efx_for_each_channel(channel, efx) {
			if (!channel->work_pending)
				efx_nic_eventq_read_ack(channel);
		}
	}
	}


	return result;
	return result;