Atomic variables must be read atomically. And since we already have 'smc_enable_db' in the PMD context, we need to use it from there to avoid reading atomically twice.
Also, 'smc_enable_db' is a global configuration, there is no need to read it per-port or per-rxq. CC: Harry van Haaren <[email protected]> Fixes: 9ac84a1a3698 ("dpif-avx512: Add ISA implementation of dpif.") Signed-off-by: Ilya Maximets <[email protected]> --- lib/dpif-netdev.c | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c index 59e326f11..d97c5756f 100644 --- a/lib/dpif-netdev.c +++ b/lib/dpif-netdev.c @@ -3078,11 +3078,9 @@ smc_insert(struct dp_netdev_pmd_thread *pmd, struct smc_bucket *bucket = &smc_cache->buckets[key->hash & SMC_MASK]; uint16_t index; uint32_t cmap_index; - bool smc_enable_db; int i; - atomic_read_relaxed(&pmd->dp->smc_enable_db, &smc_enable_db); - if (!smc_enable_db) { + if (!pmd->ctx.smc_enable_db) { return; } @@ -5915,6 +5913,9 @@ dpif_netdev_run(struct dpif *dpif) non_pmd = dp_netdev_get_pmd(dp, NON_PMD_CORE_ID); if (non_pmd) { ovs_mutex_lock(&dp->non_pmd_mutex); + + atomic_read_relaxed(&dp->smc_enable_db, &non_pmd->ctx.smc_enable_db); + HMAP_FOR_EACH (port, node, &dp->ports) { if (!netdev_is_pmd(port->netdev)) { int i; @@ -5926,8 +5927,6 @@ dpif_netdev_run(struct dpif *dpif) non_pmd->ctx.emc_insert_min = 0; } - non_pmd->ctx.smc_enable_db = dp->smc_enable_db; - for (i = 0; i < port->n_rxq; i++) { if (!netdev_rxq_enabled(port->rxqs[i].rx)) { @@ -6190,6 +6189,8 @@ reload: pmd_perf_start_iteration(s); + atomic_read_relaxed(&pmd->dp->smc_enable_db, &pmd->ctx.smc_enable_db); + for (i = 0; i < poll_cnt; i++) { if (!poll_list[i].rxq_enabled) { @@ -6203,8 +6204,6 @@ reload: pmd->ctx.emc_insert_min = 0; } - pmd->ctx.smc_enable_db = pmd->dp->smc_enable_db; - process_packets = dp_netdev_process_rxq_port(pmd, poll_list[i].rxq, poll_list[i].port_no); @@ -7328,11 +7327,9 @@ dfc_processing(struct dp_netdev_pmd_thread *pmd, const bool netdev_flow_api = netdev_is_flow_api_enabled(); int i; uint16_t tcp_flags; - bool smc_enable_db; size_t map_cnt = 0; bool batch_enable = true; - atomic_read_relaxed(&pmd->dp->smc_enable_db, &smc_enable_db); pmd_perf_update_counter(&pmd->perf_stats, md_is_valid ? PMD_STAT_RECIRC : PMD_STAT_RECV, cnt); @@ -7434,7 +7431,7 @@ dfc_processing(struct dp_netdev_pmd_thread *pmd, n_mfex_opt_hit); pmd_perf_update_counter(&pmd->perf_stats, PMD_STAT_EXACT_HIT, n_emc_hit); - if (!smc_enable_db) { + if (!pmd->ctx.smc_enable_db) { return dp_packet_batch_size(packets_); } -- 2.31.1 _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
