mirror of
https://github.com/openvswitch/ovs
synced 2025-08-31 14:25:26 +00:00
dpif-netdev: Add function pointer for netdev input.
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@intel.com> Co-authored-by: Cian Ferriter <cian.ferriter@intel.com> Signed-off-by: Cian Ferriter <cian.ferriter@intel.com> Acked-by: Flavio Leitner <fbl@sysclose.org> Signed-off-by: Ian Stokes <ian.stokes@intel.com>
This commit is contained in:
committed by
Ian Stokes
parent
5930dfeeb2
commit
e540499e4f
@@ -47,6 +47,13 @@ struct dp_netdev_pmd_thread_ctx {
|
|||||||
uint32_t emc_insert_min;
|
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
|
/* PMD: Poll modes drivers. PMD accesses devices via polling to eliminate
|
||||||
* the performance overhead of interrupt processing. Therefore netdev can
|
* the performance overhead of interrupt processing. Therefore netdev can
|
||||||
* not implement rx-wait for these devices. dpif-netdev needs to poll
|
* 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. */
|
/* Current context of the PMD thread. */
|
||||||
struct dp_netdev_pmd_thread_ctx ctx;
|
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;
|
struct seq *reload_seq;
|
||||||
uint64_t last_reload_seq;
|
uint64_t last_reload_seq;
|
||||||
|
|
||||||
|
@@ -4286,8 +4286,9 @@ dp_netdev_process_rxq_port(struct dp_netdev_pmd_thread *pmd,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Process packet batch. */
|
/* Process packet batch. */
|
||||||
dp_netdev_input(pmd, &batch, port_no);
|
pmd->netdev_input_func(pmd, &batch, port_no);
|
||||||
|
|
||||||
/* Assign processing cycles to rx queue. */
|
/* Assign processing cycles to rx queue. */
|
||||||
cycles = cycle_timer_stop(&pmd->perf_stats, &timer);
|
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->tnl_port_cache);
|
||||||
hmap_init(&pmd->send_port_cache);
|
hmap_init(&pmd->send_port_cache);
|
||||||
cmap_init(&pmd->tx_bonds);
|
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
|
/* init the 'flow_cache' since there is no
|
||||||
* actual thread created for NON_PMD_CORE_ID. */
|
* actual thread created for NON_PMD_CORE_ID. */
|
||||||
if (core_id == NON_PMD_CORE_ID) {
|
if (core_id == NON_PMD_CORE_ID) {
|
||||||
|
Reference in New Issue
Block a user