David Marchand <david.march...@redhat.com> writes: > Subject: Re: [PATCH v2 1/4] eal: use C11 atomic builtins for already > initialized > check > > On Wed, Sep 16, 2020 at 10:24 AM Phil Yang <phil.y...@arm.com> wrote: > > > > Since rte_atomicXX APIs are not allowed to be used, use C11 builtins to > > check if EAL is already initialized. > > > > Signed-off-by: Phil Yang <phil.y...@arm.com> > > Reviewed-by: Honnappa Nagarahalli <honnappa.nagaraha...@arm.com> > > Reviewed-by: Ruifeng Wang <ruifeng.w...@arm.com> > > --- > > lib/librte_eal/freebsd/eal.c | 18 ++++++++++-------- > > lib/librte_eal/linux/eal.c | 20 +++++++++++--------- > > 2 files changed, 21 insertions(+), 17 deletions(-) > > > > diff --git a/lib/librte_eal/freebsd/eal.c b/lib/librte_eal/freebsd/eal.c > > index 798add0..9f4c7bb 100644 > > --- a/lib/librte_eal/freebsd/eal.c > > +++ b/lib/librte_eal/freebsd/eal.c > > @@ -665,7 +665,8 @@ rte_eal_init(int argc, char **argv) > > { > > int i, fctret, ret; > > pthread_t thread_id; > > - static rte_atomic32_t run_once = RTE_ATOMIC32_INIT(0); > > + static uint32_t run_once; > > + uint32_t has_run = 0; > > char cpuset[RTE_CPU_AFFINITY_STR_LEN]; > > char thread_name[RTE_MAX_THREAD_NAME_LEN]; > > const struct rte_config *config = rte_eal_get_configuration(); > > @@ -679,7 +680,8 @@ rte_eal_init(int argc, char **argv) > > return -1; > > } > > > > - if (!rte_atomic32_test_and_set(&run_once)) { > > + if (!__atomic_compare_exchange_n(&run_once, &has_run, 1, 0, > > + __ATOMIC_RELAXED, > > __ATOMIC_RELAXED)) { > > rte_eal_init_alert("already called initialization."); > > rte_errno = EALREADY; > > return -1; > > @@ -705,7 +707,7 @@ rte_eal_init(int argc, char **argv) > > if (fctret < 0) { > > rte_eal_init_alert("Invalid 'command line' arguments."); > > rte_errno = EINVAL; > > - rte_atomic32_clear(&run_once); > > + __atomic_store_n(&run_once, 0, __ATOMIC_RELAXED); > > return -1; > > } > > > > @@ -715,20 +717,20 @@ rte_eal_init(int argc, char **argv) > > if (eal_plugins_init() < 0) { > > rte_eal_init_alert("Cannot init plugins"); > > rte_errno = EINVAL; > > - rte_atomic32_clear(&run_once); > > + __atomic_store_n(&run_once, 0, __ATOMIC_RELAXED); > > return -1; > > } > > > > if (eal_trace_init() < 0) { > > rte_eal_init_alert("Cannot init trace"); > > rte_errno = EFAULT; > > - rte_atomic32_clear(&run_once); > > + __atomic_store_n(&run_once, 0, __ATOMIC_RELAXED); > > return -1; > > } > > > > if (eal_option_device_parse()) { > > rte_errno = ENODEV; > > - rte_atomic32_clear(&run_once); > > + __atomic_store_n(&run_once, 0, __ATOMIC_RELAXED); > > return -1; > > } > > > > @@ -762,7 +764,7 @@ rte_eal_init(int argc, char **argv) > > if (rte_bus_scan()) { > > rte_eal_init_alert("Cannot scan the buses for devices"); > > rte_errno = ENODEV; > > - rte_atomic32_clear(&run_once); > > + __atomic_store_n(&run_once, 0, __ATOMIC_RELAXED); > > return -1; > > } > > > > @@ -790,7 +792,7 @@ rte_eal_init(int argc, char **argv) > > if (ret < 0) { > > rte_eal_init_alert("Cannot get hugepage > > information."); > > rte_errno = EACCES; > > - rte_atomic32_clear(&run_once); > > + __atomic_store_n(&run_once, 0, __ATOMIC_RELAXED); > > return -1; > > } > > } > > diff --git a/lib/librte_eal/linux/eal.c b/lib/librte_eal/linux/eal.c > > index 0960f01..82a73ed 100644 > > --- a/lib/librte_eal/linux/eal.c > > +++ b/lib/librte_eal/linux/eal.c > > @@ -960,7 +960,8 @@ rte_eal_init(int argc, char **argv) > > { > > int i, fctret, ret; > > pthread_t thread_id; > > - static rte_atomic32_t run_once = RTE_ATOMIC32_INIT(0); > > + static uint32_t run_once; > > + uint32_t has_run = 0; > > const char *p; > > static char logid[PATH_MAX]; > > char cpuset[RTE_CPU_AFFINITY_STR_LEN]; > > @@ -977,7 +978,8 @@ rte_eal_init(int argc, char **argv) > > return -1; > > } > > > > - if (!rte_atomic32_test_and_set(&run_once)) { > > + if (!__atomic_compare_exchange_n(&run_once, &has_run, 1, 0, > > + __ATOMIC_RELAXED, > > __ATOMIC_RELAXED)) { > > rte_eal_init_alert("already called initialization."); > > rte_errno = EALREADY; > > return -1; > > @@ -1005,14 +1007,14 @@ rte_eal_init(int argc, char **argv) > > if (fctret < 0) { > > rte_eal_init_alert("Invalid 'command line' arguments."); > > rte_errno = EINVAL; > > - rte_atomic32_clear(&run_once); > > + __atomic_store_n(&run_once, 0, __ATOMIC_RELAXED); > > return -1; > > } > > > > if (eal_plugins_init() < 0) { > > rte_eal_init_alert("Cannot init plugins"); > > rte_errno = EINVAL; > > - rte_atomic32_clear(&run_once); > > + __atomic_store_n(&run_once, 0, __ATOMIC_RELAXED); > > return -1; > > } > > > > @@ -1024,7 +1026,7 @@ rte_eal_init(int argc, char **argv) > > > > if (eal_option_device_parse()) { > > rte_errno = ENODEV; > > - rte_atomic32_clear(&run_once); > > + __atomic_store_n(&run_once, 0, __ATOMIC_RELAXED); > > return -1; > > } > > > > @@ -1064,7 +1066,7 @@ rte_eal_init(int argc, char **argv) > > if (rte_bus_scan()) { > > rte_eal_init_alert("Cannot scan the buses for devices"); > > rte_errno = ENODEV; > > - rte_atomic32_clear(&run_once); > > + __atomic_store_n(&run_once, 0, __ATOMIC_RELAXED); > > return -1; > > } > > > > @@ -1138,7 +1140,7 @@ rte_eal_init(int argc, char **argv) > > if (ret < 0) { > > rte_eal_init_alert("Cannot get hugepage > > information."); > > rte_errno = EACCES; > > - rte_atomic32_clear(&run_once); > > + __atomic_store_n(&run_once, 0, __ATOMIC_RELAXED); > > return -1; > > } > > } > > @@ -1162,7 +1164,7 @@ rte_eal_init(int argc, char **argv) > > if (rte_eal_log_init(logid, internal_conf->syslog_facility) < 0) { > > rte_eal_init_alert("Cannot init logging."); > > rte_errno = ENOMEM; > > - rte_atomic32_clear(&run_once); > > + __atomic_store_n(&run_once, 0, __ATOMIC_RELAXED); > > return -1; > > } > > > > @@ -1170,7 +1172,7 @@ rte_eal_init(int argc, char **argv) > > if (rte_eal_vfio_setup() < 0) { > > rte_eal_init_alert("Cannot init VFIO"); > > rte_errno = EAGAIN; > > - rte_atomic32_clear(&run_once); > > + __atomic_store_n(&run_once, 0, __ATOMIC_RELAXED); > > return -1; > > } > > #endif > > -- > > 2.7.4 > > > > I see no reason to include rte_atomic.h in those files after this patch. > Did I miss something?
No, it is not needed anymore. Will remove them. Thanks, Phil > > > -- > David Marchand