From nobody Mon Feb 9 08:56:06 2026 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5AB37376481 for ; Thu, 22 Jan 2026 15:56:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769097397; cv=none; b=l202RNj5o6ygz8sGKzH/u5/OCHL/5+zENCREGt36UVuuOfs2kwPNCQ38L/djr7UCtEbMbC6GpR5HPtSczFRlnM/k1upCH8AnETZCXVpUXTo/1UI8ZGuYOh1zNnOogdBkTxqgZIROZHweugy49rNUY6o+ym3QZ5Ku41rdxUNFso0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769097397; c=relaxed/simple; bh=o4ZyPrixhb3phx1jWaDmhty4FCBLChbs9DxkVjYAEyo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=la+Cc/EFHG7jJjnw3WuBfC2XfIPJpr9H+Y/jNwJE77ryVnGLrcsqv6NCflZrgfx2+lkELzg/LixaHgr8788cST+xTEvBZYmPpDW/U+q9wRHYffphbEqjgeJ72VogRdiM5AJ4z4OnBuxXrxtataFXJKPFr3r0HsdMBnydUpY7MSs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=Pxnrs8zc; arc=none smtp.client-ip=170.10.129.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="Pxnrs8zc" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1769097385; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=uVJPHf+v4bSMqmOdHWhSOHt1sO3MsnSR9Rd2QqLLQ6s=; b=Pxnrs8zckXJJ8AgMziycPopLLnjBMcb8K9vsi4n76XRJH6pB5ATrximCo5+dsWTGg+p7pK gRElYYO3V0C8tbqT3Bsl/wX8DWT72uLQVASilnhnb1ghXm52Frkynl2KMyh4kT61+LNH46 9EvfwRSGLBDacSoeiS9QD2mMoH87hF8= Received: from mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-459-ngHx3vGDMEmDJcT32FTjNw-1; Thu, 22 Jan 2026 10:56:22 -0500 X-MC-Unique: ngHx3vGDMEmDJcT32FTjNw-1 X-Mimecast-MFC-AGG-ID: ngHx3vGDMEmDJcT32FTjNw_1769097381 Received: from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 30C2D1956050; Thu, 22 Jan 2026 15:56:21 +0000 (UTC) Received: from gmonaco-thinkpadt14gen3.rmtit.csb (unknown [10.45.224.47]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id A8AA81800240; Thu, 22 Jan 2026 15:56:17 +0000 (UTC) From: Gabriele Monaco To: linux-kernel@vger.kernel.org, Steven Rostedt , Nam Cao , Juri Lelli , Gabriele Monaco , linux-trace-kernel@vger.kernel.org Cc: Tomas Glozar , Clark Williams , John Kacur Subject: [PATCH v5 12/15] verification/rvgen: Add support for per-obj monitors Date: Thu, 22 Jan 2026 16:54:57 +0100 Message-ID: <20260122155500.362683-13-gmonaco@redhat.com> In-Reply-To: <20260122155500.362683-1-gmonaco@redhat.com> References: <20260122155500.362683-1-gmonaco@redhat.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 Content-Type: text/plain; charset="utf-8" The special per-object monitor type was just introduced in RV, this requires the user to define some functions and type specific to the object. Adapt rvgen to add stub definitions for the monitor_target type and other modifications required to create per-object monitors. Reviewed-by: Nam Cao Signed-off-by: Gabriele Monaco --- Notes: V3: * Add _is_id_monitor() in dot2k to handle per-obj together with per-task tools/verification/rvgen/rvgen/automata.py | 1 + tools/verification/rvgen/rvgen/dot2k.py | 17 +++++++++++++---- tools/verification/rvgen/rvgen/generator.py | 2 +- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/tools/verification/rvgen/rvgen/automata.py b/tools/verificatio= n/rvgen/rvgen/automata.py index 252c9960ee1c..b7330044d4be 100644 --- a/tools/verification/rvgen/rvgen/automata.py +++ b/tools/verification/rvgen/rvgen/automata.py @@ -66,6 +66,7 @@ class Automata: self.events_start, self.events_start_run =3D self.__store_init_eve= nts() self.env_stored =3D sorted(self.env_stored) self.constraint_vars =3D sorted(self.constraint_vars) + self.self_loop_reset_events =3D sorted(self.self_loop_reset_events) =20 def __get_model_name(self) -> str: basename =3D ntpath.basename(self.__dot_path) diff --git a/tools/verification/rvgen/rvgen/dot2k.py b/tools/verification/r= vgen/rvgen/dot2k.py index e72369ec1ad7..42111b477847 100644 --- a/tools/verification/rvgen/rvgen/dot2k.py +++ b/tools/verification/rvgen/rvgen/dot2k.py @@ -27,6 +27,8 @@ class dot2k(Monitor, Dot2c): def fill_monitor_type(self) -> str: buff =3D [ self.monitor_type.upper() ] buff +=3D self._fill_timer_type() + if self.monitor_type =3D=3D "per_obj": + buff.append("typedef /* XXX: define the target type */ *monito= r_target;") return "\n".join(buff) =20 def fill_tracepoint_handlers_skel(self) -> str: @@ -45,6 +47,10 @@ class dot2k(Monitor, Dot2c): if self.monitor_type =3D=3D "per_task": buff.append("\tstruct task_struct *p =3D /* XXX: how do I = get p? */;"); buff.append("\tda_%s(p, %s%s);" % (handle, event, self.enu= m_suffix)); + elif self.monitor_type =3D=3D "per_obj": + buff.append("\tint id =3D /* XXX: how do I get the id? */;= "); + buff.append("\tmonitor_target t =3D /* XXX: how do I get t= ? */;"); + buff.append("\tda_%s(id, t, %s%s);" % (handle, event, self= .enum_suffix)); else: buff.append("\tda_%s(%s%s);" % (handle, event, self.enum_s= uffix)); buff.append("}") @@ -92,13 +98,16 @@ class dot2k(Monitor, Dot2c): =20 return '\n'.join(buff) =20 + def _is_id_monitor(self) -> bool: + return self.monitor_type in ("per_task", "per_obj") + def fill_monitor_class_type(self) -> str: - if self.monitor_type =3D=3D "per_task": + if self._is_id_monitor(): return "DA_MON_EVENTS_ID" return "DA_MON_EVENTS_IMPLICIT" =20 def fill_monitor_class(self) -> str: - if self.monitor_type =3D=3D "per_task": + if self._is_id_monitor(): return "da_monitor_id" return "da_monitor" =20 @@ -122,7 +131,7 @@ class dot2k(Monitor, Dot2c): } tp_args_id =3D ("int ", "id") tp_args =3D tp_args_dict[tp_type] - if self.monitor_type =3D=3D "per_task": + if self._is_id_monitor(): tp_args.insert(0, tp_args_id) tp_proto_c =3D ", ".join([a+b for a,b in tp_args]) tp_args_c =3D ", ".join([b for a,b in tp_args]) @@ -169,7 +178,7 @@ class ha2k(dot2k): self.__parse_constraints() =20 def fill_monitor_class_type(self) -> str: - if self.monitor_type =3D=3D "per_task": + if self._is_id_monitor(): return "HA_MON_EVENTS_ID" return "HA_MON_EVENTS_IMPLICIT" =20 diff --git a/tools/verification/rvgen/rvgen/generator.py b/tools/verificati= on/rvgen/rvgen/generator.py index b80af3fd6701..5eac12e110dc 100644 --- a/tools/verification/rvgen/rvgen/generator.py +++ b/tools/verification/rvgen/rvgen/generator.py @@ -243,7 +243,7 @@ obj-$(CONFIG_RV_MON_%s) +=3D monitors/%s/%s.o =20 =20 class Monitor(RVGenerator): - monitor_types =3D { "global" : 1, "per_cpu" : 2, "per_task" : 3 } + monitor_types =3D { "global" : 1, "per_cpu" : 2, "per_task" : 3, "per_= obj" : 4 } =20 def __init__(self, extra_params=3D{}): super().__init__(extra_params) --=20 2.52.0