ena — FreeBSD kernel driver for Elastic Network Adapter (ENA) family
Contents
Description
The ENA is a networking interface designed to make good use of modern CPU features and system
architectures.
The ENA device exposes a lightweight management interface with a minimal set of memory mapped registers
and extendable command set through an Admin Queue.
The driver supports a range of ENA devices, is link-speed independent (i.e., the same driver is used for
10GbE, 25GbE, 40GbE, etc.), and has a negotiated and extendable feature set.
Some ENA devices support SR-IOV. This driver is used for both the SR-IOV Physical Function (PF) and
Virtual Function (VF) devices.
The ENA devices enable high speed and low overhead network traffic processing by providing multiple Tx/Rx
queue pairs (the maximum number is advertised by the device via the Admin Queue), a dedicated MSI-X
interrupt vector per Tx/Rx queue pair, and CPU cacheline optimized data placement.
The ena driver supports industry standard TCP/IP offload features such as checksum offload and TCP
transmit segmentation offload (TSO). Receive-side scaling (RSS) is supported for multi-core scaling.
The ena driver and its corresponding devices implement health monitoring mechanisms such as watchdog,
enabling the device and driver to recover in a manner transparent to the application, as well as debug
logs.
Some of the ENA devices support a working mode called Low-latency Queue (LLQ), which saves several more
microseconds. This feature will be implemented for driver in future releases.
Diagnostics
Deviceinitializationphase:ena%d:failedtoinitmmioreadless
Error occurred during initialization of the mmio register read request.
ena%d:Cannotresetdevice
Device could not be reset.
Device may not be responding or is already during reset.
ena%d:deviceversionistoolow
Version of the controller is too old and it is not supported by the driver.
ena%d:Invaliddmawidthvalue%d
The controller is able to request dma transaction width.
Device stopped responding or it demanded invalid value.
ena%d:Cannotinitializeenaadminqueuewithdevice
Initialization of the Admin Queue failed.
Device may not be responding or there was a problem with initialization of the resources.
ena%d:Cannotgetattributeforenadevicerc:%d
Failed to get attributes of the device from the controller.
ena%d:Cannotconfigureaenqgroupsrc:%d
Errors occurred when trying to configure AENQ groups.
Driverinitialisation/shutdownphase:ena%d:PCIresourceallocationfailed!ena%d:allocatingena_devfailedena%d:failedtopmapregistersbarena%d:Errorwhilesettingupbufringena%d:ErrorwithinitializationofIOringsena%d:cannotallocateifnetstructureena%d:Errorwithnetworkinterfacesetupena%d:Failedtoenableandsettheadmininterruptsena%d:Failedtoallocate%d,vectors%dena%d:FailedtoenableMSIX,vectors%drc%dena%d:ErrorwithMSI-Xenablementena%d:couldnotallocateirqvector:%dena%d:Unabletoallocatebusresource:registers
Resource allocation failed when initializing the device.
Driver will not be attached.
ena%d:ENAdeviceinitfailed(err:%d)
Device initialization failed.
Driver will not be attached.
ena%d:couldnotactivateirqvector:%d
Error occurred when trying to activate interrupt vectors for Admin Queue.
ena%d:failedtoregisterinterrupthandlerforirq%ju:%d
Error occurred when trying to register Admin Queue interrupt handler.
ena%d:Cannotsetupmgmntqueueintr
Error occurred during configuration of the Admin Queue interrupts.
ena%d:EnableMSI-Xfailed
Configuration of the MSI-X for Admin Queue failed.
There could be lack of resources or interrupts could not have been configured.
Driver will not be attached.
ena%d:VLANisinuse,detachfirst
VLANs are being used when trying to detach the driver.
VLANs must be detached first and then detach routine have to be called again.
ena%d:UnmappedRXDMAtagassociationsena%d:UnmappedTXDMAtagassociations
Error occurred when trying to destroy RX/TX DMA tag.
ena%d:CannotinitRSSena%d:Cannotfillindirecttableena%d:Cannotfillindirecttableena%d:Cannotfillhashfunctionena%d:Cannotfillhashcontrolena%d:WARNING:RSSwasnotproperlyinitialized,itwillaffectbandwidth
Error occurred during initialization of one of RSS resources.
The device will work with reduced performance because all RX packets will be passed to queue 0 and there
will be no hash information.
ena%d:failedtoteardownirq:%dena%d:devhasnoparentwhilereleasingresforirq:%d Release of the interrupts failed.
Additionaldiagnostic:ena%d:Cannotgetattributeforenadevice
This message appears when trying to change MTU and driver is unable to get attributes from the device.
ena%d:InvalidMTUsetting.new_mtu:%d
Requested MTU value is not supported and will not be set.
ena%d:keepalivewatchdogtimeout
Device stopped responding and will be reset.
ena%d:FoundaTxthatwasn'tcompletedontime,qid%d,index%d.
Packet was pushed to the NIC but not sent within given time limit.
It may be caused by hang of the IO queue.
ena%d:Thenumberoflosttxcompletionisabocethethreshold(%d>%d).Resetthedevice
If too many Tx wasn't completed on time the device is going to be reset.
It may be caused by hanged queue or device.
ena%d:triggerresetison
Device will be reset.
Reset is triggered either by watchdog or if too many TX packets were not completed on time.
ena%d:invalidvaluerecvd
Link status received from the device in the AENQ handler is invalid.
ena%d:AllocationforTxQueue%ufailedena%d:AllocationforRxQueue%ufailedena%d:UnabletocreateRxDMAmapforbuffer%dena%d:FailedtocreateioTXqueue#%drc:%dena%d:FailedtogetTXqueuehandlers.TXqueuenum%drc:%dena%d:FailedtocreateioRXqueue[%d]rc:%dena%d:FailedtogetRXqueuehandlers.RXqueuenum%drc:%dena%d:failedtorequestirqena%d:couldnotallocateirqvector:%dena%d:failedtoregisterinterrupthandlerforirq%ju:%d
IO resources initialization failed.
Interface will not be brought up.
ena%d:LRO[%d]Initializationfailed!
Initialization of the LRO for the RX ring failed.
ena%d:failedtoallocbufferforrxqueueena%d:failedtoaddbufferforrxqueue%dena%d:refilledrxqueue%dwith%dpagesonly
Allocation of resources used on RX path failed.
If happened during initialization of the IO queue, the interface will not be brought up.
ena%d:ioctlpromisc/allmulti
IOCTL request for the device to work in promiscuous/allmulti mode.
See ifconfig(8) for more details.
ena%d:toomanyfragments.Lastfragment:%d!
Packet with unsupported number of segments was queued for sending to the device.
Packet will be dropped.
Hardware
Supported PCI vendor ID/device IDs:
• 1d0f:0ec2 - ENA PF
• 1d0f:1ec2 - ENA PF with LLQ support
• 1d0f:ec20 - ENA VF
• 1d0f:ec21 - ENA VF with LLQ support
Name
ena — FreeBSD kernel driver for Elastic Network Adapter (ENA) family
See Also
vlan(4), ifconfig(8)
Support
If an issue is identified with the released source code with a supported adapter, please email the
specific information related to the issue to ⟨mk@semihalf.com⟩ and ⟨mw@semihalf.com⟩.
Synopsis
To compile this driver into the kernel, place the following line in the kernel configuration file:
deviceena
Alternatively, to load the driver as a module at boot time, place the following line in loader.conf(5):
if_ena_load="YES"
