logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

ena — FreeBSD kernel driver for Elastic Network Adapter (ENA) family

Authors

       The ena driver was written by Semihalf.

Debian                                           August 16, 2017                                          ENA(4)

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"

See Also