sfxge(4): ensure EvQ poll stops when abort is requested

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.

Submitted by:   Mark Spender <mspender at solarflare.com>
Sponsored by:   Solarflare Communications, Inc.
MFC after:      1 week
Differential Revision:  https://reviews.freebsd.org/D18287
This commit is contained in:
Andrew Rybchenko 2018-11-30 07:10:54 +00:00
parent c6831b0bcb
commit b162acfe52

View File

@ -509,6 +509,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;
}
}