[ovs-dev] [v15 02/10] dpif-netdev: Add function pointer for netdev input.
Cian Ferriter
cian.ferriter at intel.com
Thu Jul 8 14:02:32 UTC 2021
From: Harry van Haaren <harry.van.haaren at intel.com>
This commit adds a function pointer to the pmd thread data structure,
giving the pmd thread flexibility in its dpif-input function choice.
This allows choosing of the implementation based on ISA capabilities
of the runtime CPU, leading to optimizations and higher performance.
Signed-off-by: Harry van Haaren <harry.van.haaren at intel.com>
Co-authored-by: Cian Ferriter <cian.ferriter at intel.com>
Signed-off-by: Cian Ferriter <cian.ferriter at intel.com>
Acked-by: Flavio Leitner <fbl at sysclose.org>
---
v15:
- Added Flavio's Acked-by tag.
v14:
- Add ATOMIC macro to netdev_input_func function pointer in struct
dp_netdev_pmd_thread.
v13:
- Minor code refactor to address review comments.
---
lib/dpif-netdev-private-thread.h | 10 ++++++++++
lib/dpif-netdev.c | 7 ++++++-
2 files changed, 16 insertions(+), 1 deletion(-)
diff --git a/lib/dpif-netdev-private-thread.h b/lib/dpif-netdev-private-thread.h
index 91f3753d1..d38a7a2c3 100644
--- a/lib/dpif-netdev-private-thread.h
+++ b/lib/dpif-netdev-private-thread.h
@@ -47,6 +47,13 @@ struct dp_netdev_pmd_thread_ctx {
uint32_t emc_insert_min;
};
+/* Forward declaration for typedef. */
+struct dp_netdev_pmd_thread;
+
+typedef void (*dp_netdev_input_func)(struct dp_netdev_pmd_thread *pmd,
+ struct dp_packet_batch *packets,
+ odp_port_t port_no);
+
/* PMD: Poll modes drivers. PMD accesses devices via polling to eliminate
* the performance overhead of interrupt processing. Therefore netdev can
* not implement rx-wait for these devices. dpif-netdev needs to poll
@@ -101,6 +108,9 @@ struct dp_netdev_pmd_thread {
/* Current context of the PMD thread. */
struct dp_netdev_pmd_thread_ctx ctx;
+ /* Function pointer to call for dp_netdev_input() functionality. */
+ ATOMIC(dp_netdev_input_func) netdev_input_func;
+
struct seq *reload_seq;
uint64_t last_reload_seq;
diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
index b9fb84681..b89fcd276 100644
--- a/lib/dpif-netdev.c
+++ b/lib/dpif-netdev.c
@@ -4286,8 +4286,9 @@ dp_netdev_process_rxq_port(struct dp_netdev_pmd_thread *pmd,
}
}
}
+
/* Process packet batch. */
- dp_netdev_input(pmd, &batch, port_no);
+ pmd->netdev_input_func(pmd, &batch, port_no);
/* Assign processing cycles to rx queue. */
cycles = cycle_timer_stop(&pmd->perf_stats, &timer);
@@ -6088,6 +6089,10 @@ dp_netdev_configure_pmd(struct dp_netdev_pmd_thread *pmd, struct dp_netdev *dp,
hmap_init(&pmd->tnl_port_cache);
hmap_init(&pmd->send_port_cache);
cmap_init(&pmd->tx_bonds);
+
+ /* Initialize the DPIF function pointer to the default scalar version. */
+ pmd->netdev_input_func = dp_netdev_input;
+
/* init the 'flow_cache' since there is no
* actual thread created for NON_PMD_CORE_ID. */
if (core_id == NON_PMD_CORE_ID) {
--
2.32.0
More information about the dev
mailing list