From patchwork Mon Jul 6 20:52:34 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Marchand X-Patchwork-Id: 73349 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id CD912A00C5; Mon, 6 Jul 2020 22:54:32 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 28F221DD84; Mon, 6 Jul 2020 22:53:50 +0200 (CEST) Received: from us-smtp-delivery-1.mimecast.com (us-smtp-2.mimecast.com [205.139.110.61]) by dpdk.org (Postfix) with ESMTP id 462E01DD83 for ; Mon, 6 Jul 2020 22:53:48 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1594068827; 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: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=sky4Ws/9qM3UAWCKiUVnd7bjuaHfcjU1TXyFyla7Jx8=; b=Wxf7gonaXGdfLlSHI9dSod2r19WN4SSm5BHVwtDcNYgwgv4DfXbmMFO2NIMY3VHED+1acS oEZBiVKzVVlEbKTYHuvcc8dHLOWs/Jf2BTNtlAdQHQkwhtKRhXeQq7xF5rIKGEVeUmepma NabZOgKztaQ1ChtZ5MRF2+eD8OfEDEg= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-152-0213GVknNW-P42l5Qif1pw-1; Mon, 06 Jul 2020 16:53:44 -0400 X-MC-Unique: 0213GVknNW-P42l5Qif1pw-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id C2DD4EC1A0; Mon, 6 Jul 2020 20:53:41 +0000 (UTC) Received: from dmarchan.remote.csb (unknown [10.40.195.188]) by smtp.corp.redhat.com (Postfix) with ESMTP id 3DF5810013D7; Mon, 6 Jul 2020 20:53:36 +0000 (UTC) From: David Marchand To: dev@dpdk.org Cc: jerinjacobk@gmail.com, bruce.richardson@intel.com, mdr@ashroe.eu, thomas@monjalon.net, arybchenko@solarflare.com, ktraynor@redhat.com, ian.stokes@intel.com, i.maximets@ovn.org, olivier.matz@6wind.com, konstantin.ananyev@intel.com, Anatoly Burakov , Neil Horman , Harini Ramakrishnan , Omar Cardona , Pallavi Kadam , Ranjit Menon Date: Mon, 6 Jul 2020 22:52:34 +0200 Message-Id: <20200706205234.8040-11-david.marchand@redhat.com> In-Reply-To: <20200706205234.8040-1-david.marchand@redhat.com> References: <20200610144506.30505-1-david.marchand@redhat.com> <20200706205234.8040-1-david.marchand@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=david.marchand@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Subject: [dpdk-dev] [PATCH v6 10/10] eal: add multiprocess disable API 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" The multiprocess feature has been implicitly enabled so far. Applications might want to explicitly disable like when using the non-EAL threads registration API. Signed-off-by: David Marchand --- Changes since v5: - fixed windows build, --- app/test/test_mp_secondary.c | 7 +++++++ lib/librte_eal/common/eal_common_proc.c | 7 +++---- lib/librte_eal/common/eal_common_thread.c | 2 +- lib/librte_eal/common/eal_private.h | 5 ----- lib/librte_eal/include/rte_eal.h | 14 ++++++++++++++ lib/librte_eal/rte_eal_version.map | 1 + lib/librte_eal/windows/eal.c | 2 +- 7 files changed, 27 insertions(+), 11 deletions(-) diff --git a/app/test/test_mp_secondary.c b/app/test/test_mp_secondary.c index ac15ddbf20..3a655c3400 100644 --- a/app/test/test_mp_secondary.c +++ b/app/test/test_mp_secondary.c @@ -97,6 +97,13 @@ run_secondary_instances(void) (1 << rte_get_master_lcore())); ret |= launch_proc(argv1); + printf("### Testing rte_mp_disable() reject:\n"); + if (rte_mp_disable()) { + printf("Error: rte_mp_disable() has been accepted\n"); + ret |= -1; + } else { + printf("# Checked rte_mp_disable() is refused\n"); + } ret |= launch_proc(argv2); ret |= !(launch_proc(argv3)); diff --git a/lib/librte_eal/common/eal_common_proc.c b/lib/librte_eal/common/eal_common_proc.c index 10142683f8..d35b9c0380 100644 --- a/lib/librte_eal/common/eal_common_proc.c +++ b/lib/librte_eal/common/eal_common_proc.c @@ -1236,10 +1236,9 @@ rte_mp_reply(struct rte_mp_msg *msg, const char *peer) /* Internally, the status of the mp feature is represented as a three-state: * - "unknown" as long as no secondary process attached to a primary process - * and there was no call to eal_disable_multiprocess yet, + * and there was no call to rte_mp_disable yet, * - "enabled" as soon as a secondary process attaches to a primary process, - * - "disabled" when a primary process successfully called - * eal_disable_multiprocess, + * - "disabled" when a primary process successfully called rte_mp_disable, */ enum mp_status { MP_STATUS_UNKNOWN, @@ -1264,7 +1263,7 @@ set_mp_status(enum mp_status status) } bool -eal_disable_multiprocess(void) +rte_mp_disable(void) { return set_mp_status(MP_STATUS_DISABLED); } diff --git a/lib/librte_eal/common/eal_common_thread.c b/lib/librte_eal/common/eal_common_thread.c index ea09a4f3e0..73a055902a 100644 --- a/lib/librte_eal/common/eal_common_thread.c +++ b/lib/librte_eal/common/eal_common_thread.c @@ -261,7 +261,7 @@ rte_thread_register(void) rte_errno = EINVAL; return -1; } - if (!eal_disable_multiprocess()) { + if (!rte_mp_disable()) { RTE_LOG(ERR, EAL, "Multiprocess in use, registering non-EAL threads is not supported.\n"); rte_errno = EINVAL; return -1; diff --git a/lib/librte_eal/common/eal_private.h b/lib/librte_eal/common/eal_private.h index 535e008474..a917727e41 100644 --- a/lib/librte_eal/common/eal_private.h +++ b/lib/librte_eal/common/eal_private.h @@ -733,11 +733,6 @@ void __rte_thread_init(unsigned int lcore_id, rte_cpuset_t *cpuset); */ void __rte_thread_uninit(void); -/** - * Mark primary process as not supporting multi-process. - */ -bool eal_disable_multiprocess(void); - /** * Instruct primary process that a secondary process wants to attach. */ diff --git a/lib/librte_eal/include/rte_eal.h b/lib/librte_eal/include/rte_eal.h index 0913d1947c..fc7db2d427 100644 --- a/lib/librte_eal/include/rte_eal.h +++ b/lib/librte_eal/include/rte_eal.h @@ -151,6 +151,20 @@ int rte_eal_cleanup(void); */ int rte_eal_primary_proc_alive(const char *config_file_path); +/** + * Disable multiprocess. + * + * This function can be called to indicate that multiprocess won't be used for + * the rest of the application life. + * + * @return + * - true if called from a primary process that had no secondary processes + * attached, + * - false, otherwise. + */ +__rte_experimental +bool rte_mp_disable(void); + #define RTE_MP_MAX_FD_NUM 8 /* The max amount of fds */ #define RTE_MP_MAX_NAME_LEN 64 /* The max length of action name */ #define RTE_MP_MAX_PARAM_LEN 256 /* The max length of param */ diff --git a/lib/librte_eal/rte_eal_version.map b/lib/librte_eal/rte_eal_version.map index 3aeb5b11ab..d17f13f8d3 100644 --- a/lib/librte_eal/rte_eal_version.map +++ b/lib/librte_eal/rte_eal_version.map @@ -399,6 +399,7 @@ EXPERIMENTAL { rte_lcore_callback_unregister; rte_lcore_dump; rte_lcore_iterate; + rte_mp_disable; rte_thread_register; rte_thread_unregister; }; diff --git a/lib/librte_eal/windows/eal.c b/lib/librte_eal/windows/eal.c index 9fc831fe6f..e50601dd36 100644 --- a/lib/librte_eal/windows/eal.c +++ b/lib/librte_eal/windows/eal.c @@ -67,7 +67,7 @@ eal_proc_type_detect(void) } bool -eal_disable_multiprocess(void) +rte_mp_disable(void) { return true; }