]> git.ipfire.org Git - thirdparty/ipxe.git/commit
[ena] Limit receive queue size to work around hardware bugs
authorMichael Brown <mcb30@ipxe.org>
Fri, 17 Oct 2025 11:35:11 +0000 (12:35 +0100)
committerMichael Brown <mcb30@ipxe.org>
Fri, 17 Oct 2025 12:25:05 +0000 (13:25 +0100)
commitb2e8468219ca2c44bfef3b62f16bbfbd938eb8eb
treef51a62a6600ac11a1cb9de58e7aa0b514ec9889f
parent846c505ae9ad0b95494759d50ae015a52eb0a2f2
[ena] Limit receive queue size to work around hardware bugs

Commit a801244 ("[ena] Increase receive ring size to 128 entries")
increased the receive ring size to 128 entries (while leaving the fill
level at 16), since using a smaller receive ring caused unexplained
failures on some instance types.

The original hardware bug that resulted in that commit seems to have
been fixed: experiments suggest that the original failure (observed on
a c6i.large instance in eu-west-2) will no longer reproduce when using
a receive ring containing only 16 entries (as was the case prior to
that commit).

Newer generations of the ENA hardware (observed on an m8i.large
instance in eu-south-2) seem to have a new and exciting hardware bug:
these instance types appear to use a hash of the received packet
header to determine which portion of the (out-of-order) receive ring
to use.  If that portion of the ring happens to be empty (e.g. because
only 32 entries of the 128-entry ring are filled at any one time),
then the packet will be silently dropped.

Work around this new hardware bug by reducing the receive ring size
down to the current fill level of 32 entries.  This appears to work on
all current instance types (but has not been exhaustively tested).

Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/drivers/net/ena.c
src/drivers/net/ena.h