diff options
author | Matias Elo <matias.elo@nokia.com> | 2022-03-10 17:14:19 +0200 |
---|---|---|
committer | Matias Elo <matias.elo@nokia.com> | 2022-04-22 15:34:32 +0300 |
commit | 08d832130f551b12aa64abf6460768f6708c7ed4 (patch) | |
tree | 2c50c7fa603bb16e19f8a51b4fb2febc2d3cf885 | |
parent | 566e14b83a6a9727608318b299cb8271a2e78bb4 (diff) |
Port 5c68df252 "linux-gen: pktio: implement tx completion event"
Port original commit from linux-generic.
Signed-off-by: Matias Elo <matias.elo@nokia.com>
Reviewed-by: Jere Leppänen <jere.leppanen@nokia.com>
-rw-r--r-- | config/odp-linux-dpdk.conf | 6 | ||||
-rw-r--r-- | platform/linux-dpdk/include/odp_packet_io_internal.h | 15 | ||||
-rw-r--r-- | platform/linux-dpdk/m4/odp_libconfig.m4 | 2 | ||||
-rw-r--r-- | platform/linux-dpdk/test/alternate-timer.conf | 2 | ||||
-rw-r--r-- | platform/linux-dpdk/test/crypto.conf | 2 | ||||
-rw-r--r-- | platform/linux-dpdk/test/sched-basic.conf | 2 |
6 files changed, 24 insertions, 5 deletions
diff --git a/config/odp-linux-dpdk.conf b/config/odp-linux-dpdk.conf index 5ebdba26c..89d50d034 100644 --- a/config/odp-linux-dpdk.conf +++ b/config/odp-linux-dpdk.conf @@ -16,7 +16,7 @@ # Mandatory fields odp_implementation = "linux-dpdk" -config_file_version = "0.1.16" +config_file_version = "0.1.17" # System options system: { @@ -90,6 +90,10 @@ pool: { pktio: { # Not supported by ODP-DPDK! pktin_frame_offset = 0 + + # Pool size allocated for potential completion events for transmitted and + # dropped packets. Separate pool for different packet IO instances. + tx_compl_pool_size = 1024 } # DPDK pktio options diff --git a/platform/linux-dpdk/include/odp_packet_io_internal.h b/platform/linux-dpdk/include/odp_packet_io_internal.h index 65c2fa166..1d2f792c5 100644 --- a/platform/linux-dpdk/include/odp_packet_io_internal.h +++ b/platform/linux-dpdk/include/odp_packet_io_internal.h @@ -73,6 +73,8 @@ struct pktio_entry { uint8_t cls : 1; /* Tx timestamp */ uint8_t tx_ts : 1; + /* Tx completion events */ + uint8_t tx_compl : 1; }; }; } enabled; @@ -118,6 +120,9 @@ struct pktio_entry { odp_pktio_param_t param; odp_pktio_capability_t capa; /**< Packet IO capabilities */ + /* Pool for Tx completion events */ + odp_pool_t tx_compl_pool; + /* Storage for queue handles * Multi-queue support is pktio driver specific */ unsigned num_in_queue; @@ -164,6 +169,8 @@ typedef struct { struct { /* Frame start offset from base pointer at packet input */ uint16_t pktin_frame_offset; + /* Pool size for potential completion events */ + uint32_t tx_compl_pool_size; } config; pktio_entry_t entries[ODP_CONFIG_PKTIO_ENTRIES]; @@ -264,6 +271,11 @@ static inline int _odp_pktio_tx_ts_enabled(pktio_entry_t *entry) return entry->s.enabled.tx_ts; } +static inline int _odp_pktio_tx_compl_enabled(const pktio_entry_t *entry) +{ + return entry->s.enabled.tx_compl; +} + static inline void _odp_pktio_tx_ts_set(pktio_entry_t *entry) { odp_time_t ts_val = odp_time_global(); @@ -305,6 +317,9 @@ int _odp_lso_create_packets(odp_packet_t packet, const odp_packet_lso_opt_t *lso uint32_t payload_len, uint32_t left_over_len, odp_packet_t pkt_out[], int num_pkt); +void _odp_pktio_allocate_and_send_tx_compl_events(const pktio_entry_t *entry, + const odp_packet_t packets[], int num); + #ifdef __cplusplus } #endif diff --git a/platform/linux-dpdk/m4/odp_libconfig.m4 b/platform/linux-dpdk/m4/odp_libconfig.m4 index ef85e20b1..b4bfdd719 100644 --- a/platform/linux-dpdk/m4/odp_libconfig.m4 +++ b/platform/linux-dpdk/m4/odp_libconfig.m4 @@ -3,7 +3,7 @@ ########################################################################## m4_define([_odp_config_version_generation], [0]) m4_define([_odp_config_version_major], [1]) -m4_define([_odp_config_version_minor], [16]) +m4_define([_odp_config_version_minor], [17]) m4_define([_odp_config_version], [_odp_config_version_generation._odp_config_version_major._odp_config_version_minor]) diff --git a/platform/linux-dpdk/test/alternate-timer.conf b/platform/linux-dpdk/test/alternate-timer.conf index 0a3aad603..bb884013c 100644 --- a/platform/linux-dpdk/test/alternate-timer.conf +++ b/platform/linux-dpdk/test/alternate-timer.conf @@ -1,6 +1,6 @@ # Mandatory fields odp_implementation = "linux-dpdk" -config_file_version = "0.1.16" +config_file_version = "0.1.17" timer: { # Enable alternate DPDK timer implementation diff --git a/platform/linux-dpdk/test/crypto.conf b/platform/linux-dpdk/test/crypto.conf index 3e0a10796..413e7a043 100644 --- a/platform/linux-dpdk/test/crypto.conf +++ b/platform/linux-dpdk/test/crypto.conf @@ -1,6 +1,6 @@ # Mandatory fields odp_implementation = "linux-dpdk" -config_file_version = "0.1.16" +config_file_version = "0.1.17" system: { # One crypto queue pair is required per thread for lockless operation diff --git a/platform/linux-dpdk/test/sched-basic.conf b/platform/linux-dpdk/test/sched-basic.conf index 0f450f7a3..7093cd810 100644 --- a/platform/linux-dpdk/test/sched-basic.conf +++ b/platform/linux-dpdk/test/sched-basic.conf @@ -1,6 +1,6 @@ # Mandatory fields odp_implementation = "linux-dpdk" -config_file_version = "0.1.16" +config_file_version = "0.1.17" # Test scheduler with an odd spread value and without dynamic load balance sched_basic: { |