From: Mark Spender <mspen...@solarflare.com> If an event handler requested an abort, only the inner loop was guarenteed to be broken out of - the outer loop could continue if total == batch.
Fix this by poisoning batch to ensure it is different to total. Signed-off-by: Mark Spender <mspen...@solarflare.com> Signed-off-by: Andrew Rybchenko <arybche...@solarflare.com> --- drivers/net/sfc/base/efx_ev.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/net/sfc/base/efx_ev.c b/drivers/net/sfc/base/efx_ev.c index 1139cc26f..907c4249f 100644 --- a/drivers/net/sfc/base/efx_ev.c +++ b/drivers/net/sfc/base/efx_ev.c @@ -480,6 +480,14 @@ efx_ev_qpoll( if (should_abort) { /* Ignore subsequent events */ total = index + 1; + + /* + * Poison batch to ensure the outer + * loop is broken out of. + */ + EFSYS_ASSERT(batch <= EFX_EV_BATCH); + batch += (EFX_EV_BATCH << 1); + EFSYS_ASSERT(total != batch); break; } } -- 2.17.1