From patchwork Tue Apr 15 18:46:48 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yabin Cui X-Patchwork-Id: 14052573 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 226ADC369AB for ; Tue, 15 Apr 2025 18:55:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Type:Cc:To:From: Subject:Message-ID:References:Mime-Version:In-Reply-To:Date:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=IegfUhI5gVIS8XkKPR5l9zWak8XwOvvgw8K+zjrd1EM=; b=b2jgT4evgSX24IHQk7oVphhE9z yjOUVWlQps39WgA0bD4orgiW5tEAtkDJplSB7FSouBnNb6Q2SjiYSPoKdSHQDUDUw5kVgYtQRSl5G QYKRK7CJNpJ4SiwkRq495DnYgkCVnKsd/W9FlPn4VLaU+CeAkU46dGhYRW2Qj5Fx7HFYZHKABQUEh xn80vPRl13TwVJg0lyv7BEr5KRLTsddmmwl9YvC46ZYwoQo/wqIbnlTco4+EA5pzG99VkmXrURzLt 7F+wBQKRAK7WdJhbAOJKBey8tw+toQf8SSGBVoK/DSO2cLUcFzizl2GEgW7W/uf8c8/cewXm3ccp4 9XiYGnbg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1u4lR3-00000006n58-2dup; Tue, 15 Apr 2025 18:55:05 +0000 Received: from mail-oo1-xc49.google.com ([2607:f8b0:4864:20::c49]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1u4lJD-00000006lJ3-2fYY for linux-arm-kernel@lists.infradead.org; Tue, 15 Apr 2025 18:47:00 +0000 Received: by mail-oo1-xc49.google.com with SMTP id 006d021491bc7-6049e1c6629so720712eaf.1 for ; Tue, 15 Apr 2025 11:46:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1744742818; x=1745347618; darn=lists.infradead.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=IegfUhI5gVIS8XkKPR5l9zWak8XwOvvgw8K+zjrd1EM=; b=L/4/3PVGzHNvZ4EaLcD13SLNBa5H6uhimcA9gbxObqAP6ey1QSP0Yods48hZyVZPPN UlZVarzgpIuoAuWkIpkFLO2LmWvguSwFDXMgPRmZHiupF+bOeRMzTyHY8wlBZilBptLG 31czHhDNyOFYTxi1pqmrzsE7/JdU2/utmTzi/3d/c0CO7E/aFNtLiW2070SBLGaykgMx /T0Lkzv1+F89vyCAuIXOcfhMQaF0381Hvg4Z/ZD/8FfmWe3HVRbFr14bY/slv812ny3g bDeHAO8Nl0QCZ+HmcpF8/hw5sdk2YhoVrcv70Te3Ou2+lYUAUnGpEoI65fVpF60xMlgt dWGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744742818; x=1745347618; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=IegfUhI5gVIS8XkKPR5l9zWak8XwOvvgw8K+zjrd1EM=; b=uC4l1quHtM57uvK1MecrkU2gsTWgDFZeb3SF05uXqjCsJ13B35JXAGHkWhX0eU4FDC 6ZF6JsQhrOidTCIkhwe+ks6lGqBjiqgC9juLQOtxeoDVp3JUiDHtU6Eieq590bzzjfhv YD4Yb5de2//SXl3ln+jD1WoqMEZ4qqrqEUQaoq0B3OHBtQ4IsLYpnwn5CD2Tt/fsxq7D jpI4RsB4ddMYGv4vyCLFN1ClhxK2XptNcv/q2CDMFLqx1Mkc5YpkBvxqx5Rmk36M07gH S+9OoW9ot5zn4q3m/ClhoCWWFoK3iDmyz2t0vzi6DLJEoDa7QIYgm+/pT6QqvZyzHMX9 5+Zw== X-Forwarded-Encrypted: i=1; AJvYcCVuuN3CrAA83+P/jTtFJtV9StyBgq+bTdAbBLZk4WfneId4fN1gwKpZVVT2LgF3ioIjnmpyP0XPDJy0mriovSSu@lists.infradead.org X-Gm-Message-State: AOJu0Yz0Usa2IcterPDcWWVu5EoZsPd1S910dV3Hq2fnjcaTLV+nrEWp yIiD6H6PSPx3hO+tyt388w7Q3tpc1aSbKQdCF5ZVh8dXiJllcTpmf2X1JCBzGkKb0TinYzvoLcO 2 X-Google-Smtp-Source: AGHT+IEQi8PNtHVcRy7LuBEXq5xHg4BzdFcTSBuGvgAfDtsQNpuwbpRyY+zu7kia13Vkit4PH+1HBu9PL1E= X-Received: from oabqw7.prod.google.com ([2002:a05:6870:6f07:b0:2b8:e401:9c8d]) (user=yabinc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6870:e05:b0:2c2:343d:1368 with SMTP id 586e51a60fabf-2d4c3eaca2dmr192919fac.29.1744742817901; Tue, 15 Apr 2025 11:46:57 -0700 (PDT) Date: Tue, 15 Apr 2025 11:46:48 -0700 In-Reply-To: <20250415184649.356683-1-yabinc@google.com> Mime-Version: 1.0 References: <20250415184649.356683-1-yabinc@google.com> X-Mailer: git-send-email 2.49.0.604.gff1f9ca942-goog Message-ID: <20250415184649.356683-2-yabinc@google.com> Subject: [PATCH v4 1/2] coresight: catu: Introduce refcount and spinlock for enabling/disabling From: Yabin Cui To: Suzuki K Poulose , Mike Leach , James Clark , Leo Yan , Jie Gan , Alexander Shishkin Cc: coresight@lists.linaro.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Yabin Cui X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250415_114659_671779_00850AE4 X-CRM114-Status: GOOD ( 20.39 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org When tracing ETM data on multiple CPUs concurrently via the perf interface, the CATU device is shared across different CPU paths. This can lead to race conditions when multiple CPUs attempt to enable or disable the CATU device simultaneously. To address these race conditions, this patch introduces the following changes: 1. The enable and disable operations for the CATU device are not reentrant. Therefore, a spinlock is added to ensure that only one CPU can enable or disable a given CATU device at any point in time. 2. A reference counter is used to manage the enable/disable state of the CATU device. The device is enabled when the first CPU requires it and is only disabled when the last CPU finishes using it. This ensures the device remains active as long as at least one CPU needs it. Signed-off-by: Yabin Cui --- drivers/hwtracing/coresight/coresight-catu.c | 25 +++++++++++++------- drivers/hwtracing/coresight/coresight-catu.h | 1 + 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/drivers/hwtracing/coresight/coresight-catu.c b/drivers/hwtracing/coresight/coresight-catu.c index fa170c966bc3..3909b562b077 100644 --- a/drivers/hwtracing/coresight/coresight-catu.c +++ b/drivers/hwtracing/coresight/coresight-catu.c @@ -458,12 +458,17 @@ static int catu_enable_hw(struct catu_drvdata *drvdata, enum cs_mode cs_mode, static int catu_enable(struct coresight_device *csdev, enum cs_mode mode, void *data) { - int rc; + int rc = 0; struct catu_drvdata *catu_drvdata = csdev_to_catu_drvdata(csdev); - CS_UNLOCK(catu_drvdata->base); - rc = catu_enable_hw(catu_drvdata, mode, data); - CS_LOCK(catu_drvdata->base); + guard(raw_spinlock_irqsave)(&catu_drvdata->spinlock); + if (csdev->refcnt == 0) { + CS_UNLOCK(catu_drvdata->base); + rc = catu_enable_hw(catu_drvdata, mode, data); + CS_LOCK(catu_drvdata->base); + } + if (!rc) + csdev->refcnt++; return rc; } @@ -486,12 +491,15 @@ static int catu_disable_hw(struct catu_drvdata *drvdata) static int catu_disable(struct coresight_device *csdev, void *__unused) { - int rc; + int rc = 0; struct catu_drvdata *catu_drvdata = csdev_to_catu_drvdata(csdev); - CS_UNLOCK(catu_drvdata->base); - rc = catu_disable_hw(catu_drvdata); - CS_LOCK(catu_drvdata->base); + guard(raw_spinlock_irqsave)(&catu_drvdata->spinlock); + if (--csdev->refcnt == 0) { + CS_UNLOCK(catu_drvdata->base); + rc = catu_disable_hw(catu_drvdata); + CS_LOCK(catu_drvdata->base); + } return rc; } @@ -550,6 +558,7 @@ static int __catu_probe(struct device *dev, struct resource *res) dev->platform_data = pdata; drvdata->base = base; + raw_spin_lock_init(&drvdata->spinlock); catu_desc.access = CSDEV_ACCESS_IOMEM(base); catu_desc.pdata = pdata; catu_desc.dev = dev; diff --git a/drivers/hwtracing/coresight/coresight-catu.h b/drivers/hwtracing/coresight/coresight-catu.h index 141feac1c14b..755776cd19c5 100644 --- a/drivers/hwtracing/coresight/coresight-catu.h +++ b/drivers/hwtracing/coresight/coresight-catu.h @@ -65,6 +65,7 @@ struct catu_drvdata { void __iomem *base; struct coresight_device *csdev; int irq; + raw_spinlock_t spinlock; }; #define CATU_REG32(name, offset) \ From patchwork Tue Apr 15 18:46:49 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yabin Cui X-Patchwork-Id: 14052574 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id B15DEC369BA for ; Tue, 15 Apr 2025 18:57:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Type:Cc:To:From: Subject:Message-ID:References:Mime-Version:In-Reply-To:Date:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=vrce6Ur/Z1bBcoSkzpW7fAIgWwmrsZNhT8/LajKfaJQ=; b=wFL2X1h4kcfSFK18fMnEdm8iCR DMdP7kROoLgb80SZGipz+U2SJooTODBbw9he9Ke6TCYuZjCE+kj72BNLyZkUMDsTkKLcNt0w9sKa/ nXq659vlEcBMvvDUT1icQw/MfRjBvkQBaWyjCRTp5/3bDPzeFobluGklZNs7jbtc6Nzue6JqsM6jc NuoEkj3dj35mr0vDToJsCrCd7iEmB3xZ5g4+RsBbPd9CdTFD8rk0HWuzQMBauqs7gmp9LTvwa07nt ZZbitQneme3EaGfuLLjIdgsiMCl7DjIJ58I6grXWcWaHqp+8pihtsFPXf/+/GePUkQWz4N2kxlcKl uVced2jQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1u4lSr-00000006nNI-1RKE; Tue, 15 Apr 2025 18:56:57 +0000 Received: from mail-pl1-x64a.google.com ([2607:f8b0:4864:20::64a]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1u4lJH-00000006lK4-1Djs for linux-arm-kernel@lists.infradead.org; Tue, 15 Apr 2025 18:47:04 +0000 Received: by mail-pl1-x64a.google.com with SMTP id d9443c01a7336-227ed471999so51569465ad.3 for ; Tue, 15 Apr 2025 11:47:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1744742822; x=1745347622; darn=lists.infradead.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=vrce6Ur/Z1bBcoSkzpW7fAIgWwmrsZNhT8/LajKfaJQ=; b=w0catigIqDOnMVJN5ewMHPiacNy/tadEPn4x/Qv3Aii6OBWgMpT4G61oB6BqI9IRc3 pdT3f6m0HwVn4ujSbASPtojyL+WRlM+KvrPLzeC82pnL7e018828j/z+vGchnsCvbuz/ e0B/Cu40MdZF/sR97xYx8959+b1etzdECTAz3bQC/soTFbEvYZlnjvMuSw1wRbJ5MZ4j Np2ZCUL1QrqUCBbsXOMnlNVfzoiLA31/KPIfkvCoFjxRFCadzPalxbCCVIruQFW5MPda es0PKzQ9R3SZGE96hbeCHymtYd5IByPnOaKMNbKAh0o4SnLG0OMPZwUBhG8sLe1Xg9Av GxZg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744742822; x=1745347622; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=vrce6Ur/Z1bBcoSkzpW7fAIgWwmrsZNhT8/LajKfaJQ=; b=gKK/OHymlq+Uau+Nvp7cZErS0KoRTWSfGjpZjpsgCSzbsAHKt8i0TWX2Q6fhMroEQ/ ruV0Ck/yGYFydUr8ldOqbGwKUeB+hgFZr1d4oN1GTZMQl8tz5iWDpqNkWHkULKN0H9J4 sFmZxDvmOl237bT0mcQ10IyGiL+nImXnCp15vkGdheI0xBlK51k3DF3chLoKaeROGz0v TL8AE3G3mMt/TO/D9y/UK+Cu55/jB+IlNKhjqKRgpQGcxiI3BW/HsP1X9BIVSramxPvJ NH9h0gux4zWtp40dG7ifmFn4X8uowxSQQCEUxSI3F7MGceheqVqPZEZE0pabq2+6KKbT MjtA== X-Forwarded-Encrypted: i=1; AJvYcCW0dE3RrOWme33Z/JFcZ19E7jDstcs657qvFAONj4asIl3eZPYRobAAK4JNyVsHbgPbp/2ylTzDc4qBgO8RTVkA@lists.infradead.org X-Gm-Message-State: AOJu0YxUBTOsQR7KMprxBQkEbCRHca0rOUNmOb7Xa6H0TqaMHAdd8sLy /urucT+utknBOH6VHy/mVBeDIrH4lSZBU5ir+XWyinsw11V//UtvFj8/jJH2E9Dc9h3RUB98Xmd H X-Google-Smtp-Source: AGHT+IG3fu0AcNyUIzJ/75A6XmoJKAgZCtU5+fN/L99HtW09ex7tvaGVLFa8UCS6eaNGUaRKbqlz0X7DUhU= X-Received: from plcy20.prod.google.com ([2002:a17:903:114:b0:224:13ec:ae57]) (user=yabinc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:eb8a:b0:219:e4b0:4286 with SMTP id d9443c01a7336-22c319f77e6mr3968165ad.29.1744742822049; Tue, 15 Apr 2025 11:47:02 -0700 (PDT) Date: Tue, 15 Apr 2025 11:46:49 -0700 In-Reply-To: <20250415184649.356683-1-yabinc@google.com> Mime-Version: 1.0 References: <20250415184649.356683-1-yabinc@google.com> X-Mailer: git-send-email 2.49.0.604.gff1f9ca942-goog Message-ID: <20250415184649.356683-3-yabinc@google.com> Subject: [PATCH v4 2/2] coresight: core: Disable helpers for devices that fail to enable From: Yabin Cui To: Suzuki K Poulose , Mike Leach , James Clark , Leo Yan , Jie Gan , Alexander Shishkin Cc: coresight@lists.linaro.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Yabin Cui X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250415_114703_329591_03E50F04 X-CRM114-Status: GOOD ( 12.28 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org When enabling a SINK or LINK type coresight device fails, the associated helpers should be disabled. Signed-off-by: Yabin Cui Suggested-by: Suzuki K Poulose --- drivers/hwtracing/coresight/coresight-core.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/drivers/hwtracing/coresight/coresight-core.c b/drivers/hwtracing/coresight/coresight-core.c index fb43ef6a3b1f..d9fcea69d221 100644 --- a/drivers/hwtracing/coresight/coresight-core.c +++ b/drivers/hwtracing/coresight/coresight-core.c @@ -486,8 +486,10 @@ int coresight_enable_path(struct coresight_path *path, enum cs_mode mode, * that need disabling. Disabling the path here * would mean we could disrupt an existing session. */ - if (ret) + if (ret) { + coresight_disable_helpers(csdev, path); goto out; + } break; case CORESIGHT_DEV_TYPE_SOURCE: /* sources are enabled from either sysFS or Perf */ @@ -497,15 +499,17 @@ int coresight_enable_path(struct coresight_path *path, enum cs_mode mode, child = list_next_entry(nd, link)->csdev; ret = coresight_enable_link(csdev, parent, child, source); if (ret) - goto err; + goto err_disable_helpers; break; default: - goto err; + goto err_disable_helpers; } } out: return ret; +err_disable_helpers: + coresight_disable_helpers(csdev, path); err: coresight_disable_path_from(path, nd); goto out;