HomeFreeBSD

ena: Fix misconfiguration when requesting regular LLQ

Description

ena: Fix misconfiguration when requesting regular LLQ

Patch 0a33c047a443 introduced new values to
hw.ena.force_large_llq_header. The default value of 2 means no
preference, while 0 and 1 act as the previous false and true
respectively, which allowed forcefully setting regular or large LLQ.

There are 2 ways to force the driver to select regular LLQ:

  1. Setting hw.ena.force_large_llq_header = 0 via sysctl.
  2. Turning on ena express, which makes the recommendation by the FW to be regular LLQ.

When the device supports large LLQ but the driver is forced to
regular LLQ, llq_config->llq_ring_entry_size_value is never initialized
and since it is a variable allocated on the stack, it stays garbage.

Since this variable is involved in calculating max_entries_in_tx_burst,
it could cause the maximum burst size to be zero. This causes the driver
to ignore the real maximum burst size of the device, leading to driver
resets in devices that have a maximum burst size (Nitro v4 and on. see
[1] for more information).

In case the garbage value is 0, the calculation of
max_entries_in_tx_burst divides by 0 and causes kernel panic.

The patch modifies the logic to take into account all use-cases and
ensure that the relevant fields are properly initialized.

[1]: https://docs.aws.amazon.com/ec2/latest/instancetypes/ec2-nitro-instances.html

Fixes: 0a33c047a443 ("ena: Support LLQ entry size recommendation from device")
Approved by: cperciva (mentor)
MFC after: 3 days
Sponsored by: Amazon, Inc.
Differential Revision: https://reviews.freebsd.org/D50040

Details

Provenance
darinzon_amazon.comAuthored on Tue, Apr 22, 10:54 AM
akiyano_amazon.comCommitted on Tue, Apr 29, 5:00 PM
Differential Revision
D50040: ena: Fix misconfiguration when requesting regular LLQ
Parents
rG54a2c5978f51: fts: Fix GCC compile error
Branches
Unknown
Tags
Unknown