From nobody Sat Feb 7 18:29:11 2026 Received: from mail-pg1-f202.google.com (mail-pg1-f202.google.com [209.85.215.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D1A061D63C4 for ; Tue, 8 Apr 2025 19:59:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744142397; cv=none; b=MVM+5HJLSbVpYWsGC3+AXXjlQYB51bHA9X01wNUnT0B90uE0syIckmnW0rfaLniXJ5D6W8tnzQLBNJT20CqAiy/mZy6huUevaLVAU35ssNxL9Y1QD9N3FkV+QIC9ZSqThGNEjBY9XvKjyp7uTCz+skqJ3uXXIcGAICX8UWiZk9Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744142397; c=relaxed/simple; bh=WsROMcDsl0cD1/lC171DGiFQyn5e2YtAwhyaFuO5POc=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=JHuRDb0zoIeCjaneVIyAzq5mIlBlDE+18gGBo0PLyxwMXVsxfISls3HbdDeVJbdmLC33XcGSjQgqN9WSVMT8dhsjcl5MA6BylW7IbyQwewTMOjzZ/qKQvz3HRu/QfZzCVIwYpyW/ps6byIZuUJNk5DwLXEIosgNwoIw3yjVG9u4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--yabinc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=QBNOgN4r; arc=none smtp.client-ip=209.85.215.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--yabinc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="QBNOgN4r" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-af8f28f85a7so3790095a12.2 for ; Tue, 08 Apr 2025 12:59:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1744142395; x=1744747195; darn=vger.kernel.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=OGOL9Pd6k9CF55B36skDPeiu4f1DCBf3D97J1ryfge0=; b=QBNOgN4rgubT1lqQUSv43cQamWGEUGMF/YfEniAVR7BgJ8uOOMQsGAk8H7pnTDcPLX HQhaEFz/p8RwWdcz9FTrYGWGqFmGWUtVgw0a9YBhuoyDGseTVA+yVGxTG5AK6zMRJ/9c tqjLmXfBSb6ut1ZXpVbUJ4kmpfE4hJEK113LKp4ggNCKRkeqlxh4TIG2WuHeaverib3s BKHkIQAIT52WOJa5vtC+IdfdKYMTk8t1BHxN7Mn4mMDk9q6F74q2/gNWt6e9cBv1h0R/ Rm8NBxElVhnH7GXAg1C99G84ZjACOlfSC7wIocB99W48T/DHaefz9zsmmoOkHP5Y3ySX FJ3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744142395; x=1744747195; 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=OGOL9Pd6k9CF55B36skDPeiu4f1DCBf3D97J1ryfge0=; b=dAdSQK5oq4mADyrSLuLM3U5laxO+osKiY5HdN3enmtyJRuzE/xRvDObMTbayok5G8O 0WtUf1e06TXW3lYybjAZYtB8WPFVvpQFFzKP3RVmXffrCZsYssDP+aVShx+z/7ueO8hm Tzfu5E1/1Gg6kPl5jahAoiiGtwu8rlwPeP4EbXYvCAIVE8oZ/lc/ls1U+bTOulavHOV6 qzqczi+guIbUDxHgyNo4fYqlHK9TvhCzdCnzmDE+zOC5ONzKPTiyi+mazcKYjpJTG8Mj QrIK430b0jn7rGhuLpq71opWBqIStbyObD/BjvTSGkSTf+UMlkbd/N6t1se0JKCPctoM OtpQ== X-Forwarded-Encrypted: i=1; AJvYcCVF3lH6U8E3Zo8xTFeksNXcuAP2nfkjr2GKcrVmP6DyzXVIO72LD5N2jOsca3YpP/TgmbIHqcRomk9GRUU=@vger.kernel.org X-Gm-Message-State: AOJu0YxtLdy1p7eFLAJ0C5FcjobQSq+JJh+iYlr5H3w5rWnI6jHLQLgf uTXcbYaOgRCNvxUFk96cjcBxj3oiKw19+t+8UyABppB6ZCFsgkE4RNIeg4/O3ScOKygreyRf8p1 b X-Google-Smtp-Source: AGHT+IE7TnlNx9bjwfIhkbEL6D7Vucr8oUw1PVFiQcKtOgd3cuck9+KyF9HLeNJHrK1+IjYCXP9NYIhrumE= X-Received: from pgc4.prod.google.com ([2002:a05:6a02:2f84:b0:af9:9efd:c78f]) (user=yabinc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a21:9003:b0:1f5:79c4:5da0 with SMTP id adf61e73a8af0-201592b886amr372451637.31.1744142395143; Tue, 08 Apr 2025 12:59:55 -0700 (PDT) Date: Tue, 8 Apr 2025 12:59:21 -0700 In-Reply-To: <20250408195922.770377-1-yabinc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250408195922.770377-1-yabinc@google.com> X-Mailer: git-send-email 2.49.0.504.g3bcea36a83-goog Message-ID: <20250408195922.770377-2-yabinc@google.com> Subject: [PATCH v3 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 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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 Reviewed-by: James Clark --- 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/hwtraci= ng/coresight/coresight-catu.c index fa170c966bc3..30b78b2f8adb 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 *drvdat= a, enum cs_mode cs_mode, static int catu_enable(struct coresight_device *csdev, enum cs_mode mode, void *data) { - int rc; + int rc =3D 0; struct catu_drvdata *catu_drvdata =3D csdev_to_catu_drvdata(csdev); + guard(raw_spinlock_irqsave)(&catu_drvdata->spinlock); =20 - CS_UNLOCK(catu_drvdata->base); - rc =3D catu_enable_hw(catu_drvdata, mode, data); - CS_LOCK(catu_drvdata->base); + if (csdev->refcnt =3D=3D 0) { + CS_UNLOCK(catu_drvdata->base); + rc =3D catu_enable_hw(catu_drvdata, mode, data); + CS_LOCK(catu_drvdata->base); + } + if (!rc) + csdev->refcnt++; return rc; } =20 @@ -486,12 +491,15 @@ static int catu_disable_hw(struct catu_drvdata *drvda= ta) =20 static int catu_disable(struct coresight_device *csdev, void *__unused) { - int rc; + int rc =3D 0; struct catu_drvdata *catu_drvdata =3D csdev_to_catu_drvdata(csdev); + guard(raw_spinlock_irqsave)(&catu_drvdata->spinlock); =20 - CS_UNLOCK(catu_drvdata->base); - rc =3D catu_disable_hw(catu_drvdata); - CS_LOCK(catu_drvdata->base); + if (--csdev->refcnt =3D=3D 0) { + CS_UNLOCK(catu_drvdata->base); + rc =3D catu_disable_hw(catu_drvdata); + CS_LOCK(catu_drvdata->base); + } return rc; } =20 @@ -550,6 +558,7 @@ static int __catu_probe(struct device *dev, struct reso= urce *res) dev->platform_data =3D pdata; =20 drvdata->base =3D base; + raw_spin_lock_init(&drvdata->spinlock); catu_desc.access =3D CSDEV_ACCESS_IOMEM(base); catu_desc.pdata =3D pdata; catu_desc.dev =3D dev; diff --git a/drivers/hwtracing/coresight/coresight-catu.h b/drivers/hwtraci= ng/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; }; =20 #define CATU_REG32(name, offset) \ --=20 2.49.0.504.g3bcea36a83-goog From nobody Sat Feb 7 18:29:11 2026 Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D0231252904 for ; Tue, 8 Apr 2025 19:59:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744142400; cv=none; b=mqPVfyPGSc2Ek10fLxnvIJ6kwxghue86cBsoD7Wl0Ha27zTS+9SJAdMpPpoZoZ5mpDO7a8jqpXhwacx/ANoJ3ojJ35Sikn/eumtwucbhzwyCnD1Zi5UOlacB0BreiXYAIw9F21cFm/fEa3piv/NTVVikjuqBbOCDXQOW0CrGNas= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744142400; c=relaxed/simple; bh=3eKMst404MCWjVtSOpxFUSarhxkSczCeQNB0k+53r8U=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=Vnb7fDfThD5haC4Tmvn4uTmD8v0qSbn1mJnhh7x2Dyuiikr9KNT2dcdmgX3pLTuLr+gvG/xe1HCGKTlQRbXXi+4wRSuP7K7YE7gB9yTjgk5vlDnVu7Eg/Al1sebXfOzkyL2sPzQq/4DG/4hpkwJM3KdsoEJeQfEpBAkxxm98HT0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--yabinc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=s3H3mzi4; arc=none smtp.client-ip=209.85.214.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--yabinc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="s3H3mzi4" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-22406ee0243so44816365ad.3 for ; Tue, 08 Apr 2025 12:59:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1744142398; x=1744747198; darn=vger.kernel.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=q34M/yB/cQDsaQGLM78DLdQn24/bplv98nkSF+8rs08=; b=s3H3mzi41P/Y9FtMnX3wkSTYUUXr21hn6TvEP20Ss8e3lhyaygTT3utNTZrliLTxzC rrD69+/Gsie7KccZmcu6WI53+Vp9X5qdE28QDxEdwddalKmvuBdV/kfX1QCiQNGANLv4 IkmISdU7EMq5bMS6XtqN7ELl7ND76E2SqQt0czbMPbUriSQHILi3PZR8jncWsfAFyhtc yIYMf2YbUsHtkZhAACEC7kAreg00y+ZWmRoG0THhpRRkrExzJorCpZP9mECQOLE0cyHl Ksn22TqoemUJd9XA+/CilhmZq7ERGJk9nctqfZvZDfVgxqg2RfIPLhBS54uD/noznMvk KqTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744142398; x=1744747198; 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=q34M/yB/cQDsaQGLM78DLdQn24/bplv98nkSF+8rs08=; b=FA42Ak3FSBi1cw8oSquW/HdkT3Hn5AL6+xq2Y6dXOht24Erq+Bl+rUrGjk+AIsCqDH AwUjH5L35aiqIwgxIU6cU3TQnPWNUW39aI9GiMkDrqaFS3vx0X0DPjoAKZfDcVQMTWrT iE0NVsjSGkO3En9oFZ4TtDVA0gnZluQw7QBdTYffimG2HCAFz43Drm9qytn0CPz/PU8S guayGsP5AKge+Bd6GIgZU9C9d7JUifZ3XI09C+Ev8eFAGP5s2+WYZrZleYNHLUeUb1fU l61K39nLTmrHfaC2hMvmwNpHxvvIRBO8K5317aHxrWKdKPyLqe9TaHlndQBTgPEn8Pn3 FRHg== X-Forwarded-Encrypted: i=1; AJvYcCVtZ9hEnhAlrLY8HM+fvY2hzG9fVNOt0XON14HAcmN/2JK0kyivpeZRnEaDiCWvfCmMJbwdmP3vrOEsiCg=@vger.kernel.org X-Gm-Message-State: AOJu0Yxre/qTgffaRLJpLoN0ecVFXGj4NcunI8sgeZSCNTq9ZAJlesTr j9zhnXewjWXdMkck2LsjAa2KnJl6jFjpmdU4c7o1UrZ2MUzOnSVrw3YtN+XCJnKILo3FFm/J9pg Q X-Google-Smtp-Source: AGHT+IGNR5b/BrzCv+igEUSxJYcjHRcZBXMY8xbV6NXow+K+OzxccVFEs8fcuddoHlcYKYCwVdfk4FJMh9g= X-Received: from plqt8.prod.google.com ([2002:a17:902:a5c8:b0:220:d79f:a9bd]) (user=yabinc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:1450:b0:223:53fb:e1dd with SMTP id d9443c01a7336-22ac3f2f26dmr387475ad.9.1744142398107; Tue, 08 Apr 2025 12:59:58 -0700 (PDT) Date: Tue, 8 Apr 2025 12:59:22 -0700 In-Reply-To: <20250408195922.770377-1-yabinc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250408195922.770377-1-yabinc@google.com> X-Mailer: git-send-email 2.49.0.504.g3bcea36a83-goog Message-ID: <20250408195922.770377-3-yabinc@google.com> Subject: [PATCH v3 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 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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 Reviewed-by: James Clark Reviewed-by: Mike Leach --- drivers/hwtracing/coresight/coresight-core.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/drivers/hwtracing/coresight/coresight-core.c b/drivers/hwtraci= ng/coresight/coresight-core.c index fb43ef6a3b1f..a56ba9087538 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); goto out; + } break; case CORESIGHT_DEV_TYPE_SOURCE: /* sources are enabled from either sysFS or Perf */ @@ -496,10 +498,13 @@ int coresight_enable_path(struct coresight_path *path= , enum cs_mode mode, parent =3D list_prev_entry(nd, link)->csdev; child =3D list_next_entry(nd, link)->csdev; ret =3D coresight_enable_link(csdev, parent, child, source); - if (ret) + if (ret) { + coresight_disable_helpers(csdev); goto err; + } break; default: + coresight_disable_helpers(csdev); goto err; } } --=20 2.49.0.504.g3bcea36a83-goog