From patchwork Wed Oct 12 12:31:04 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Marchand X-Patchwork-Id: 118059 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 7E681A00C4; Wed, 12 Oct 2022 14:31:37 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 5E7AC43061; Wed, 12 Oct 2022 14:31:35 +0200 (CEST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mails.dpdk.org (Postfix) with ESMTP id 2522642EF7 for ; Wed, 12 Oct 2022 14:31:33 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1665577892; 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=2ACJOkmzuDX1UJ+c22UtILM8RNz9OT1aGtEDQTYJmrw=; b=bRP3HmRlp5PjJCpt+Gb1K/ODmSI55ca9+qqKWWbE83EdEU2C0GgHawevKfpQW2oQ/AK+0O cqtlOPxWl43mCBkcK/TI7oNRGNDEH/bRdBbSmJKH4dTHW6sCirnqq7fAaY2Qh8aZtDeZny M5cXqYko14zEjAmj2a2N0WeTAutCMx4= Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-103-ZK2fJsf8O72qM_1z45Ulzw-1; Wed, 12 Oct 2022 08:31:31 -0400 X-MC-Unique: ZK2fJsf8O72qM_1z45Ulzw-1 Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 3C76F2932488; Wed, 12 Oct 2022 12:31:31 +0000 (UTC) Received: from localhost.localdomain (ovpn-193-115.brq.redhat.com [10.40.193.115]) by smtp.corp.redhat.com (Postfix) with ESMTP id 49732492B05; Wed, 12 Oct 2022 12:31:30 +0000 (UTC) From: David Marchand To: dev@dpdk.org Cc: jerinj@marvell.com, skori@marvell.com, stable@dpdk.org Subject: [PATCH v3 1/9] trace: fix mode for new trace point Date: Wed, 12 Oct 2022 14:31:04 +0200 Message-Id: <20221012123112.2951802-2-david.marchand@redhat.com> In-Reply-To: <20221012123112.2951802-1-david.marchand@redhat.com> References: <20220921120359.2201131-1-david.marchand@redhat.com> <20221012123112.2951802-1-david.marchand@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.10 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org If an application registers trace points later than rte_eal_init(), changes in the trace point mode were not applied. Fixes: 84c4fae4628f ("trace: implement operation APIs") Cc: stable@dpdk.org Signed-off-by: David Marchand Acked-by: Jerin Jacob Acked-by: Sunil Kumar Kori --- lib/eal/common/eal_common_trace.c | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/eal/common/eal_common_trace.c b/lib/eal/common/eal_common_trace.c index f9b187d15f..d5dbc7d667 100644 --- a/lib/eal/common/eal_common_trace.c +++ b/lib/eal/common/eal_common_trace.c @@ -512,6 +512,7 @@ __rte_trace_point_register(rte_trace_point_t *handle, const char *name, /* Form the trace handle */ *handle = sz; *handle |= trace.nb_trace_points << __RTE_TRACE_FIELD_ID_SHIFT; + trace_mode_set(handle, trace.mode); trace.nb_trace_points++; tp->handle = handle; From patchwork Wed Oct 12 12:31:05 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Marchand X-Patchwork-Id: 118061 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 3EAF8A00C4; Wed, 12 Oct 2022 14:31:51 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 49DFB43074; Wed, 12 Oct 2022 14:31:44 +0200 (CEST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mails.dpdk.org (Postfix) with ESMTP id D5E6843070 for ; Wed, 12 Oct 2022 14:31:41 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1665577901; 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=EX6bedBJRMIFWwVTXxurdlnS3wy6PWSviCKn1ubkE7Y=; b=E+JGMP03pN3QpySBWG/zbZ2q6K7awJ7Cb9AbahQl0xGwClipjhEmqsSRcBdLvQyL02doPY 1g7uxslRwRgBwEwPSeH4Mls+61YQ4rhvwwqZR5NYbsIdKcdMH97aVNfS9yNPYBlU1mbUwK zU5ziuM1yHF/1YNPHPikWkUkDmrhS7s= Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-614-ROx5gBNKPN63wH6tJm36gg-1; Wed, 12 Oct 2022 08:31:35 -0400 X-MC-Unique: ROx5gBNKPN63wH6tJm36gg-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 4FB02382ECE0; Wed, 12 Oct 2022 12:31:34 +0000 (UTC) Received: from localhost.localdomain (ovpn-193-115.brq.redhat.com [10.40.193.115]) by smtp.corp.redhat.com (Postfix) with ESMTP id 5BB98C8E40E; Wed, 12 Oct 2022 12:31:33 +0000 (UTC) From: David Marchand To: dev@dpdk.org Cc: jerinj@marvell.com, skori@marvell.com, stable@dpdk.org Subject: [PATCH v3 2/9] trace: fix mode change Date: Wed, 12 Oct 2022 14:31:05 +0200 Message-Id: <20221012123112.2951802-3-david.marchand@redhat.com> In-Reply-To: <20221012123112.2951802-1-david.marchand@redhat.com> References: <20220921120359.2201131-1-david.marchand@redhat.com> <20221012123112.2951802-1-david.marchand@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.8 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org The API does not state that changing mode should be refused if no trace point is enabled. Remove this limitation. Fixes: 84c4fae4628f ("trace: implement operation APIs") Cc: stable@dpdk.org Signed-off-by: David Marchand Acked-by: Sunil Kumar Kori --- app/test/test_trace.c | 3 --- lib/eal/common/eal_common_trace.c | 3 --- 2 files changed, 6 deletions(-) diff --git a/app/test/test_trace.c b/app/test/test_trace.c index 76af79162b..44ac38a4fa 100644 --- a/app/test/test_trace.c +++ b/app/test/test_trace.c @@ -126,9 +126,6 @@ test_trace_mode(void) current = rte_trace_mode_get(); - if (!rte_trace_is_enabled()) - return TEST_SKIPPED; - rte_trace_mode_set(RTE_TRACE_MODE_DISCARD); if (rte_trace_mode_get() != RTE_TRACE_MODE_DISCARD) goto failed; diff --git a/lib/eal/common/eal_common_trace.c b/lib/eal/common/eal_common_trace.c index d5dbc7d667..1b86f5d2d2 100644 --- a/lib/eal/common/eal_common_trace.c +++ b/lib/eal/common/eal_common_trace.c @@ -127,9 +127,6 @@ rte_trace_mode_set(enum rte_trace_mode mode) { struct trace_point *tp; - if (!rte_trace_is_enabled()) - return; - STAILQ_FOREACH(tp, &tp_list, next) trace_mode_set(tp->handle, mode); From patchwork Wed Oct 12 12:31:06 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Marchand X-Patchwork-Id: 118060 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 3150BA00C4; Wed, 12 Oct 2022 14:31:46 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 515FE43070; Wed, 12 Oct 2022 14:31:43 +0200 (CEST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mails.dpdk.org (Postfix) with ESMTP id 82DDE43068 for ; Wed, 12 Oct 2022 14:31:41 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1665577901; 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=yOkTsOKYyNlfTK4EpoU48NsbftkjFdAzGjwW/BaAsG0=; b=jJcbhGDPOcX8rjEPaZygmUhvEIUXi2OliAtRMbZjtD/HrBaeTMPYF4cyXyp34TCVmjkUSt IrpFGUMe+d0z04VZBw+uSsxwuSyzaSDnxcxQrNBdpKQAtGeFg83drlbR882FcSPZ4U1YXz 4+uX6ibhlKdsVvVi3no76VRszTr5sUo= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-450--TKimCoaPRef0WKC2uzF4Q-1; Wed, 12 Oct 2022 08:31:37 -0400 X-MC-Unique: -TKimCoaPRef0WKC2uzF4Q-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 3DE72805B72; Wed, 12 Oct 2022 12:31:37 +0000 (UTC) Received: from localhost.localdomain (ovpn-193-115.brq.redhat.com [10.40.193.115]) by smtp.corp.redhat.com (Postfix) with ESMTP id 4B7124EA5F; Wed, 12 Oct 2022 12:31:36 +0000 (UTC) From: David Marchand To: dev@dpdk.org Cc: jerinj@marvell.com, skori@marvell.com, stable@dpdk.org Subject: [PATCH v3 3/9] trace: fix leak with regexp Date: Wed, 12 Oct 2022 14:31:06 +0200 Message-Id: <20221012123112.2951802-4-david.marchand@redhat.com> In-Reply-To: <20221012123112.2951802-1-david.marchand@redhat.com> References: <20220921120359.2201131-1-david.marchand@redhat.com> <20221012123112.2951802-1-david.marchand@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.5 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org The precompiled buffer initialised in regcomp must be freed before leaving rte_trace_regexp. Fixes: 84c4fae4628f ("trace: implement operation APIs") Cc: stable@dpdk.org Signed-off-by: David Marchand Acked-by: Jerin Jacob Acked-by: Sunil Kumar Kori --- Changes since v1: - split patch in two, keeping only the backportable fix as patch 3, --- lib/eal/common/eal_common_trace.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/eal/common/eal_common_trace.c b/lib/eal/common/eal_common_trace.c index 1b86f5d2d2..1db11e3e14 100644 --- a/lib/eal/common/eal_common_trace.c +++ b/lib/eal/common/eal_common_trace.c @@ -218,8 +218,10 @@ rte_trace_regexp(const char *regex, bool enable) rc = rte_trace_point_disable(tp->handle); found = 1; } - if (rc < 0) - return rc; + if (rc < 0) { + found = 0; + break; + } } regfree(&r); From patchwork Wed Oct 12 12:31:07 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Marchand X-Patchwork-Id: 118062 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 25198A00C4; Wed, 12 Oct 2022 14:31:57 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 32B9B43079; Wed, 12 Oct 2022 14:31:46 +0200 (CEST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mails.dpdk.org (Postfix) with ESMTP id 1008B43068 for ; Wed, 12 Oct 2022 14:31:42 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1665577902; 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=5+vZBZbVbMe7Op4DbBhH7C8wiKZG00hQHiQCcH8cNms=; b=S6fKAgWv+/YAv43Q4aLAFL9qpryT5Sp55NqdzN0M3v720OdDEKxWimY2QCaNX/m0ogD8ht qmUZ1HuQzFVO7AA8eqrYLp+7TOl48jdeuxwA3RXJoz8nXExSVcNtiQXDpWJEI8cpnvJmCg zJTuRFFUUvPm2KaR0P5Dn/QCu2Xm6rs= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-169-6vMrLRMrP7mWlGfdfZp1qQ-1; Wed, 12 Oct 2022 08:31:40 -0400 X-MC-Unique: 6vMrLRMrP7mWlGfdfZp1qQ-1 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 30215882831; Wed, 12 Oct 2022 12:31:40 +0000 (UTC) Received: from localhost.localdomain (ovpn-193-115.brq.redhat.com [10.40.193.115]) by smtp.corp.redhat.com (Postfix) with ESMTP id 6514D40EFB00; Wed, 12 Oct 2022 12:31:39 +0000 (UTC) From: David Marchand To: dev@dpdk.org Cc: jerinj@marvell.com, skori@marvell.com Subject: [PATCH v3 4/9] trace: rework loop on trace points Date: Wed, 12 Oct 2022 14:31:07 +0200 Message-Id: <20221012123112.2951802-5-david.marchand@redhat.com> In-Reply-To: <20221012123112.2951802-1-david.marchand@redhat.com> References: <20220921120359.2201131-1-david.marchand@redhat.com> <20221012123112.2951802-1-david.marchand@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.1 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Directly skip the block when a trace point does not match the user criteria. Signed-off-by: David Marchand Acked-by: Jerin Jacob Acked-by: Sunil Kumar Kori --- lib/eal/common/eal_common_trace.c | 34 +++++++++++++++++-------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/lib/eal/common/eal_common_trace.c b/lib/eal/common/eal_common_trace.c index 1db11e3e14..6b8660c318 100644 --- a/lib/eal/common/eal_common_trace.c +++ b/lib/eal/common/eal_common_trace.c @@ -186,15 +186,18 @@ rte_trace_pattern(const char *pattern, bool enable) int rc = 0, found = 0; STAILQ_FOREACH(tp, &tp_list, next) { - if (fnmatch(pattern, tp->name, 0) == 0) { - if (enable) - rc = rte_trace_point_enable(tp->handle); - else - rc = rte_trace_point_disable(tp->handle); - found = 1; + if (fnmatch(pattern, tp->name, 0) != 0) + continue; + + if (enable) + rc = rte_trace_point_enable(tp->handle); + else + rc = rte_trace_point_disable(tp->handle); + if (rc < 0) { + found = 0; + break; } - if (rc < 0) - return rc; + found = 1; } return rc | found; @@ -211,17 +214,18 @@ rte_trace_regexp(const char *regex, bool enable) return -EINVAL; STAILQ_FOREACH(tp, &tp_list, next) { - if (regexec(&r, tp->name, 0, NULL, 0) == 0) { - if (enable) - rc = rte_trace_point_enable(tp->handle); - else - rc = rte_trace_point_disable(tp->handle); - found = 1; - } + if (regexec(&r, tp->name, 0, NULL, 0) != 0) + continue; + + if (enable) + rc = rte_trace_point_enable(tp->handle); + else + rc = rte_trace_point_disable(tp->handle); if (rc < 0) { found = 0; break; } + found = 1; } regfree(&r); From patchwork Wed Oct 12 12:31:08 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Marchand X-Patchwork-Id: 118063 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 2822EA00C4; Wed, 12 Oct 2022 14:32:04 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 6886343082; Wed, 12 Oct 2022 14:31:48 +0200 (CEST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mails.dpdk.org (Postfix) with ESMTP id 667AA4307E for ; Wed, 12 Oct 2022 14:31:47 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1665577906; 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=e4Tygx5p9+Fa4LrCghuMiU/eNiplWQc4UBewimcT8+Y=; b=JJ7cuYUDakGlwEJI+1QrtaUH+zoAYi3FgS42pkPfnQPMjrEyKS3nReBDqh/2leuGKcI/nZ gTI/FEk3FttcLltkqwM1BnrKDuI5Rd4klKkgZHgO559g16aSsOoPGX/MxoBTvNEgWIePyg aVIoyVCvFCd9G/wwuqbgVUvsUCOJUhw= Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-256-3J3eh5FjO821ZD-r0u4IhA-1; Wed, 12 Oct 2022 08:31:43 -0400 X-MC-Unique: 3J3eh5FjO821ZD-r0u4IhA-1 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 538D81C08969; Wed, 12 Oct 2022 12:31:43 +0000 (UTC) Received: from localhost.localdomain (ovpn-193-115.brq.redhat.com [10.40.193.115]) by smtp.corp.redhat.com (Postfix) with ESMTP id 350D92157F56; Wed, 12 Oct 2022 12:31:42 +0000 (UTC) From: David Marchand To: dev@dpdk.org Cc: jerinj@marvell.com, skori@marvell.com, stable@dpdk.org Subject: [PATCH v3 5/9] trace: fix dynamically enabling trace points Date: Wed, 12 Oct 2022 14:31:08 +0200 Message-Id: <20221012123112.2951802-6-david.marchand@redhat.com> In-Reply-To: <20221012123112.2951802-1-david.marchand@redhat.com> References: <20220921120359.2201131-1-david.marchand@redhat.com> <20221012123112.2951802-1-david.marchand@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.6 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Enabling trace points at runtime was not working if no trace point had been enabled first at rte_eal_init() time. The reason was that trace.args reflected the arguments passed to --trace= EAL option. To fix this: - the trace subsystem initialisation is updated: trace directory creation is deferred to when traces are dumped (to avoid creating directories that may not be used), - per lcore memory allocation still relies on rte_trace_is_enabled() but this helper now tracks if any trace point is enabled. The documentation is updated accordingly, - cleanup helpers must always be called in rte_eal_cleanup() since some trace points might have been enabled and disabled in the lifetime of the DPDK application, With this fix, we can update the unit test and check that a trace point callback is invoked when expected. Note: - the 'trace' global variable might be shadowed with the argument passed to the functions dealing with trace point handles. 'tp' has been used for referring to trace_point object. Prefer 't' for referring to handles, Fixes: 84c4fae4628f ("trace: implement operation APIs") Cc: stable@dpdk.org Signed-off-by: David Marchand Acked-by: Sunil Kumar Kori --- Changes since v1: - restored level to INFO for trace directory log message, - moved trace_mkdir() to rte_trace_save, --- app/test/test_trace.c | 20 ++++++++++ app/test/test_trace.h | 2 + doc/guides/prog_guide/trace_lib.rst | 14 +++++-- lib/eal/common/eal_common_trace.c | 53 ++++++++++--------------- lib/eal/common/eal_common_trace_utils.c | 11 ++++- lib/eal/common/eal_trace.h | 3 +- 6 files changed, 65 insertions(+), 38 deletions(-) diff --git a/app/test/test_trace.c b/app/test/test_trace.c index 44ac38a4fa..2660f52f1d 100644 --- a/app/test/test_trace.c +++ b/app/test/test_trace.c @@ -9,6 +9,8 @@ #include "test.h" #include "test_trace.h" +int app_dpdk_test_tp_count; + #ifdef RTE_EXEC_ENV_WINDOWS static int @@ -95,8 +97,15 @@ test_trace_point_regex(void) static int32_t test_trace_point_disable_enable(void) { + int expected; int rc; + /* At tp registration, the associated counter increases once. */ + expected = 1; + TEST_ASSERT_EQUAL(app_dpdk_test_tp_count, expected, + "Expecting %d, but got %d for app_dpdk_test_tp_count", + expected, app_dpdk_test_tp_count); + rc = rte_trace_point_disable(&__app_dpdk_test_tp); if (rc < 0) goto failed; @@ -104,6 +113,12 @@ test_trace_point_disable_enable(void) if (rte_trace_point_is_enabled(&__app_dpdk_test_tp)) goto failed; + /* No emission expected */ + app_dpdk_test_tp("app.dpdk.test.tp"); + TEST_ASSERT_EQUAL(app_dpdk_test_tp_count, expected, + "Expecting %d, but got %d for app_dpdk_test_tp_count", + expected, app_dpdk_test_tp_count); + rc = rte_trace_point_enable(&__app_dpdk_test_tp); if (rc < 0) goto failed; @@ -113,6 +128,11 @@ test_trace_point_disable_enable(void) /* Emit the trace */ app_dpdk_test_tp("app.dpdk.test.tp"); + expected++; + TEST_ASSERT_EQUAL(app_dpdk_test_tp_count, expected, + "Expecting %d, but got %d for app_dpdk_test_tp_count", + expected, app_dpdk_test_tp_count); + return TEST_SUCCESS; failed: diff --git a/app/test/test_trace.h b/app/test/test_trace.h index 413842f60d..4ad44e2bea 100644 --- a/app/test/test_trace.h +++ b/app/test/test_trace.h @@ -3,10 +3,12 @@ */ #include +extern int app_dpdk_test_tp_count; RTE_TRACE_POINT( app_dpdk_test_tp, RTE_TRACE_POINT_ARGS(const char *str), rte_trace_point_emit_string(str); + app_dpdk_test_tp_count++; ) RTE_TRACE_POINT_FP( diff --git a/doc/guides/prog_guide/trace_lib.rst b/doc/guides/prog_guide/trace_lib.rst index fbadf9fde9..9a8f38073d 100644 --- a/doc/guides/prog_guide/trace_lib.rst +++ b/doc/guides/prog_guide/trace_lib.rst @@ -271,10 +271,16 @@ Trace memory The trace memory will be allocated through an internal function ``__rte_trace_mem_per_thread_alloc()``. The trace memory will be allocated per thread to enable lock less trace-emit function. -The memory for the trace memory for DPDK lcores will be allocated on -``rte_eal_init()`` if the trace is enabled through a EAL option. -For non DPDK threads, on the first trace emission, the memory will be -allocated. + +For non lcore threads, the trace memory is allocated on the first trace +emission. + +For lcore threads, if trace points are enabled through a EAL option, the trace +memory is allocated when the threads are known of DPDK +(``rte_eal_init`` for EAL lcores, ``rte_thread_register`` for non-EAL lcores). +Otherwise, when trace points are enabled later in the life of the application, +the behavior is the same as non lcore threads and the trace memory is allocated +on the first trace emission. Trace memory layout ~~~~~~~~~~~~~~~~~~~ diff --git a/lib/eal/common/eal_common_trace.c b/lib/eal/common/eal_common_trace.c index 6b8660c318..6aa11a3b50 100644 --- a/lib/eal/common/eal_common_trace.c +++ b/lib/eal/common/eal_common_trace.c @@ -48,12 +48,6 @@ eal_trace_init(void) goto fail; } - if (!STAILQ_EMPTY(&trace.args)) - trace.status = true; - - if (!rte_trace_is_enabled()) - return 0; - rte_spinlock_init(&trace.lock); /* Is duplicate trace name registered */ @@ -72,13 +66,9 @@ eal_trace_init(void) if (trace_metadata_create() < 0) goto fail; - /* Create trace directory */ - if (trace_mkdir()) - goto free_meta; - /* Save current epoch timestamp for future use */ if (trace_epoch_time_save() < 0) - goto fail; + goto free_meta; /* Apply global configurations */ STAILQ_FOREACH(arg, &trace.args, next) @@ -98,8 +88,6 @@ eal_trace_init(void) void eal_trace_fini(void) { - if (!rte_trace_is_enabled()) - return; trace_mem_free(); trace_metadata_destroy(); eal_trace_args_free(); @@ -108,17 +96,17 @@ eal_trace_fini(void) bool rte_trace_is_enabled(void) { - return trace.status; + return __atomic_load_n(&trace.status, __ATOMIC_ACQUIRE) != 0; } static void -trace_mode_set(rte_trace_point_t *trace, enum rte_trace_mode mode) +trace_mode_set(rte_trace_point_t *t, enum rte_trace_mode mode) { if (mode == RTE_TRACE_MODE_OVERWRITE) - __atomic_and_fetch(trace, ~__RTE_TRACE_FIELD_ENABLE_DISCARD, + __atomic_and_fetch(t, ~__RTE_TRACE_FIELD_ENABLE_DISCARD, __ATOMIC_RELEASE); else - __atomic_or_fetch(trace, __RTE_TRACE_FIELD_ENABLE_DISCARD, + __atomic_or_fetch(t, __RTE_TRACE_FIELD_ENABLE_DISCARD, __ATOMIC_RELEASE); } @@ -146,36 +134,42 @@ trace_point_is_invalid(rte_trace_point_t *t) } bool -rte_trace_point_is_enabled(rte_trace_point_t *trace) +rte_trace_point_is_enabled(rte_trace_point_t *t) { uint64_t val; - if (trace_point_is_invalid(trace)) + if (trace_point_is_invalid(t)) return false; - val = __atomic_load_n(trace, __ATOMIC_ACQUIRE); + val = __atomic_load_n(t, __ATOMIC_ACQUIRE); return (val & __RTE_TRACE_FIELD_ENABLE_MASK) != 0; } int -rte_trace_point_enable(rte_trace_point_t *trace) +rte_trace_point_enable(rte_trace_point_t *t) { - if (trace_point_is_invalid(trace)) + uint64_t prev; + + if (trace_point_is_invalid(t)) return -ERANGE; - __atomic_or_fetch(trace, __RTE_TRACE_FIELD_ENABLE_MASK, - __ATOMIC_RELEASE); + prev = __atomic_fetch_or(t, __RTE_TRACE_FIELD_ENABLE_MASK, __ATOMIC_RELEASE); + if ((prev & __RTE_TRACE_FIELD_ENABLE_MASK) == 0) + __atomic_add_fetch(&trace.status, 1, __ATOMIC_RELEASE); return 0; } int -rte_trace_point_disable(rte_trace_point_t *trace) +rte_trace_point_disable(rte_trace_point_t *t) { - if (trace_point_is_invalid(trace)) + uint64_t prev; + + if (trace_point_is_invalid(t)) return -ERANGE; - __atomic_and_fetch(trace, ~__RTE_TRACE_FIELD_ENABLE_MASK, - __ATOMIC_RELEASE); + prev = __atomic_fetch_and(t, ~__RTE_TRACE_FIELD_ENABLE_MASK, __ATOMIC_RELEASE); + if ((prev & __RTE_TRACE_FIELD_ENABLE_MASK) != 0) + __atomic_sub_fetch(&trace.status, 1, __ATOMIC_RELEASE); return 0; } @@ -417,9 +411,6 @@ trace_mem_free(void) struct trace *trace = trace_obj_get(); uint32_t count; - if (!rte_trace_is_enabled()) - return; - rte_spinlock_lock(&trace->lock); for (count = 0; count < trace->nb_trace_mem_list; count++) { trace_mem_per_thread_free_unlocked(&trace->lcore_meta[count]); diff --git a/lib/eal/common/eal_common_trace_utils.c b/lib/eal/common/eal_common_trace_utils.c index 2b55dbec65..7bf1c05e12 100644 --- a/lib/eal/common/eal_common_trace_utils.c +++ b/lib/eal/common/eal_common_trace_utils.c @@ -314,14 +314,18 @@ trace_dir_default_path_get(char *dir_path) return 0; } -int +static int trace_mkdir(void) { struct trace *trace = trace_obj_get(); char session[TRACE_DIR_STR_LEN]; + static bool already_done; char *dir_path; int rc; + if (already_done) + return 0; + if (!trace->dir_offset) { dir_path = calloc(1, sizeof(trace->dir)); if (dir_path == NULL) { @@ -365,6 +369,7 @@ trace_mkdir(void) } RTE_LOG(INFO, EAL, "Trace dir: %s\n", trace->dir); + already_done = true; return 0; } @@ -434,6 +439,10 @@ rte_trace_save(void) if (trace->nb_trace_mem_list == 0) return rc; + rc = trace_mkdir(); + if (rc < 0) + return rc; + rc = trace_meta_save(trace); if (rc) return rc; diff --git a/lib/eal/common/eal_trace.h b/lib/eal/common/eal_trace.h index 06751eb23a..72a5a461ae 100644 --- a/lib/eal/common/eal_trace.h +++ b/lib/eal/common/eal_trace.h @@ -54,7 +54,7 @@ struct trace { char dir[PATH_MAX]; int dir_offset; int register_errno; - bool status; + uint32_t status; enum rte_trace_mode mode; rte_uuid_t uuid; uint32_t buff_len; @@ -104,7 +104,6 @@ void trace_uuid_generate(void); int trace_metadata_create(void); void trace_metadata_destroy(void); char *trace_metadata_fixup_field(const char *field); -int trace_mkdir(void); int trace_epoch_time_save(void); void trace_mem_free(void); void trace_mem_per_thread_free(void); From patchwork Wed Oct 12 12:31:09 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Marchand X-Patchwork-Id: 118064 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id D56B8A00C4; Wed, 12 Oct 2022 14:32:09 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A0D7A43085; Wed, 12 Oct 2022 14:31:51 +0200 (CEST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mails.dpdk.org (Postfix) with ESMTP id 4EE9543058 for ; Wed, 12 Oct 2022 14:31:50 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1665577909; 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=5ynMAnByq7XDX62C4ZyybGA61qKzHf/nii7efk5nEvc=; b=hm9/O1SEUwzhqlKOfgexWoqJ4Lvc1uYKYvsBHMD7Tyms0PN0WkqZeKwwX8x0jI6/2IzhAg ul5hsRqfSK2BxBc6qdGgF0BWNwG2HKYnw11kOO5z93jX5tNU1kTM1d9CFfbt2Q8rmb5h9j RwsX1OBHGDh7H+/XUQZzeK6vb00Zu/8= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-645-kpgTvk4GNCy6wiaUr4PFuA-1; Wed, 12 Oct 2022 08:31:46 -0400 X-MC-Unique: kpgTvk4GNCy6wiaUr4PFuA-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 6C666800B23; Wed, 12 Oct 2022 12:31:46 +0000 (UTC) Received: from localhost.localdomain (ovpn-193-115.brq.redhat.com [10.40.193.115]) by smtp.corp.redhat.com (Postfix) with ESMTP id 79F264EA52; Wed, 12 Oct 2022 12:31:45 +0000 (UTC) From: David Marchand To: dev@dpdk.org Cc: jerinj@marvell.com, skori@marvell.com, stable@dpdk.org Subject: [PATCH v3 6/9] trace: fix race in debug dump Date: Wed, 12 Oct 2022 14:31:09 +0200 Message-Id: <20221012123112.2951802-7-david.marchand@redhat.com> In-Reply-To: <20221012123112.2951802-1-david.marchand@redhat.com> References: <20220921120359.2201131-1-david.marchand@redhat.com> <20221012123112.2951802-1-david.marchand@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.5 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org trace->nb_trace_mem_list access must be under trace->lock to avoid races with threads allocating/freeing their trace buffers. Fixes: f6b2d65dcd5d ("trace: implement debug dump") Cc: stable@dpdk.org Signed-off-by: David Marchand Acked-by: Jerin Jacob Acked-by: Sunil Kumar Kori --- lib/eal/common/eal_common_trace.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/eal/common/eal_common_trace.c b/lib/eal/common/eal_common_trace.c index 6aa11a3b50..ec168e37b3 100644 --- a/lib/eal/common/eal_common_trace.c +++ b/lib/eal/common/eal_common_trace.c @@ -259,10 +259,9 @@ trace_lcore_mem_dump(FILE *f) struct __rte_trace_header *header; uint32_t count; - if (trace->nb_trace_mem_list == 0) - return; - rte_spinlock_lock(&trace->lock); + if (trace->nb_trace_mem_list == 0) + goto out; fprintf(f, "nb_trace_mem_list = %d\n", trace->nb_trace_mem_list); fprintf(f, "\nTrace mem info\n--------------\n"); for (count = 0; count < trace->nb_trace_mem_list; count++) { @@ -273,6 +272,7 @@ trace_lcore_mem_dump(FILE *f) header->stream_header.lcore_id, header->stream_header.thread_name); } +out: rte_spinlock_unlock(&trace->lock); } From patchwork Wed Oct 12 12:31:10 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Marchand X-Patchwork-Id: 118065 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 6CB62A00C4; Wed, 12 Oct 2022 14:32:15 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id BA5D443073; Wed, 12 Oct 2022 14:31:54 +0200 (CEST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mails.dpdk.org (Postfix) with ESMTP id 26E134306F for ; Wed, 12 Oct 2022 14:31:53 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1665577912; 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=yAnb8nAy0I8jLxTXVVkYpc9Z3EH50hkfLpL1EZ5BU+w=; b=i8ApledtC3Uv2ovaF7zUFzvPuDuykfA24PTMETbM0yQBeXNz2dAHPTwZbuqFqNGVS2nr2U FeA0jZ1it1FmWAy5jwOM7abGMgqMx/xerEUnrL46Jo/oGpfOigKWyge+KiUkEfVhAyohll 0eij7XSqQAMxYbIIgSgmVZGJyDSjQr4= Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-569-UQGP_XShMSKhfBonM2QY1Q-1; Wed, 12 Oct 2022 08:31:49 -0400 X-MC-Unique: UQGP_XShMSKhfBonM2QY1Q-1 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 5A5681C08969; Wed, 12 Oct 2022 12:31:49 +0000 (UTC) Received: from localhost.localdomain (ovpn-193-115.brq.redhat.com [10.40.193.115]) by smtp.corp.redhat.com (Postfix) with ESMTP id 6A9B41111C60; Wed, 12 Oct 2022 12:31:48 +0000 (UTC) From: David Marchand To: dev@dpdk.org Cc: jerinj@marvell.com, skori@marvell.com, stable@dpdk.org Subject: [PATCH v3 7/9] trace: fix metadata dump Date: Wed, 12 Oct 2022 14:31:10 +0200 Message-Id: <20221012123112.2951802-8-david.marchand@redhat.com> In-Reply-To: <20221012123112.2951802-1-david.marchand@redhat.com> References: <20220921120359.2201131-1-david.marchand@redhat.com> <20221012123112.2951802-1-david.marchand@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.3 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org The API does not describe that metadata dump is conditioned to enabling any trace points. While at it, merge dump unit tests into the generic trace_autotest to enhance coverage. Fixes: f6b2d65dcd5d ("trace: implement debug dump") Cc: stable@dpdk.org Signed-off-by: David Marchand Acked-by: Sunil Kumar Kori --- app/test/test_trace.c | 44 +++++++++------------------ lib/eal/common/eal_common_trace_ctf.c | 3 -- 2 files changed, 15 insertions(+), 32 deletions(-) diff --git a/app/test/test_trace.c b/app/test/test_trace.c index 2660f52f1d..6bedf14024 100644 --- a/app/test/test_trace.c +++ b/app/test/test_trace.c @@ -20,20 +20,6 @@ test_trace(void) return TEST_SKIPPED; } -static int -test_trace_dump(void) -{ - printf("trace_dump not supported on Windows, skipping test\n"); - return TEST_SKIPPED; -} - -static int -test_trace_metadata_dump(void) -{ - printf("trace_metadata_dump not supported on Windows, skipping test\n"); - return TEST_SKIPPED; -} - #else static int32_t @@ -214,6 +200,19 @@ test_generic_trace_points(void) return TEST_SUCCESS; } +static int +test_trace_dump(void) +{ + rte_trace_dump(stdout); + return 0; +} + +static int +test_trace_metadata_dump(void) +{ + return rte_trace_metadata_dump(stdout); +} + static struct unit_test_suite trace_tests = { .suite_name = "trace autotest", .setup = NULL, @@ -226,6 +225,8 @@ static struct unit_test_suite trace_tests = { TEST_CASE(test_trace_point_globbing), TEST_CASE(test_trace_point_regex), TEST_CASE(test_trace_points_lookup), + TEST_CASE(test_trace_dump), + TEST_CASE(test_trace_metadata_dump), TEST_CASES_END() } }; @@ -236,21 +237,6 @@ test_trace(void) return unit_test_suite_runner(&trace_tests); } -static int -test_trace_dump(void) -{ - rte_trace_dump(stdout); - return 0; -} - -static int -test_trace_metadata_dump(void) -{ - return rte_trace_metadata_dump(stdout); -} - #endif /* !RTE_EXEC_ENV_WINDOWS */ REGISTER_TEST_COMMAND(trace_autotest, test_trace); -REGISTER_TEST_COMMAND(trace_dump, test_trace_dump); -REGISTER_TEST_COMMAND(trace_metadata_dump, test_trace_metadata_dump); diff --git a/lib/eal/common/eal_common_trace_ctf.c b/lib/eal/common/eal_common_trace_ctf.c index 335932a271..c6775c3b4d 100644 --- a/lib/eal/common/eal_common_trace_ctf.c +++ b/lib/eal/common/eal_common_trace_ctf.c @@ -358,9 +358,6 @@ rte_trace_metadata_dump(FILE *f) char *ctf_meta = trace->ctf_meta; int rc; - if (!rte_trace_is_enabled()) - return 0; - if (ctf_meta == NULL) return -EINVAL; From patchwork Wed Oct 12 12:31:11 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Marchand X-Patchwork-Id: 118067 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id AA5DDA00C4; Wed, 12 Oct 2022 14:32:27 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id EC06A43093; Wed, 12 Oct 2022 14:32:07 +0200 (CEST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mails.dpdk.org (Postfix) with ESMTP id B2D884308B for ; Wed, 12 Oct 2022 14:32:06 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1665577926; 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=pHG1F4tApwHwoNoWmHSx8adeLcq4BMh6DkIW7dJ/E2Q=; b=I0Rey2UwOiZ2Wau8+c4n0Ilj0ANsRVZDMtYBqJOTDNWoOpEub4MeidcIsHSj6pi+Ax/BD8 W509gf3jwjo40dGJYq2wmJMHDdsMyyUmoGhjorOMO5nFa5f8d6dvixi2j+eIptmad1AmBy +zvYTMUrY1dB0dl2TiSTFVUI9mIyG64= Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-389-r2663gr8PBKYsiA2ohNIAw-1; Wed, 12 Oct 2022 08:31:52 -0400 X-MC-Unique: r2663gr8PBKYsiA2ohNIAw-1 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 4E8F53C11048; Wed, 12 Oct 2022 12:31:52 +0000 (UTC) Received: from localhost.localdomain (ovpn-193-115.brq.redhat.com [10.40.193.115]) by smtp.corp.redhat.com (Postfix) with ESMTP id 7EE3C40C206B; Wed, 12 Oct 2022 12:31:51 +0000 (UTC) From: David Marchand To: dev@dpdk.org Cc: jerinj@marvell.com, skori@marvell.com Subject: [PATCH v3 8/9] trace: remove limitation on trace point name Date: Wed, 12 Oct 2022 14:31:11 +0200 Message-Id: <20221012123112.2951802-9-david.marchand@redhat.com> In-Reply-To: <20221012123112.2951802-1-david.marchand@redhat.com> References: <20220921120359.2201131-1-david.marchand@redhat.com> <20221012123112.2951802-1-david.marchand@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.1 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org The name of a trace point is provided as a constant string via the RTE_TRACE_POINT_REGISTER macro. We can rely on an explicit constant string in the binary and simply point at it. There is then no need for a (fixed size) copy. Signed-off-by: David Marchand --- Changes since v2: - stored trace point name in a static variable to make sure the string is put in .data, --- lib/eal/common/eal_common_trace.c | 10 +++------- lib/eal/common/eal_common_trace_utils.c | 2 +- lib/eal/common/eal_trace.h | 3 +-- lib/eal/include/rte_trace_point_register.h | 3 ++- 4 files changed, 7 insertions(+), 11 deletions(-) diff --git a/lib/eal/common/eal_common_trace.c b/lib/eal/common/eal_common_trace.c index ec168e37b3..5caaac8e59 100644 --- a/lib/eal/common/eal_common_trace.c +++ b/lib/eal/common/eal_common_trace.c @@ -235,7 +235,7 @@ rte_trace_point_lookup(const char *name) return NULL; STAILQ_FOREACH(tp, &tp_list, next) - if (strncmp(tp->name, name, TRACE_POINT_NAME_SIZE) == 0) + if (strcmp(tp->name, name) == 0) return tp->handle; return NULL; @@ -492,10 +492,7 @@ __rte_trace_point_register(rte_trace_point_t *handle, const char *name, } /* Initialize the trace point */ - if (rte_strscpy(tp->name, name, TRACE_POINT_NAME_SIZE) < 0) { - trace_err("name is too long"); - goto free; - } + tp->name = name; /* Copy the accumulated fields description and clear it for the next * trace point. @@ -517,8 +514,7 @@ __rte_trace_point_register(rte_trace_point_t *handle, const char *name, /* All Good !!! */ return 0; -free: - free(tp); + fail: if (trace.register_errno == 0) trace.register_errno = rte_errno; diff --git a/lib/eal/common/eal_common_trace_utils.c b/lib/eal/common/eal_common_trace_utils.c index 7bf1c05e12..72108d36a6 100644 --- a/lib/eal/common/eal_common_trace_utils.c +++ b/lib/eal/common/eal_common_trace_utils.c @@ -42,7 +42,7 @@ trace_entry_compare(const char *name) int count = 0; STAILQ_FOREACH(tp, tp_list, next) { - if (strncmp(tp->name, name, TRACE_POINT_NAME_SIZE) == 0) + if (strcmp(tp->name, name) == 0) count++; if (count > 1) { trace_err("found duplicate entry %s", name); diff --git a/lib/eal/common/eal_trace.h b/lib/eal/common/eal_trace.h index 72a5a461ae..26a18a2c48 100644 --- a/lib/eal/common/eal_trace.h +++ b/lib/eal/common/eal_trace.h @@ -24,14 +24,13 @@ #define TRACE_PREFIX_LEN 12 #define TRACE_DIR_STR_LEN (sizeof("YYYY-mm-dd-AM-HH-MM-SS") + TRACE_PREFIX_LEN) -#define TRACE_POINT_NAME_SIZE 64 #define TRACE_CTF_MAGIC 0xC1FC1FC1 #define TRACE_MAX_ARGS 32 struct trace_point { STAILQ_ENTRY(trace_point) next; rte_trace_point_t *handle; - char name[TRACE_POINT_NAME_SIZE]; + const char *name; char *ctf_field; }; diff --git a/lib/eal/include/rte_trace_point_register.h b/lib/eal/include/rte_trace_point_register.h index 2e61439940..a32f4d731b 100644 --- a/lib/eal/include/rte_trace_point_register.h +++ b/lib/eal/include/rte_trace_point_register.h @@ -20,9 +20,10 @@ RTE_DECLARE_PER_LCORE(volatile int, trace_point_sz); #define RTE_TRACE_POINT_REGISTER(trace, name) \ rte_trace_point_t __attribute__((section("__rte_trace_point"))) __##trace; \ +static const char __##trace##_name[] = RTE_STR(name); \ RTE_INIT(trace##_init) \ { \ - __rte_trace_point_register(&__##trace, RTE_STR(name), \ + __rte_trace_point_register(&__##trace, __##trace##_name, \ (void (*)(void)) trace); \ } From patchwork Wed Oct 12 12:31:12 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Marchand X-Patchwork-Id: 118066 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id DB16DA00C4; Wed, 12 Oct 2022 14:32:22 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id C51434308A; Wed, 12 Oct 2022 14:32:00 +0200 (CEST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mails.dpdk.org (Postfix) with ESMTP id 41FB243080 for ; Wed, 12 Oct 2022 14:31:59 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1665577918; 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=Z2QaB9ADAv5547IoLWyJC+0AJHp9QNfZSozJ/OEGY/U=; b=HisrygfmxGYsUnoRSmxlNyf7OTW8MSilmod5vznriMT8cnxr6g9skQY1Qu4MEURO4JMYMj B2EXDg3v0Tu4TMHiTdO9Ho2ULWoiVdTnDFT+T8EUGHNvhSGUMZ7yLB/kLxe6E723/qY48v kXwaJQzmswZH7OEislGrwj5qUeFVxyE= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-39-QRz565cJMAC9OZLuXiHxmA-1; Wed, 12 Oct 2022 08:31:55 -0400 X-MC-Unique: QRz565cJMAC9OZLuXiHxmA-1 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.rdu2.redhat.com [10.11.54.2]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 1919F185A7A3; Wed, 12 Oct 2022 12:31:55 +0000 (UTC) Received: from localhost.localdomain (ovpn-193-115.brq.redhat.com [10.40.193.115]) by smtp.corp.redhat.com (Postfix) with ESMTP id 4846E404CD9B; Wed, 12 Oct 2022 12:31:54 +0000 (UTC) From: David Marchand To: dev@dpdk.org Cc: jerinj@marvell.com, skori@marvell.com Subject: [PATCH v3 9/9] trace: remove limitation on directory Date: Wed, 12 Oct 2022 14:31:12 +0200 Message-Id: <20221012123112.2951802-10-david.marchand@redhat.com> In-Reply-To: <20221012123112.2951802-1-david.marchand@redhat.com> References: <20220921120359.2201131-1-david.marchand@redhat.com> <20221012123112.2951802-1-david.marchand@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.2 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Remove arbitrary limit on 12 characters of the file prefix used for the directory where to store the traces. Simplify the code by relying on dynamic allocations. Signed-off-by: David Marchand Acked-by: Jerin Jacob Acked-by: Sunil Kumar Kori --- lib/eal/common/eal_common_trace_utils.c | 68 +++++++++---------------- lib/eal/common/eal_trace.h | 5 +- 2 files changed, 25 insertions(+), 48 deletions(-) diff --git a/lib/eal/common/eal_common_trace_utils.c b/lib/eal/common/eal_common_trace_utils.c index 72108d36a6..8561a0e198 100644 --- a/lib/eal/common/eal_common_trace_utils.c +++ b/lib/eal/common/eal_common_trace_utils.c @@ -87,11 +87,11 @@ trace_uuid_generate(void) } static int -trace_session_name_generate(char *trace_dir) +trace_session_name_generate(char **trace_dir) { + char date[sizeof("YYYY-mm-dd-AM-HH-MM-SS")]; struct tm *tm_result; time_t tm; - int rc; tm = time(NULL); if ((int)tm == -1) @@ -101,38 +101,32 @@ trace_session_name_generate(char *trace_dir) if (tm_result == NULL) goto fail; - rc = rte_strscpy(trace_dir, eal_get_hugefile_prefix(), - TRACE_PREFIX_LEN); - if (rc == -E2BIG) - rc = TRACE_PREFIX_LEN - 1; - trace_dir[rc++] = '-'; - - rc = strftime(trace_dir + rc, TRACE_DIR_STR_LEN - rc, - "%Y-%m-%d-%p-%I-%M-%S", tm_result); - if (rc == 0) { + if (strftime(date, sizeof(date), "%Y-%m-%d-%p-%I-%M-%S", tm_result) == 0) { errno = ENOSPC; goto fail; } - return rc; + if (asprintf(trace_dir, "%s-%s", eal_get_hugefile_prefix(), date) == -1) + goto fail; + + return 0; fail: rte_errno = errno; - return -rte_errno; + return -1; } static int trace_dir_update(const char *str) { struct trace *trace = trace_obj_get(); - int rc, remaining; - - remaining = sizeof(trace->dir) - trace->dir_offset; - rc = rte_strscpy(&trace->dir[0] + trace->dir_offset, str, remaining); - if (rc < 0) - goto fail; + char *dir; + int rc; - trace->dir_offset += rc; -fail: + rc = asprintf(&dir, "%s%s", trace->dir != NULL ? trace->dir : "", str); + if (rc != -1) { + free(trace->dir); + trace->dir = dir; + } return rc; } @@ -246,22 +240,15 @@ eal_trace_mode_args_save(const char *val) int eal_trace_dir_args_save(char const *val) { - struct trace *trace = trace_obj_get(); char *dir_path; int rc; - if (strlen(val) >= sizeof(trace->dir) - 1) { - trace_err("input string is too big"); - return -ENAMETOOLONG; - } - if (asprintf(&dir_path, "%s/", val) == -1) { trace_err("failed to copy directory: %s", strerror(errno)); return -ENOMEM; } rc = trace_dir_update(dir_path); - free(dir_path); return rc; } @@ -289,10 +276,8 @@ trace_epoch_time_save(void) } static int -trace_dir_default_path_get(char *dir_path) +trace_dir_default_path_get(char **dir_path) { - struct trace *trace = trace_obj_get(); - uint32_t size = sizeof(trace->dir); struct passwd *pwd; char *home_dir; @@ -308,8 +293,8 @@ trace_dir_default_path_get(char *dir_path) } /* Append dpdk-traces to directory */ - if (snprintf(dir_path, size, "%s/dpdk-traces/", home_dir) < 0) - return -ENAMETOOLONG; + if (asprintf(dir_path, "%s/dpdk-traces/", home_dir) == -1) + return -ENOMEM; return 0; } @@ -318,25 +303,19 @@ static int trace_mkdir(void) { struct trace *trace = trace_obj_get(); - char session[TRACE_DIR_STR_LEN]; static bool already_done; - char *dir_path; + char *session; int rc; if (already_done) return 0; - if (!trace->dir_offset) { - dir_path = calloc(1, sizeof(trace->dir)); - if (dir_path == NULL) { - trace_err("fail to allocate memory"); - return -ENOMEM; - } + if (trace->dir == NULL) { + char *dir_path; - rc = trace_dir_default_path_get(dir_path); + rc = trace_dir_default_path_get(&dir_path); if (rc < 0) { trace_err("fail to get default path"); - free(dir_path); return rc; } @@ -354,10 +333,11 @@ trace_mkdir(void) return -rte_errno; } - rc = trace_session_name_generate(session); + rc = trace_session_name_generate(&session); if (rc < 0) return rc; rc = trace_dir_update(session); + free(session); if (rc < 0) return rc; diff --git a/lib/eal/common/eal_trace.h b/lib/eal/common/eal_trace.h index 26a18a2c48..d66bcfe198 100644 --- a/lib/eal/common/eal_trace.h +++ b/lib/eal/common/eal_trace.h @@ -22,8 +22,6 @@ #define trace_crit(fmt, args...) \ RTE_LOG(CRIT, EAL, "%s():%u " fmt "\n", __func__, __LINE__, ## args) -#define TRACE_PREFIX_LEN 12 -#define TRACE_DIR_STR_LEN (sizeof("YYYY-mm-dd-AM-HH-MM-SS") + TRACE_PREFIX_LEN) #define TRACE_CTF_MAGIC 0xC1FC1FC1 #define TRACE_MAX_ARGS 32 @@ -50,8 +48,7 @@ struct trace_arg { }; struct trace { - char dir[PATH_MAX]; - int dir_offset; + char *dir; int register_errno; uint32_t status; enum rte_trace_mode mode;