#
36130d29 |
| 12-Aug-2021 |
Artur Rojek <ar@semihalf.com> |
ena: Trigger reset on ena_com_prepare_tx failure
All ena_com_prepare_tx errors other than ENA_COM_NO_MEM are fatal and require device reset.
Obtained from: Semihalf MFC after: 2 weeks Sponsored by:
ena: Trigger reset on ena_com_prepare_tx failure
All ena_com_prepare_tx errors other than ENA_COM_NO_MEM are fatal and require device reset.
Obtained from: Semihalf MFC after: 2 weeks Sponsored by: Amazon, Inc.
show more ...
|
#
c81f8c26 |
| 12-Aug-2021 |
Artur Rojek <ar@semihalf.com> |
ena: Avoid unnecessary mbuf collapses for LLQ condition
In case of Low-latency Queue, one small enough descriptor can be pushed directly to the ENA hw, thus saving one fragment. Check for this condi
ena: Avoid unnecessary mbuf collapses for LLQ condition
In case of Low-latency Queue, one small enough descriptor can be pushed directly to the ENA hw, thus saving one fragment. Check for this condition before performing collapse.
Obtained from: Semihalf MFC after: 2 weeks Sponsored by: Amazon, Inc.
show more ...
|
#
3fc5d816 |
| 24-Jun-2021 |
Marcin Wojtas <mw@FreeBSD.org> |
Merge tag 'vendor/ena-com/2.4.0'
Update the driver in order not to break its compilation and make use of the new ENA logging system
Migrate platform code to the new logging system provided by ena_c
Merge tag 'vendor/ena-com/2.4.0'
Update the driver in order not to break its compilation and make use of the new ENA logging system
Migrate platform code to the new logging system provided by ena_com layer.
Make ENA_INFO the new default log level.
Remove all explicit use of `device_printf`, all new logs requiring one of the log macros to be used.
show more ...
|
#
438c9e3c |
| 14-Jun-2021 |
Marcin Wojtas <mw@FreeBSD.org> |
ena: change ENA C++-style comment into C-style
According to man style(9), only C-style comments should be used.
Submitted by: Michal Krawczyk <mk@semihalf.com> Obtained from: Semihalf MFC after: 2
ena: change ENA C++-style comment into C-style
According to man style(9), only C-style comments should be used.
Submitted by: Michal Krawczyk <mk@semihalf.com> Obtained from: Semihalf MFC after: 2 weeks Sponsored by: Amazon, Inc.
show more ...
|
Revision tags: release/13.0.0 |
|
#
0835cc78 |
| 18-Nov-2020 |
Marcin Wojtas <mw@FreeBSD.org> |
Add SPDX license tag to the ENA driver files
Refering to guide: https://wiki.freebsd.org/SPDX the SPDX tag should not replace the standard license text, however it should be added over the standard
Add SPDX license tag to the ENA driver files
Refering to guide: https://wiki.freebsd.org/SPDX the SPDX tag should not replace the standard license text, however it should be added over the standard license text to make the automation easier.
Because of that, the old license was kept, but the SPDX tag was added on top of every ENA driver file.
Submited by: Michal Krawczyk <mk@semihalf.com> Obtained from: Semihalf Sponsored by: Amazon, Inc MFC after: 1 week Differential revision: https://reviews.freebsd.org/D27117
show more ...
|
#
c7444389 |
| 18-Nov-2020 |
Marcin Wojtas <mw@FreeBSD.org> |
Add Rx offsets support for the ENA driver
For the first descriptor in a chain the data may start at an offset. It is optional feature of some devices, so the driver must ack that it supports it.
Th
Add Rx offsets support for the ENA driver
For the first descriptor in a chain the data may start at an offset. It is optional feature of some devices, so the driver must ack that it supports it.
The data pointer of the mbuf is simply shifted by the given value.
Submitted by: Maciej Bielski <mba@semihalf.com> Submitted by: Michal Krawczyk <mk@semihalf.com> Obtained from: Semihalf Sponsored by: Amazon, Inc MFC after: 1 week Differential revision: https://reviews.freebsd.org/D27116
show more ...
|
#
9eb1615f |
| 18-Nov-2020 |
Marcin Wojtas <mw@FreeBSD.org> |
Adjust ENA driver files to latest ena-com changes
* Use the new API of ena_trace_* * Fix typo syndrom --> syndrome * Remove validation of the Rx req ID (already performed in the ena-com) * Remove us
Adjust ENA driver files to latest ena-com changes
* Use the new API of ena_trace_* * Fix typo syndrom --> syndrome * Remove validation of the Rx req ID (already performed in the ena-com) * Remove usage of deprecated ENA_ASSERT macro
Submitted by: Ido Segev <idose@amazon.com> Submitted by: Michal Krawczyk <mk@semihalf.com> Obtained from: Semihalf Sponsored by: Amazon, Inc MFC after: 1 week Differential revision: https://reviews.freebsd.org/D27115
show more ...
|
Revision tags: release/12.2.0 |
|
#
b40dd828 |
| 23-Jun-2020 |
Andriy Gapon <avg@FreeBSD.org> |
teach ena driver about RSS kernel option
Networking is broken if the driver configures its (virtual) hardware to use a hash algorithm (or a key) different from the one that the network stack (softwa
teach ena driver about RSS kernel option
Networking is broken if the driver configures its (virtual) hardware to use a hash algorithm (or a key) different from the one that the network stack (software RSS) uses. This can be seen with connections initiated from the host. The PCB will be placed into the hash table based on the hash value calculated by the software. The hardware-calculated hash value in reponse packets will be different, so the PCB won't be found.
Tested with a kernel compiled with 'options RSS' on an instance with ena driver.
Reviewed by: mw, adrian MFC after: 2 weeks Sponsored by: Panzura Differential Revision: https://reviews.freebsd.org/D24733
show more ...
|
Revision tags: release/11.4.0 |
|
#
2287afd8 |
| 26-May-2020 |
Marcin Wojtas <mw@FreeBSD.org> |
Update ENA driver version to v2.2.0
Driver version upgrade is connected with support for the new device fetures, like Tx drops reporting or disabling meta caching.
Moreover, the driver configuratio
Update ENA driver version to v2.2.0
Driver version upgrade is connected with support for the new device fetures, like Tx drops reporting or disabling meta caching.
Moreover, the driver configuration from the sysctl was reworked to provide safer and better flow for configuring: * number of IO queues (new feature), * drbr size on Tx, * Rx queue size.
Moreover, a lot of minor bug fixes and improvements were added.
Copyright date in the license of the modified files in this release was updated to 2020.
Submitted by: Michal Krawczyk <mk@semihalf.com> Obtained from: Semihalf Sponsored by: Amazon, Inc.
show more ...
|
#
7381a86f |
| 26-May-2020 |
Marcin Wojtas <mw@FreeBSD.org> |
Refactor ena_tx_map_mbuf() function
There is no guarantee from bus_dmamap_load_mbuf_sg() for matching mbuf chain segments to dma physical segments.
This patch ensure correctly mapping to LLQ header
Refactor ena_tx_map_mbuf() function
There is no guarantee from bus_dmamap_load_mbuf_sg() for matching mbuf chain segments to dma physical segments.
This patch ensure correctly mapping to LLQ header and DMA segments.
Submitted by: Ido Segev <idose@amazon.com> Obtained from: Amazon, Inc.
show more ...
|
#
0b432b70 |
| 26-May-2020 |
Marcin Wojtas <mw@FreeBSD.org> |
Allow disabling meta caching for ENA Tx path
Determined by a flag passed from the device. No metadata is set within ena_tx_csum when caching is disabled.
Submitted by: Maciej Bielski <mba@semihalf
Allow disabling meta caching for ENA Tx path
Determined by a flag passed from the device. No metadata is set within ena_tx_csum when caching is disabled.
Submitted by: Maciej Bielski <mba@semihalf.com> Obtained from: Semihalf Sponsored by: Amazon, Inc.
show more ...
|
#
7d8c4fee |
| 26-May-2020 |
Marcin Wojtas <mw@FreeBSD.org> |
Rework ENA Rx queue size configuration
This patch reworks how the Rx queue size is being reconfigured and how the information from the device is being processed.
Reconfiguration of the queues and r
Rework ENA Rx queue size configuration
This patch reworks how the Rx queue size is being reconfigured and how the information from the device is being processed.
Reconfiguration of the queues and reset of the device in order to make the changes alive isn't the best approach. It can be done synchronously and it will let to pass information if the reconfiguration was successful to the user. It now is done in the ena_update_queue_size() function.
To avoid reallocation of the ring buffer, statistic counters and the reinitialization of the mutexes when only new size has to be assigned, the io queues initialization function has been split into 2 stages: basic, which is just copying appropriate fields and the advanced, which allocates and inits more advanced structures for the IO rings.
Moreover, now the max allowed Rx and Tx ring size is being kept statically in the adapter and the size of the variables holding those values has been changed to uint32_t everywhere.
Information about IO queues size is now being logged in the up routine instead of the attach.
Submitted by: Michal Krawczyk <mk@semihalf.com> Obtained from: Semihalf Sponsored by: Amazon, Inc.
show more ...
|
#
7926bc44 |
| 26-May-2020 |
Marcin Wojtas <mw@FreeBSD.org> |
Add trigger reset function in the ENA driver
As the reset triggering is no longer a simple macro that was just setting appropriate flag, the new function for triggering reset was added. It improves
Add trigger reset function in the ENA driver
As the reset triggering is no longer a simple macro that was just setting appropriate flag, the new function for triggering reset was added. It improves code readability a lot, as we are avoiding additional indentation.
Submitted by: Michal Krawczyk <mk@semihalf.com> Obtained from: Semihalf Sponsored by: Amazon, Inc.
show more ...
|
#
8483b844 |
| 26-May-2020 |
Marcin Wojtas <mw@FreeBSD.org> |
Adjust ENA driver to the new HAL
* Removed adaptive interrupt moderation (not suported on FreeBSD). * Use ena_com_free_q_entries instead of ena_com_free_desc. * Don't use ENA_MEM_FREE outside of the
Adjust ENA driver to the new HAL
* Removed adaptive interrupt moderation (not suported on FreeBSD). * Use ena_com_free_q_entries instead of ena_com_free_desc. * Don't use ENA_MEM_FREE outside of the ena_com. * Don't use barriers before calling doorbells as it's already done in the HAL. * Add function that generates random RSS key, common for all driver's interfaces. * Change admin stats sysctls to U64.
Submitted by: Michal Krawczyk <mk@semihalf.com> Obtained from: Semihalf Sponsored by: Amazon, Inc.
show more ...
|
#
75dfc66c |
| 27-Feb-2020 |
Dimitry Andric <dim@FreeBSD.org> |
Merge ^/head r358269 through r358399.
|
#
888810f0 |
| 24-Feb-2020 |
Marcin Wojtas <mw@FreeBSD.org> |
Rework and simplify Tx DMA mapping in ENA
Driver working in LLQ mode in some cases can send only few last segments of the mbuf using DMA engine, and the rest of them are sent to the device using dir
Rework and simplify Tx DMA mapping in ENA
Driver working in LLQ mode in some cases can send only few last segments of the mbuf using DMA engine, and the rest of them are sent to the device using direct PCI transaction. To map the only necessary data, two DMA maps were used. That solution was very rough and was causing a bug - if both maps were used (head_map and seg_map), there was a race in between two flows on two queues and the device was receiving corrupted data which could be further received on the other host if the Tx cksum offload was enabled.
As it's ok to map whole mbuf and then send to the device only needed segments, the design was simplified to use only single DMA map.
The driver version was updated to v2.1.1 as it's important bug fix.
Submitted by: Michal Krawczyk <mk@semihalf.com> Obtained from: Semihalf MFC after: 2 weeks Sponsored by: Amazon, Inc.
show more ...
|
Revision tags: release/12.1.0 |
|
#
6f2128c7 |
| 31-Oct-2019 |
Marcin Wojtas <mw@FreeBSD.org> |
Add support for ENA NETMAP Tx
Two new tables are added to ena_tx_buffer structure: * netmap_map_seg stores DMA mapping structures, * netmap_buf_idx stores buff indexes taken from the slots.
When Tx
Add support for ENA NETMAP Tx
Two new tables are added to ena_tx_buffer structure: * netmap_map_seg stores DMA mapping structures, * netmap_buf_idx stores buff indexes taken from the slots.
When Tx resources are being set, the new mapping structures are created and netmap Tx rings are being reset.
When Tx resources are being released, used netmap bufs are unmapped from DMA and then mapping structures are destroyed.
When Tx interrupt occurrs, ena_netmap_tx_irq is called.
ena_netmap_txsync callback signalizes that there are new packets which should be transmitted. First, it fills ena_netmap_ctx. Then it performs two actions: * ena_netmap_tx_frames moves packets from netmap ring to NIC, * ena_netmap_tx_cleanup restores buffers from NIC and gives them back to the userspace app. 0 is returned in case of Tx error that could be handled by the driver.
ena_netmap_tx_frames checks if there are packets ready for transmission. Then, for each of them, ena_netmap_tx_frame is called. If error occurs, transmitting is stopped, but if the error was cause due to HW ring being full, information about that is not propagated to the userspace app. When all packets are ready, doorbell is written to NIC and netmap ring state is updated.
Parsing of one packet is done by the ena_netmap_tx_frame function. First, it checks if number of slots does not exceed NIC limit. Invalid packets are being dropped and the error is propagated to the upper layer. As each netmap buffer has equal size, which is typically greater then 2KiB, there shouldn't be any packets which contain too many slots. Then, the ena_com_tx_ctx structure is being filled. As netmap does not support any hardware offloads, ena_com_tx_meta structure is set to zero. After that, ena_netmap_map_slots maps all memory slots for DMA. If the device works in the LLQ mode, the push header is being determined by checking if the header fits within the first socket. If so, the portion of data is being copied directly from the slot. In other case, the data is copied to the intermediate buffer. First slots are treated the same as as the others, because DMA mapping has no impact on LLQ mode. Index of each netmap buffer is taken from slot and stored in netmap_buf_idx array. In case of mapping error, memory is unmapped and packets are put back to the netmap ring.
ena_netmap_tx_cleanup performs out of order cleanup of sent buffers. First, req_id is taken and is validated. As validate_tx_req_id from ena.c is specific to kernels mbuf, another implementation is provided. Each req_id is cleaned up by ena_netmap_tx_clean_one function. Buffers are being unmaped from DMA and put back to netmap ring. In the end, state of netmap and NIC rings are being updated.
Differential Revision: https://reviews.freebsd.org/D21936 Submitted by: Rafal Kozik <rk@semihalf.com> Michal Krawczyk <mk@semihalf.com> Obtained from: Semihalf Sponsored by: Amazon, Inc.
show more ...
|
#
9a0f2079 |
| 31-Oct-2019 |
Marcin Wojtas <mw@FreeBSD.org> |
Add support for ENA NETMAP Rx
Most of code used for Rx ring initialization could be reused in NETMAP. Reset of NETMAP ring and new alloc method was added. Driver decides if use kernels mbufs or NETM
Add support for ENA NETMAP Rx
Most of code used for Rx ring initialization could be reused in NETMAP. Reset of NETMAP ring and new alloc method was added. Driver decides if use kernels mbufs or NETMAPs slots based on IFCAP_NETMAP flag. It allows to reuse ena_refill_rx_bufs, which provides proper handling of Rx out of order completion.
ena_netmap_alloc_rx_slot takes exactly the same arguments as ena_alloc_rx_mbuf, but instead of allocating one mbuf it takes one slot from NETMAP ring. Based on queue id proper netmap_ring is found. As NETMAP provides the "partial opening" feature not all of the rings are avaiable. Not used points to invalid ring. If there is available slot, it is taken from the ring. Its buffer is mapped to DMA and its index is stored in ena_rx_buffer field in ena_rx_buffer structure. Then ena_buf is filled with addresses and ring state is updated.
Cleanup is handled by ena_netmap_free_rx_slot. It unmaps DMA and returns buffer to ring. As we could not return more bufs than we have taken and we should not override occupied slots, buf_index should be 0. It is being checked by assertion.
ena_netmap_rxsync callback puts received packets back to NETMAP ring and passes them to user space by updating ring pointers. First it fills ena_netmap_ctx. Then it performs two actions: * ena_netmap_rx_frames moves received frames from NIC to NETMAP ring, * ena_netmap_rx_cleanup fills NIC ring with slots released by userspace app.
In case of Rx error that could be handled by NIC driver (for example by performing reset) rx sync should return 0.
ena_netmap_rx_frames first checks if NETMAP ring is in consistent state and then in the loop receives new frames. When all available frames are taken nr_hwtail is updated.
Receiving one frame is handled by ena_netmap_rx_frame. If no error occurrs, each Descriptor is loaded by ena_netmap_rx_load_desc function. If packets take more than one segments NS_MOREFRAG flag must be set in all, but not last slot. In case of wrong req_id packet is removed from NETMAP ring. If packet is successful received counters are updated.
Refiling of NIC ring is performed by ena_netmap_rx_cleanup function. It calculates number of available slots and call ena_refill_rx_bufs with proper number.
Differential Revision: https://reviews.freebsd.org/D21935 Submitted by: Rafal Kozik <rk@semihalf.com> Michal Krawczyk <mk@semihalf.com> Obtained from: Semihalf Sponsored by: Amazon, Inc.
show more ...
|
#
38c7b965 |
| 31-Oct-2019 |
Marcin Wojtas <mw@FreeBSD.org> |
Split Rx/Tx from initialization code in ENA driver
Move Rx/Tx routines to separate file. Some functions: * ena_restore_device, * ena_destroy_device, * ena_up, * ena_down, * ena_refill_rx_bufs could
Split Rx/Tx from initialization code in ENA driver
Move Rx/Tx routines to separate file. Some functions: * ena_restore_device, * ena_destroy_device, * ena_up, * ena_down, * ena_refill_rx_bufs could be reused in upcoming netmap code in the driver. To make it possible, they were moved to ena.h header.
Differential Revision: https://reviews.freebsd.org/D21933 Submitted by: Rafal Kozik <rk@semihalf.com> Obtained from: Semihalf Sponsored by: Amazon, Inc.
show more ...
|