hash_init(esw->offloads.encap_tbl);
        hash_init(esw->offloads.mod_hdr_tbl);
+       atomic64_set(&esw->offloads.num_flows, 0);
        mutex_init(&esw->state_lock);
 
        mlx5_esw_for_all_vports(esw, i, vport) {
 
 
 #include <linux/if_ether.h>
 #include <linux/if_link.h>
+#include <linux/atomic.h>
 #include <net/devlink.h>
 #include <linux/mlx5/device.h>
 #include <linux/mlx5/eswitch.h>
        struct mutex termtbl_mutex; /* protects termtbl hash */
        const struct mlx5_eswitch_rep_ops *rep_ops[NUM_REP_TYPES];
        u8 inline_mode;
-       u64 num_flows;
+       atomic64_t num_flows;
        enum devlink_eswitch_encap_mode encap;
 };
 
 
        if (IS_ERR(rule))
                goto err_add_rule;
        else
-               esw->offloads.num_flows++;
+               atomic64_inc(&esw->offloads.num_flows);
 
        return rule;
 
        if (IS_ERR(rule))
                goto add_err;
 
-       esw->offloads.num_flows++;
+       atomic64_inc(&esw->offloads.num_flows);
 
        return rule;
 add_err:
                        mlx5_eswitch_termtbl_put(esw, attr->dests[i].termtbl);
        }
 
-       esw->offloads.num_flows--;
+       atomic64_dec(&esw->offloads.num_flows);
 
        if (fwd_rule)  {
                esw_put_prio_table(esw, attr->chain, attr->prio, 1);
                break;
        }
 
-       if (esw->offloads.num_flows > 0) {
+       if (atomic64_read(&esw->offloads.num_flows) > 0) {
                NL_SET_ERR_MSG_MOD(extack,
                                   "Can't set inline mode when flows are configured");
                return -EOPNOTSUPP;
        if (esw->offloads.encap == encap)
                return 0;
 
-       if (esw->offloads.num_flows > 0) {
+       if (atomic64_read(&esw->offloads.num_flows) > 0) {
                NL_SET_ERR_MSG_MOD(extack,
                                   "Can't set encapsulation when flows are configured");
                return -EOPNOTSUPP;