From patchwork Thu Mar 12 07:44:28 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Phil Yang X-Patchwork-Id: 184433 Delivered-To: patch@linaro.org Received: by 2002:a92:1f12:0:0:0:0:0 with SMTP id i18csp232024ile; Thu, 12 Mar 2020 00:46:58 -0700 (PDT) X-Google-Smtp-Source: ADFU+vsjgR3+xL75whVD5x1+CHFyXyoCAXt6cSrxYXd9ftXZ6DGR1CgN7cOw9xXexj+V+bvf2xBc X-Received: by 2002:a05:6402:2290:: with SMTP id cw16mr6111566edb.75.1583999218466; Thu, 12 Mar 2020 00:46:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1583999218; cv=none; d=google.com; s=arc-20160816; b=LlUFiaT5u8oTNFAb98wL3mtQaVTScah97b5HYidYWqlOWJMZufAjNmzQVHSqPdzfYj 053cL7+GUYOj+RWwYBuEyJeZt0bc8ESMOV5sS2HCBeqlZkUhFpkd2e7PPjT7Hr4GDesp UK/pzvWPkCuO1puza25UseR1edp9MvchEE9NXbQOrYawDH/Erq/ZnV9xhtwENY+RN0zZ ziDZiowG06talNKeifrLfBkP2RG7ZJJ4ChKicNBm0/AaDWzsGwuhwRcBU1mjnyDr+XiV 9Oaq0xYdekpicGWL8NvbwSepz2wxzuIGzUx+9jA1N36mY0yWYy3hQ1UKbdBKXBGY2XN3 LvQw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject:references:in-reply-to :message-id:date:cc:to:from; bh=afOexwouZwh/k6jwnmZHOO/4VzlfSmiFNPJFKetqvOM=; b=1FoJ0Bu43+ZdomKlTzYc7Huf4Iv0LI2BbKIg55sm7mYHwo5TgIgbD6CmJN0oyzH0aP vWVGA0fDvAk+eDXOHIwyc6em8GE+rnicJS3ZoN8RTLyPtcsPMVYQld483mDPWY6oIDML xgbNbSQs0uzFPyep9DE2ZOUoGju5/7kOWy1MJTyldraeZdfVKHE3QzJpC9QrLuNqwlPk uzSAOZqfg4ViCImiZ/YV1VkC6BK4Zz3zm7NOB9wEbbsX7upQ0dAHs9t9WXaXkuuvbwoq Al4PbPHgP8zIrAFIerE/FGidnPB5E7SwLeBeISOQdVXkn3Z+cxddY/miCjgH4DCM3uxO Qfkg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of dev-bounces@dpdk.org designates 92.243.14.124 as permitted sender) smtp.mailfrom=dev-bounces@dpdk.org Return-Path: Received: from dpdk.org (dpdk.org. [92.243.14.124]) by mx.google.com with ESMTP id b18si2996214edx.60.2020.03.12.00.46.58; Thu, 12 Mar 2020 00:46:58 -0700 (PDT) Received-SPF: pass (google.com: domain of dev-bounces@dpdk.org designates 92.243.14.124 as permitted sender) client-ip=92.243.14.124; Authentication-Results: mx.google.com; spf=pass (google.com: domain of dev-bounces@dpdk.org designates 92.243.14.124 as permitted sender) smtp.mailfrom=dev-bounces@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 1F81F1C065; Thu, 12 Mar 2020 08:45:59 +0100 (CET) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by dpdk.org (Postfix) with ESMTP id 146721C05C; Thu, 12 Mar 2020 08:45:58 +0100 (CET) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 9344E30E; Thu, 12 Mar 2020 00:45:57 -0700 (PDT) Received: from phil-VirtualBox.shanghai.arm.com (phil-VirtualBox.shanghai.arm.com [10.169.109.150]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 1C68F3F534; Thu, 12 Mar 2020 00:45:52 -0700 (PDT) From: Phil Yang To: thomas@monjalon.net, harry.van.haaren@intel.com, konstantin.ananyev@intel.com, stephen@networkplumber.org, maxime.coquelin@redhat.com, dev@dpdk.org Cc: david.marchand@redhat.com, jerinj@marvell.com, hemant.agrawal@nxp.com, Honnappa.Nagarahalli@arm.com, gavin.hu@arm.com, ruifeng.wang@arm.com, joyce.kong@arm.com, nd@arm.com, Honnappa Nagarahalli , stable@dpdk.org Date: Thu, 12 Mar 2020 15:44:28 +0800 Message-Id: <1583999071-22872-8-git-send-email-phil.yang@arm.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1583999071-22872-1-git-send-email-phil.yang@arm.com> References: <1583862551-2049-1-git-send-email-phil.yang@arm.com> <1583999071-22872-1-git-send-email-phil.yang@arm.com> Subject: [dpdk-dev] [PATCH v2 07/10] service: avoid race condition for MT unsafe service 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" From: Honnappa Nagarahalli There has possible that a MT unsafe service might get configured to run on another core while the service is running currently. This might result in the MT unsafe service running on multiple cores simultaneously. Use 'execute_lock' always when the service is MT unsafe. Fixes: e9139a32f6e8 ("service: add function to run on app lcore") Cc: stable@dpdk.org Signed-off-by: Honnappa Nagarahalli Reviewed-by: Phil Yang Reviewed-by: Gavin Hu --- lib/librte_eal/common/rte_service.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) -- 2.7.4 diff --git a/lib/librte_eal/common/rte_service.c b/lib/librte_eal/common/rte_service.c index 6990dc2..b37fc56 100644 --- a/lib/librte_eal/common/rte_service.c +++ b/lib/librte_eal/common/rte_service.c @@ -50,6 +50,10 @@ struct rte_service_spec_impl { uint8_t internal_flags; /* per service statistics */ + /* Indicates how many cores the service is mapped to run on. + * It does not indicate the number of cores the service is running + * on currently. + */ rte_atomic32_t num_mapped_cores; uint64_t calls; uint64_t cycles_spent; @@ -367,12 +371,7 @@ service_run(uint32_t i, struct core_state *cs, uint64_t service_mask, cs->service_active_on_lcore[i] = 1; - /* check do we need cmpset, if MT safe or <= 1 core - * mapped, atomic ops are not required. - */ - const int use_atomics = (service_mt_safe(s) == 0) && - (rte_atomic32_read(&s->num_mapped_cores) > 1); - if (use_atomics) { + if (service_mt_safe(s) == 0) { if (!rte_atomic32_cmpset((uint32_t *)&s->execute_lock, 0, 1)) return -EBUSY; From patchwork Thu Mar 12 07:44:29 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Phil Yang X-Patchwork-Id: 184434 Delivered-To: patch@linaro.org Received: by 2002:a92:1f12:0:0:0:0:0 with SMTP id i18csp232230ile; Thu, 12 Mar 2020 00:47:15 -0700 (PDT) X-Google-Smtp-Source: ADFU+vtslD/yrHopz1apsrixYA/vra+cDhGvKpUYxT1+VDiByB5XTfrU82cS0/XWPlag1S6Xl8KT X-Received: by 2002:a17:906:1108:: with SMTP id h8mr5842795eja.178.1583999235247; Thu, 12 Mar 2020 00:47:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1583999235; cv=none; d=google.com; s=arc-20160816; b=nrnR2FEF4HGMKrx64+TfIq5dpDSRe4koUC5wj/ox6hG2AavnNAOYoBx0nxVBO5REVm 3Xl2DGn7QAb2QKGWtFRHwixf3YzoEgUVzOnANDNtpGFXZVabEyS+miHFmHy4afXDXP/6 zTwFHLkOEhnO4ekCX4hwrvlnNuxhz/Y3fwc/AHQQg65wWOPNmvGhc+slC8MypM37wffg QD43Ozuqz48T4sB1RFs5coLS9PYsshn7CW5hT54rHGUHuFIj7meCwqNhjEHK9bY5GSUy 72hqohDI4wKDusd3V+sI2Uu6ZL7QA4opIDAuMbypDT+b7i1Df1QduWvGuAXa2NfgyhRA b7Ww== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject:references:in-reply-to :message-id:date:cc:to:from; bh=A9saUY9jxsaWNPiTYtbeK59e82XEEk3N/P0FrHVjE78=; b=c9AvUnsE30CYU5iCuDoe/wMl/0boEiTSzUPMDMhnlCJnb7mmWd+2MCV+Pia+eNbzau vKULbrC4AFzFtfLgR64BT2h58kiTThMjx74xf13XNP+3YVXBHESn48Jazq7C2wl1tkq7 yaD/GJ5eNUY6rRwrvjfsRt1zv/Xe4lRVwAAHdekzWKQ3w5eKsQDu8R0ngOi4SH6y/VRC 5DT9qjGJty/rzvU8zx7tK6xFWm72WsLZJAwrgXRHLEYi82iKs4xmAUz101jDyVdFKRJX UWek1KawetKXGAWbirf7NrIML2mrWUyOwXJqH2ANNQFyet3xYZgJAXl+lWLrP4Weo6kQ dfNw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of dev-bounces@dpdk.org designates 92.243.14.124 as permitted sender) smtp.mailfrom=dev-bounces@dpdk.org Return-Path: Received: from dpdk.org (dpdk.org. [92.243.14.124]) by mx.google.com with ESMTP id dg5si2962701edb.44.2020.03.12.00.47.15; Thu, 12 Mar 2020 00:47:15 -0700 (PDT) Received-SPF: pass (google.com: domain of dev-bounces@dpdk.org designates 92.243.14.124 as permitted sender) client-ip=92.243.14.124; Authentication-Results: mx.google.com; spf=pass (google.com: domain of dev-bounces@dpdk.org designates 92.243.14.124 as permitted sender) smtp.mailfrom=dev-bounces@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 0FB021C06D; Thu, 12 Mar 2020 08:46:04 +0100 (CET) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by dpdk.org (Postfix) with ESMTP id 90B101C0AE; Thu, 12 Mar 2020 08:46:02 +0100 (CET) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 22978FEC; Thu, 12 Mar 2020 00:46:02 -0700 (PDT) Received: from phil-VirtualBox.shanghai.arm.com (phil-VirtualBox.shanghai.arm.com [10.169.109.150]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 092B53F534; Thu, 12 Mar 2020 00:45:57 -0700 (PDT) From: Phil Yang To: thomas@monjalon.net, harry.van.haaren@intel.com, konstantin.ananyev@intel.com, stephen@networkplumber.org, maxime.coquelin@redhat.com, dev@dpdk.org Cc: david.marchand@redhat.com, jerinj@marvell.com, hemant.agrawal@nxp.com, Honnappa.Nagarahalli@arm.com, gavin.hu@arm.com, ruifeng.wang@arm.com, joyce.kong@arm.com, nd@arm.com, Honnappa Nagarahalli , stable@dpdk.org Date: Thu, 12 Mar 2020 15:44:29 +0800 Message-Id: <1583999071-22872-9-git-send-email-phil.yang@arm.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1583999071-22872-1-git-send-email-phil.yang@arm.com> References: <1583862551-2049-1-git-send-email-phil.yang@arm.com> <1583999071-22872-1-git-send-email-phil.yang@arm.com> Subject: [dpdk-dev] [PATCH v2 08/10] service: identify service running on another core correctly 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" From: Honnappa Nagarahalli The logic to identify if the MT unsafe service is running on another core can return -EBUSY spuriously. In such cases, running the service becomes costlier than using atomic operations. Assume that the application passes the right parameters and reduces the number of instructions for all cases. Cc: stable@dpdk.org Signed-off-by: Honnappa Nagarahalli Reviewed-by: Phil Yang Reviewed-by: Gavin Hu --- lib/librte_eal/common/rte_service.c | 26 ++++++++------------------ 1 file changed, 8 insertions(+), 18 deletions(-) -- 2.7.4 diff --git a/lib/librte_eal/common/rte_service.c b/lib/librte_eal/common/rte_service.c index b37fc56..670f5a9 100644 --- a/lib/librte_eal/common/rte_service.c +++ b/lib/librte_eal/common/rte_service.c @@ -357,7 +357,7 @@ service_runner_do_callback(struct rte_service_spec_impl *s, /* Expects the service 's' is valid. */ static int32_t service_run(uint32_t i, struct core_state *cs, uint64_t service_mask, - struct rte_service_spec_impl *s) + struct rte_service_spec_impl *s, uint32_t serialize_mt_unsafe) { if (!s) return -EINVAL; @@ -371,7 +371,7 @@ service_run(uint32_t i, struct core_state *cs, uint64_t service_mask, cs->service_active_on_lcore[i] = 1; - if (service_mt_safe(s) == 0) { + if ((service_mt_safe(s) == 0) && (serialize_mt_unsafe == 1)) { if (!rte_atomic32_cmpset((uint32_t *)&s->execute_lock, 0, 1)) return -EBUSY; @@ -409,24 +409,14 @@ rte_service_run_iter_on_app_lcore(uint32_t id, uint32_t serialize_mt_unsafe) SERVICE_VALID_GET_OR_ERR_RET(id, s, -EINVAL); - /* Atomically add this core to the mapped cores first, then examine if - * we can run the service. This avoids a race condition between - * checking the value, and atomically adding to the mapped count. + /* Increment num_mapped_cores to indicate that the service + * is running on a core. */ - if (serialize_mt_unsafe) - rte_atomic32_inc(&s->num_mapped_cores); + rte_atomic32_inc(&s->num_mapped_cores); - if (service_mt_safe(s) == 0 && - rte_atomic32_read(&s->num_mapped_cores) > 1) { - if (serialize_mt_unsafe) - rte_atomic32_dec(&s->num_mapped_cores); - return -EBUSY; - } - - int ret = service_run(id, cs, UINT64_MAX, s); + int ret = service_run(id, cs, UINT64_MAX, s, serialize_mt_unsafe); - if (serialize_mt_unsafe) - rte_atomic32_dec(&s->num_mapped_cores); + rte_atomic32_dec(&s->num_mapped_cores); return ret; } @@ -446,7 +436,7 @@ service_runner_func(void *arg) if (!service_valid(i)) continue; /* return value ignored as no change to code flow */ - service_run(i, cs, service_mask, service_get(i)); + service_run(i, cs, service_mask, service_get(i), 1); } cs->loops++; From patchwork Tue Mar 17 01:17:40 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Phil Yang X-Patchwork-Id: 184604 Delivered-To: patch@linaro.org Received: by 2002:a92:1f12:0:0:0:0:0 with SMTP id i18csp3500786ile; Mon, 16 Mar 2020 18:19:55 -0700 (PDT) X-Google-Smtp-Source: ADFU+vvy7MQ6bhQLe7ZntpKIewJwuK0wudMqnjybwxAXCOuZTi4YBQwcgHgytuEgbOVcA2f7nWGr X-Received: by 2002:a05:600c:2105:: with SMTP id u5mr1817493wml.163.1584407995690; Mon, 16 Mar 2020 18:19:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1584407995; cv=none; d=google.com; s=arc-20160816; b=Yy4QqAwmdLbUFP9Y8sJ9sJKgxYmlTfIT2hlJvsdl4BgOKO2MjTk9lPAkeX0RmcJyfS tNwln7uZkiLw4x6ILyhmShFjRmf/WcNxVDXHTJENlJ4dEeFOcaCTsXdR7JVKs8W5oHU8 h39R4V4bq+9dC0BQ1h/SLSRT+CklypAXEkHmIA+zLWh6xYr7e6le/l2dvHkx7mGoSktj xkmnoIJUP9sSpbrOmyIObSl4noHNtLq1KO3OaFCpscQVEo2kmc08BF7WA/o2c4Bc0beu QIT3sw7apYEdbdZKlQQtrGvA6jAXhGjscZI153yg3lR5ae9tFYquQGlqg5VJyoc3ArOE l9Dg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject:references:in-reply-to :message-id:date:cc:to:from; bh=Ir3CD2MMynwSUbFf2m0Aya+rdH0xcmMe4Bb04YjI0YQ=; b=DcQdUqzibmZgOKDVgMy0Q01fch/OccBZ1Hdhs3IkuB48HU2mAMk92Y9/GDlB3diryZ B+HYT6shPXFMtyU6TnvjBbtWDY+VV7OgeA0uz4m9VGqsfWJ6UbUaQ6vULplZFFuHG4es NVkXYszv4bNg+AVxmXPL/ec5I3rga8oG82Es6Z/wdMgtsOM0trxzSDcoEHHA17TEUGB2 7AiLDp7kPRvQIXT33q/M1hX5mbNu8EWxsR83Gx6LBOXRF5HKlxG3hNuYCKUaqTMiuXWE iFqTXjMWLb2J+7V82fKLaDT1HftiKC029ZeptPkgQhjBmA+Jn25rAHPbb2GOpcehBeQ/ 8UxA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of dev-bounces@dpdk.org designates 92.243.14.124 as permitted sender) smtp.mailfrom=dev-bounces@dpdk.org Return-Path: Received: from dpdk.org (dpdk.org. [92.243.14.124]) by mx.google.com with ESMTP id m16si1042309wmi.143.2020.03.16.18.19.55; Mon, 16 Mar 2020 18:19:55 -0700 (PDT) Received-SPF: pass (google.com: domain of dev-bounces@dpdk.org designates 92.243.14.124 as permitted sender) client-ip=92.243.14.124; Authentication-Results: mx.google.com; spf=pass (google.com: domain of dev-bounces@dpdk.org designates 92.243.14.124 as permitted sender) smtp.mailfrom=dev-bounces@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 009101C10F; Tue, 17 Mar 2020 02:19:05 +0100 (CET) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by dpdk.org (Postfix) with ESMTP id E71F91C0C9; Tue, 17 Mar 2020 02:19:03 +0100 (CET) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 712451FB; Mon, 16 Mar 2020 18:19:03 -0700 (PDT) Received: from phil-VirtualBox.shanghai.arm.com (phil-VirtualBox.shanghai.arm.com [10.169.108.137]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 42CF83F52E; Mon, 16 Mar 2020 18:18:59 -0700 (PDT) From: Phil Yang To: thomas@monjalon.net, harry.van.haaren@intel.com, konstantin.ananyev@intel.com, stephen@networkplumber.org, maxime.coquelin@redhat.com, dev@dpdk.org Cc: david.marchand@redhat.com, jerinj@marvell.com, hemant.agrawal@nxp.com, Honnappa.Nagarahalli@arm.com, gavin.hu@arm.com, ruifeng.wang@arm.com, joyce.kong@arm.com, nd@arm.com, Honnappa Nagarahalli , stable@dpdk.org Date: Tue, 17 Mar 2020 09:17:40 +0800 Message-Id: <1584407863-774-10-git-send-email-phil.yang@arm.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1584407863-774-1-git-send-email-phil.yang@arm.com> References: <1583999071-22872-1-git-send-email-phil.yang@arm.com> <1584407863-774-1-git-send-email-phil.yang@arm.com> Subject: [dpdk-dev] [PATCH v3 09/12] service: avoid race condition for MT unsafe service 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" From: Honnappa Nagarahalli There has possible that a MT unsafe service might get configured to run on another core while the service is running currently. This might result in the MT unsafe service running on multiple cores simultaneously. Use 'execute_lock' always when the service is MT unsafe. Fixes: e9139a32f6e8 ("service: add function to run on app lcore") Cc: stable@dpdk.org Signed-off-by: Honnappa Nagarahalli Reviewed-by: Phil Yang Reviewed-by: Gavin Hu --- lib/librte_eal/common/rte_service.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) -- 2.7.4 diff --git a/lib/librte_eal/common/rte_service.c b/lib/librte_eal/common/rte_service.c index 557b5a9..32a2f8a 100644 --- a/lib/librte_eal/common/rte_service.c +++ b/lib/librte_eal/common/rte_service.c @@ -50,6 +50,10 @@ struct rte_service_spec_impl { uint8_t internal_flags; /* per service statistics */ + /* Indicates how many cores the service is mapped to run on. + * It does not indicate the number of cores the service is running + * on currently. + */ rte_atomic32_t num_mapped_cores; uint64_t calls; uint64_t cycles_spent; @@ -370,12 +374,7 @@ service_run(uint32_t i, struct core_state *cs, uint64_t service_mask, cs->service_active_on_lcore[i] = 1; - /* check do we need cmpset, if MT safe or <= 1 core - * mapped, atomic ops are not required. - */ - const int use_atomics = (service_mt_safe(s) == 0) && - (rte_atomic32_read(&s->num_mapped_cores) > 1); - if (use_atomics) { + if (service_mt_safe(s) == 0) { if (!rte_atomic32_cmpset((uint32_t *)&s->execute_lock, 0, 1)) return -EBUSY; From patchwork Tue Mar 17 01:17:41 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Phil Yang X-Patchwork-Id: 184605 Delivered-To: patch@linaro.org Received: by 2002:a92:1f12:0:0:0:0:0 with SMTP id i18csp3500936ile; Mon, 16 Mar 2020 18:20:06 -0700 (PDT) X-Google-Smtp-Source: ADFU+vsj2QRNBhFpWtQFd9riRBfgTnXB6MJ+ui8A7ymcZxmj6e/m0P+rw8fmPUpp+rp/ggFMnum0 X-Received: by 2002:a05:600c:2297:: with SMTP id 23mr1849935wmf.135.1584408006248; Mon, 16 Mar 2020 18:20:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1584408006; cv=none; d=google.com; s=arc-20160816; b=EVvuOQt/tVcI10SV9djQzj4k9F1qV25Z8Kpwx5ooy5jBYyF/feeYTGYL3j+Nrttcwz bf893wLI4HUOW01iPQoh42z7Trykz4aZXZDygxI30xx1V3cIk0IegwY7W+oBFHWLOWHG aUy9teiG2uVWD9fsk6K/d5fFZIV3nC3OtdYTiU68bu7CANMoxv5/E8vF5ykpFIDk3kVU 2O4gEz3htY/9vmVh86eABb7+Od9qBsMKNwKrZBQblfVVfwvR4jNPtUjlPPwyWhxWW3Ju ciV7pYp4vAplgIu+YHpeC31uExblrT1sZOuydz/EVXM+ZkQpx+Qh6Mi6bLlI7hmzq7pr I6JQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject:references:in-reply-to :message-id:date:cc:to:from; bh=6Il56caGsdXEQ6PGpKc91Jj+W5zndfhj1ImiM7XmJZY=; b=RNQMFhKC01aBEXAkCpetJ/61RE2Oxa7kdcDA7kOZGu55Pt67NtWEm8sH8OdFB/hwDj RUb+1HvPrgmL+sPToTDwuxPrdB578dwxDfNw2s8aIHU9/13Y2gG+5N9KN9QUkh4dsqpg T+2tapDtArx8FatnkpDGUUi9rVTdYaONahj90ZRa9k0x24De+QGLICl25XA3BPx3YXHE o9PsT8LlmpG3odgvap+z81jDtsm9Z5/4tY6bSbGOC6xCg9BqgR9M3hZ2Ni5JiSW+irQO gF6+7l+FshOLi10WjhFCkgW2GyZj0mXwjzI3YJ51r8su9Cjf8b/HuJqVQrGp44fErDIW rzKw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of dev-bounces@dpdk.org designates 92.243.14.124 as permitted sender) smtp.mailfrom=dev-bounces@dpdk.org Return-Path: Received: from dpdk.org (dpdk.org. [92.243.14.124]) by mx.google.com with ESMTP id t23si968295wmj.214.2020.03.16.18.20.06; Mon, 16 Mar 2020 18:20:06 -0700 (PDT) Received-SPF: pass (google.com: domain of dev-bounces@dpdk.org designates 92.243.14.124 as permitted sender) client-ip=92.243.14.124; Authentication-Results: mx.google.com; spf=pass (google.com: domain of dev-bounces@dpdk.org designates 92.243.14.124 as permitted sender) smtp.mailfrom=dev-bounces@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 807D71C127; Tue, 17 Mar 2020 02:19:09 +0100 (CET) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by dpdk.org (Postfix) with ESMTP id A389A1C0B7; Tue, 17 Mar 2020 02:19:08 +0100 (CET) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 2BC33FEC; Mon, 16 Mar 2020 18:19:08 -0700 (PDT) Received: from phil-VirtualBox.shanghai.arm.com (phil-VirtualBox.shanghai.arm.com [10.169.108.137]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id DED1B3F52E; Mon, 16 Mar 2020 18:19:03 -0700 (PDT) From: Phil Yang To: thomas@monjalon.net, harry.van.haaren@intel.com, konstantin.ananyev@intel.com, stephen@networkplumber.org, maxime.coquelin@redhat.com, dev@dpdk.org Cc: david.marchand@redhat.com, jerinj@marvell.com, hemant.agrawal@nxp.com, Honnappa.Nagarahalli@arm.com, gavin.hu@arm.com, ruifeng.wang@arm.com, joyce.kong@arm.com, nd@arm.com, Honnappa Nagarahalli , stable@dpdk.org Date: Tue, 17 Mar 2020 09:17:41 +0800 Message-Id: <1584407863-774-11-git-send-email-phil.yang@arm.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1584407863-774-1-git-send-email-phil.yang@arm.com> References: <1583999071-22872-1-git-send-email-phil.yang@arm.com> <1584407863-774-1-git-send-email-phil.yang@arm.com> Subject: [dpdk-dev] [PATCH v3 10/12] service: identify service running on another core correctly 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" From: Honnappa Nagarahalli The logic to identify if the MT unsafe service is running on another core can return -EBUSY spuriously. In such cases, running the service becomes costlier than using atomic operations. Assume that the application passes the right parameters and reduces the number of instructions for all cases. Cc: stable@dpdk.org Signed-off-by: Honnappa Nagarahalli Reviewed-by: Phil Yang Reviewed-by: Gavin Hu --- lib/librte_eal/common/rte_service.c | 26 ++++++++------------------ 1 file changed, 8 insertions(+), 18 deletions(-) -- 2.7.4 diff --git a/lib/librte_eal/common/rte_service.c b/lib/librte_eal/common/rte_service.c index 32a2f8a..0843c3c 100644 --- a/lib/librte_eal/common/rte_service.c +++ b/lib/librte_eal/common/rte_service.c @@ -360,7 +360,7 @@ service_runner_do_callback(struct rte_service_spec_impl *s, /* Expects the service 's' is valid. */ static int32_t service_run(uint32_t i, struct core_state *cs, uint64_t service_mask, - struct rte_service_spec_impl *s) + struct rte_service_spec_impl *s, uint32_t serialize_mt_unsafe) { if (!s) return -EINVAL; @@ -374,7 +374,7 @@ service_run(uint32_t i, struct core_state *cs, uint64_t service_mask, cs->service_active_on_lcore[i] = 1; - if (service_mt_safe(s) == 0) { + if ((service_mt_safe(s) == 0) && (serialize_mt_unsafe == 1)) { if (!rte_atomic32_cmpset((uint32_t *)&s->execute_lock, 0, 1)) return -EBUSY; @@ -412,24 +412,14 @@ rte_service_run_iter_on_app_lcore(uint32_t id, uint32_t serialize_mt_unsafe) SERVICE_VALID_GET_OR_ERR_RET(id, s, -EINVAL); - /* Atomically add this core to the mapped cores first, then examine if - * we can run the service. This avoids a race condition between - * checking the value, and atomically adding to the mapped count. + /* Increment num_mapped_cores to indicate that the service + * is running on a core. */ - if (serialize_mt_unsafe) - rte_atomic32_inc(&s->num_mapped_cores); + rte_atomic32_inc(&s->num_mapped_cores); - if (service_mt_safe(s) == 0 && - rte_atomic32_read(&s->num_mapped_cores) > 1) { - if (serialize_mt_unsafe) - rte_atomic32_dec(&s->num_mapped_cores); - return -EBUSY; - } - - int ret = service_run(id, cs, UINT64_MAX, s); + int ret = service_run(id, cs, UINT64_MAX, s, serialize_mt_unsafe); - if (serialize_mt_unsafe) - rte_atomic32_dec(&s->num_mapped_cores); + rte_atomic32_dec(&s->num_mapped_cores); return ret; } @@ -449,7 +439,7 @@ service_runner_func(void *arg) if (!service_valid(i)) continue; /* return value ignored as no change to code flow */ - service_run(i, cs, service_mask, service_get(i)); + service_run(i, cs, service_mask, service_get(i), 1); } cs->loops++;