From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id C1303A04B1; Wed, 23 Sep 2020 15:07:05 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id A212D1D92A; Wed, 23 Sep 2020 15:07:04 +0200 (CEST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by dpdk.org (Postfix) with ESMTP id B6A4E1D37F for ; Wed, 23 Sep 2020 15:07:03 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1600866423; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=i+vesGzgT2Q4kxCTP2t22qKUNDr752RTahcFbb6M5Bo=; b=Ro8athfKO2OJDOX+W4CnO8+9tBDI6sdtJZP5lZi7f7oEqs/drGRoK5wKl44uA8jwAAtn1V ihxsJfSShLSogkMJH16xvOGX3EfeqLkYvG5oh28p+TBWVihTMiVEXORDzhi5kRLfLg/h2r agqfKgjNKdOB5V0E+/xqeRzT1iZb9yY= Received: from mail-vs1-f70.google.com (mail-vs1-f70.google.com [209.85.217.70]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-159-N74h_vSIP62AYVfEqV967w-1; Wed, 23 Sep 2020 09:07:01 -0400 X-MC-Unique: N74h_vSIP62AYVfEqV967w-1 Received: by mail-vs1-f70.google.com with SMTP id u12so2134685vsh.18 for ; Wed, 23 Sep 2020 06:07:01 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=i+vesGzgT2Q4kxCTP2t22qKUNDr752RTahcFbb6M5Bo=; b=hGoJ/vhIqE4IiZReI5Vd2KpjS8n72z4nblsjdBxWoe+1nzvvhOG7li+CI8jA4V75+O 9St1x90rc9HOmDoUuOJdcNgtOfbCMcwRKWBTfRJk6oD4Wa6ewsVupz/hR1byfb3yamxj OQSsTNdUSDpFgb35hl02qEDLJshQEVZFg68M/MavnhuU5Bt0NJPfpeK22ChLOD0DwRDL eXmhDhomecV4lSWUEkN7UA6MdtNu6brJ9CubzkaMh2LKfQ8U9wIEeLR687pzTVdbd9PZ OCH2SeauRFJlhLzCKD0O8VBYMFzSjXMEi89r3BS5+/GLwDVzY6O+oYyplonjTmEPVUmt Er6Q== X-Gm-Message-State: AOAM531M8dbJ24d/MQhLZdlkyDPiYj0YIUK++7zifokbW8No20sXDcZI w7Iub0EuzqGPX6PQNog9AUSFaxrqgOoH5OPwOXiQTQdEQRLmOoQ5O03Amjh8xJb6D0ir7Ecwbju TNIuChGcj6z3Ohr4n6Y0= X-Received: by 2002:a67:e2c2:: with SMTP id i2mr6881673vsm.27.1600866420114; Wed, 23 Sep 2020 06:07:00 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwEnTcf5O+6QIAqTkpXNguHvKNjzdWebOxAubHfY2E9nxbKSELj5xrJHiH3gnbx5zRWYCUn7HsKHHOillvjRG8= X-Received: by 2002:a67:e2c2:: with SMTP id i2mr6881631vsm.27.1600866419772; Wed, 23 Sep 2020 06:06:59 -0700 (PDT) MIME-Version: 1.0 References: <1599794967-17500-1-git-send-email-phil.yang@arm.com> <1600244628-13062-1-git-send-email-phil.yang@arm.com> <1600244628-13062-2-git-send-email-phil.yang@arm.com> In-Reply-To: <1600244628-13062-2-git-send-email-phil.yang@arm.com> From: David Marchand Date: Wed, 23 Sep 2020 15:06:48 +0200 Message-ID: To: Phil Yang Cc: dev , Honnappa Nagarahalli , "Ruifeng Wang (Arm Technology China)" , nd , Bruce Richardson Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=dmarchan@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="UTF-8" Subject: Re: [dpdk-dev] [PATCH v2 1/4] eal: use C11 atomic builtins for already initialized check X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" On Wed, Sep 16, 2020 at 10:24 AM Phil Yang 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 > Reviewed-by: Honnappa Nagarahalli > Reviewed-by: Ruifeng Wang > --- > 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? -- David Marchand