aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatias Elo <matias.elo@nokia.com>2022-03-10 17:14:19 +0200
committerMatias Elo <matias.elo@nokia.com>2022-04-22 15:34:32 +0300
commit08d832130f551b12aa64abf6460768f6708c7ed4 (patch)
tree2c50c7fa603bb16e19f8a51b4fb2febc2d3cf885
parent566e14b83a6a9727608318b299cb8271a2e78bb4 (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.conf6
-rw-r--r--platform/linux-dpdk/include/odp_packet_io_internal.h15
-rw-r--r--platform/linux-dpdk/m4/odp_libconfig.m42
-rw-r--r--platform/linux-dpdk/test/alternate-timer.conf2
-rw-r--r--platform/linux-dpdk/test/crypto.conf2
-rw-r--r--platform/linux-dpdk/test/sched-basic.conf2
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: {