From nobody Wed Dec 17 19:22:33 2025 Received: from mail-qv1-f41.google.com (mail-qv1-f41.google.com [209.85.219.41]) (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 A504B24728F for ; Sat, 4 Oct 2025 23:50:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759621831; cv=none; b=UjWJ0WSYi1U3XMvZsK5iJQwY1jDUoVKXcAFvQmRmKoT8Q2s9Se8FlTYrYAwI68Ij2jHR99MSz7ukbC9qiR4foy90tTY/AM0+c/hepZq2GwQvHAWHq59+7TmpT+8fbbe7bBFyin1LDgOiRXtAGHEHtjsUe/ekyBJ50+ser46j4yI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759621831; c=relaxed/simple; bh=M8zHmRZzh1etGfBTEYtac4q+pXAyTpkj0u0emKPd9iw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ULi2WPkbYmHLsdBJ4XuU4ZkWDknEbn58nRZudbEQAHzx2zNxC8bzR12lqlQi3uAym0cZ5+7f1M70kVLgbV2ZHh9NSkD2GLEBIbtVyFC6dzsDob757mZ6ym2CgMN3kGY+7nNAKe6hBhHA7Oe6eTWjgaPa2pqKXMm1xN/dwLk+SUE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=fMkjKima; arc=none smtp.client-ip=209.85.219.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="fMkjKima" Received: by mail-qv1-f41.google.com with SMTP id 6a1803df08f44-879b99b7ca8so23924266d6.0 for ; Sat, 04 Oct 2025 16:50:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1759621828; x=1760226628; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=NT7b4ZLvKRu3HtUu6iokqc97ftNCnhP9nU4dbxg6QfE=; b=fMkjKima8ShJwt0+Rc7DvxiVBD9aOe3Mxk1C+BfSNO74DAvOf7qUHpTZrX4eYD2YJf CQYhbdkDDL1RnDhGG8y185OCBSCo0gZHmFWS/UCtQ8qk2g4u8Et22mfjxSpKSadTUy8F Q2cpcNcI74psTU1hjyeGSe0TNKD1cZdIVp7d4eQHTjdUoS9+xnVu/2KBSohYRhkczgwk i9ZfZx7wZ4ahx8mbY4GGATIGHSyloaS1+B/6KlwPU1IXGJC7Ih9giVqtPf+7i/g5KcoX aOfGijmqt9pzgl+5R4NelymLL/1FSMX/hNajgvf3b2D16/zHwXyoIG4bAitWJuWPX384 8imw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759621828; x=1760226628; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=NT7b4ZLvKRu3HtUu6iokqc97ftNCnhP9nU4dbxg6QfE=; b=f9dCUbOyrCUk0vRYwHHb0wmnDcsBCrsazV2T0+oE0LRHI58Gxbjg+arSvFDi2yaKNe 1mf4erqqgADoiK5ULkpPD8KGT7Bgd6UPgz9QO+5C+dwIb1laFOzC3x4NgS8S3qVRlMCR k8CXZeVidEB/A+d7+z3gwjBFI2lo3PjC721m1I8Sntl8VFkZtN6uGJPB92JPmWQS4kPT xDu60xp1IJjVMnmR+m4YQdL+iiT7lwyVHi3Rp6CZfBf8PawksegL76ptx6kzI9clzx74 eGZ/KsEAurjCo06cFzf+vfYtDQO9gdn4Adc+4zsyABcuFY5AXOblbVCNARxogNvWReR5 HDRQ== X-Forwarded-Encrypted: i=1; AJvYcCVO/Gf57v4ZjHJqcAP52v12Okpnaw9+jd6hS00r/HTJlB4CpmlNQ3cGzUW3wo5lBjWmLx4IpRausFvU9RY=@vger.kernel.org X-Gm-Message-State: AOJu0YyxcWhiaZODM1SkPmSCB9QFUj/9uQl2I6IsNPCMje3LlTOCsExH fzjGki3QDGUUUTJXyMCkDmrJHo8MtqmipDUVYDINxLtNsUoks8itGbOP X-Gm-Gg: ASbGncswbcnbf/myydaSczGUzLJ8/zN8UTUlFhuRQZ8dfF8CLRaRcMtUBhni+NHX9Nj Df+9Ln9uFdBGIEcSPCil2op1fZQD26sXPE7Rx71AleWy0rGlNMCLmYRM1E1PPKPuK6kpvNHkdQR laziCzuARVVOwVE0vHrVEmbMHCaDQBo2FNsFXCxjVIOH4mUMsho6ul9NkhA2cZFXVgbPaSj+biQ As1y1qO/3k2JHkxBwSlAnOR0EZ4FqdvCo6eFlrMA0GNRY1rA0K6jApAYygI9EDgWXXV3MHZLxHu sHV202RGcGi69AbQtbbgaWQPHmnTN88kBEiHRKMIatMinA2mtZNqZ8bqR2uXLnliKhLqwidOsF/ dGH3pWS61fFMWj25OM/7II58mGTBV1E1DFgbUTMlw5xf/jasV1aYY3O3MtW4h+CC95P1JFNXd24 iU+AA9U1LvjsNeLBM= X-Google-Smtp-Source: AGHT+IFkMKsThVh6BHIAWVgjKNvGuStlv8+DHWcDDo6wEzsC1RPtLuqj3cUETmYY2xxLYuWZjAbclw== X-Received: by 2002:a05:6214:19e1:b0:76a:fcee:97ad with SMTP id 6a1803df08f44-879dc8ab120mr106203176d6.60.1759621828437; Sat, 04 Oct 2025 16:50:28 -0700 (PDT) Received: from seokw-960QHA.mynetworksettings.com ([2600:4041:4491:2000:dd54:e5ff:d4b7:cf43]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-878bdf5383fsm76180216d6.56.2025.10.04.16.50.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 04 Oct 2025 16:50:27 -0700 (PDT) From: Ryan Chung To: rostedt@goodmis.org, mhiramat@kernel.org Cc: mathieu.desnoyers@efficios.com, shuah@kernel.org, hca@linux.ibm.com, corbet@lwn.net, linux-trace-kernel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-doc@vger.kernel.org, seokwoo.chung130@gmail.com Subject: [PATCH v3 1/5] docs: tracing: fprobe: document list filters and :entry/:exit Date: Sun, 5 Oct 2025 08:46:55 +0900 Message-ID: <20251004235001.133111-2-seokwoo.chung130@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251004235001.133111-1-seokwoo.chung130@gmail.com> References: <20251004235001.133111-1-seokwoo.chung130@gmail.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 Content-Type: text/plain; charset="utf-8" Signed-off-by: Ryan Chung --- Documentation/trace/fprobetrace.rst | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/Documentation/trace/fprobetrace.rst b/Documentation/trace/fpro= betrace.rst index b4c2ca3d02c1..629e2d7402bd 100644 --- a/Documentation/trace/fprobetrace.rst +++ b/Documentation/trace/fprobetrace.rst @@ -25,21 +25,36 @@ Synopsis of fprobe-events ------------------------- :: =20 - f[:[GRP1/][EVENT1]] SYM [FETCHARGS] : Probe on fun= ction entry - f[MAXACTIVE][:[GRP1/][EVENT1]] SYM%return [FETCHARGS] : Probe on fun= ction exit - t[:[GRP2/][EVENT2]] TRACEPOINT [FETCHARGS] : Probe on tra= cepoint + # fprobe (function entry/exit) + f[:[GRP1/][EVENT1]] SYM_OR_LIST[:entry|:exit] [FETCHARGS] + + # legacy single-symbol exit + f[MAXACTIVE][:[GRP1/][EVENT1]] SYM%return [FETCHARGS] + + # Probe on tracepoint + t[:[GRP2/][EVENT2]] TRACEPOINT [FETCHARGS] =20 GRP1 : Group name for fprobe. If omitted, use "fprobes" for it. GRP2 : Group name for tprobe. If omitted, use "tracepoints" for= it. - EVENT1 : Event name for fprobe. If omitted, the event name is - "SYM__entry" or "SYM__exit". + EVENT1 : Event name for fprobe. If omitted, + - For a single literal symbol, the event name is + "SYM__entry" or "SYM__exit". + - For a *list or any wildcard*, an explicit [GRP1/][EVEN= T1] + is required; otherwise the parser rejects it. EVENT2 : Event name for tprobe. If omitted, the event name is the same as "TRACEPOINT", but if the "TRACEPOINT" starts with a digit character, "_TRACEPOINT" is used. MAXACTIVE : Maximum number of instances of the specified function th= at can be probed simultaneously, or 0 for the default value as defined in Documentation/trace/fprobe.rst - + SYM_OR_LIST : Either a single symbol, or a comma-separated list of + include/exclude patterns: + - Tokens are matched as symbols; wildcards may be used. + - Tokens prefixed with '!' are exclusions. + - Examples: + foo # single literal (entry) + foo:exit # single literal exit + foo%return # legacy single-symbol exit FETCHARGS : Arguments. Each probe can have up to 128 args. ARG : Fetch "ARG" function argument using BTF (only for functi= on entry or tracepoint.) (\*1) --=20 2.43.0 From nobody Wed Dec 17 19:22:33 2025 Received: from mail-qv1-f49.google.com (mail-qv1-f49.google.com [209.85.219.49]) (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 6293E254B18 for ; Sat, 4 Oct 2025 23:50:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759621836; cv=none; b=LMrqHK1kE2TB1w/Gjpv0Yq+n2M0tpKCmMHWNa+LP3y4+tzTihcXos3bQY5b+/R+OB5KblwryjU4j5VzBAnYd34JHUA6MZ1jOJQCWU33woNMaV7j3khGvGkED8+B9Cro8y2koI+nqo2+Myz+vvNh6ms9POtsueAgyqGJkZS+o0w8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759621836; c=relaxed/simple; bh=z2ogZjxuTKMpoCR+MQb93w82gXJuW+Rka1YSqoLx4LI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=IvYmesS04L5IVuUGF+y/j0GEcMb6aoGIz3wys/aAljd77yqwIXen8KGNnm5N68Z40fq7FfECk/gqGT08bG0vnVZwNz9zTRukv/EOsHNttUY3gE8CpTvbL5mW3zGeeKiTanMH1Vzjm4a5UaVYVDGrriR1nNnXtPmG3CdFDTv/rTQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=FPemoOJA; arc=none smtp.client-ip=209.85.219.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="FPemoOJA" Received: by mail-qv1-f49.google.com with SMTP id 6a1803df08f44-796d68804a0so44737906d6.3 for ; Sat, 04 Oct 2025 16:50:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1759621833; x=1760226633; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=0ZrEnyLevXoIcXltBXj1n0pXN58lCz/lcC/iI5a2jGg=; b=FPemoOJAyHihAj7y/qFgGq20d3xX6mgGMln21Jd3Qp0yV+wgtHI4M2DR1/2AsAPLbm hFMsBpLNXg01/z5srVi2CFWrhu3lNOLPI54yGb0yUMqP10IqjFFPIMYfx4EX5suLrcRs YkUQpOWmrn9toPbYvwuIavPJVuXtXpMAAgjwtEAtivi3sS/xdLMZb9XBFxQ4pxEHtfhZ eU2tptPMhKoSg/G6UiZaM17FuKKd9VWisXtUHfqoVScn09R4hGqUIEw4RErCNV/x+4MT 1QG72udVg+yUC27R2D+weDAE1tbSXbQigXpVOCHH1jIyUwoDTMb7S9TfAGaYiVk/SFhS uiog== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759621833; x=1760226633; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=0ZrEnyLevXoIcXltBXj1n0pXN58lCz/lcC/iI5a2jGg=; b=QcZwfWFUcq0H/u4RG64ksmJUA6zTTOiIK+idyQzVh32da+k4kilR8UuxzsiOX3uHpJ Mh/Liz/Z6fW7g4mHTRp4wM9dVEYIbyhD1a0W0nCDtREKGEPiwOSHKs251lZozpWj9U4X VzqnxW1G+YigF0cz/BDzQcjVCVTM6c8gkDfwxdcJKRgxvftwYacnDyCdwqjFaNa6QER5 3q51GYZ/m4VY7TA8nRqLW/zr1EnDaSs9H8qq755YKAbR9hgMvc94ZD5Tad7JgruXXNU5 ixQrwKz6N6GqfwY4JeuHz8iFjQn4h3KmF25Mwwlqy6oOm6ttOT2H9S+oUCtkWnP/5J6r qaWw== X-Forwarded-Encrypted: i=1; AJvYcCVD/Br52RD/c+qKvy4/Qqxu1nsqcYJwBDl37S4LeEusY3FPxAPOB3EjgVsA8SFLyVIxdJF2GpMxEEf6yag=@vger.kernel.org X-Gm-Message-State: AOJu0YzMusYy2TWmCVv/20qUS4o4wtU1Tgqo3xUuDysbYMjCZg24gN0Z NR+GrFiADWadJPE59PWgJQyaRaxPdhq10oVH/RzHFrki9Y82GBFDV+7C X-Gm-Gg: ASbGncu2xQBFGJ1IUxEINDJ+6OfV+ReTYb9thE92RcnU7nPbDu3vpoUaNHekwTuqkTF Egpc33TytCSfxjQJgEIgSCRIVtdlqqYjJfR/aoIvp7S6/KI4GQEEipObqsiPlSIcDp/AHx4Pmzu FYF0j11FZ9jIzW0F0mDDBxPHhshsoyfnrnXRICmeW+s/vy5CslgqHvhIoedMKQrs2kkXUvhXBDu jf8QbbXQaYG1QSvz7/a9uoouz+jAPdIn7Mv+Tl+MKFeOZWJEWIZEKAZkslDcZnHrqXP1tb83894 EKRy04fNsEoUsDvW/CYtSx8KMOwygn0KIzH2rGYvoNly02jg/f8wzXj4uvsDQ24k2RHLVqkfclI 4AFxbiHIlYT0X2/TiMXSSgRTLqz76seOFsehmjEen7FSfuwUhilNUskfH3MjzyuMwjbRRgXeKzx J/1C0mzUiO6BWkQy5nWKXVTgyKVA== X-Google-Smtp-Source: AGHT+IEfRMsUaYJ/XAJjWbILMrV1deJg/SxAXLDq4HjDEvGxveOHDphSf6WABh59w/bzNL05Mif4ew== X-Received: by 2002:ad4:5d69:0:b0:818:54be:2381 with SMTP id 6a1803df08f44-879dc8303d8mr89763246d6.42.1759621833194; Sat, 04 Oct 2025 16:50:33 -0700 (PDT) Received: from seokw-960QHA.mynetworksettings.com ([2600:4041:4491:2000:dd54:e5ff:d4b7:cf43]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-878bdf5383fsm76180216d6.56.2025.10.04.16.50.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 04 Oct 2025 16:50:32 -0700 (PDT) From: Ryan Chung To: rostedt@goodmis.org, mhiramat@kernel.org Cc: mathieu.desnoyers@efficios.com, shuah@kernel.org, hca@linux.ibm.com, corbet@lwn.net, linux-trace-kernel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-doc@vger.kernel.org, seokwoo.chung130@gmail.com Subject: [PATCH v3 2/5] tracing: fprobe: require explicit [GROUP/]EVENT for list/wildcard Date: Sun, 5 Oct 2025 08:46:56 +0900 Message-ID: <20251004235001.133111-3-seokwoo.chung130@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251004235001.133111-1-seokwoo.chung130@gmail.com> References: <20251004235001.133111-1-seokwoo.chung130@gmail.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 Content-Type: text/plain; charset="utf-8" Signed-off-by: Ryan Chung --- kernel/trace/trace.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index b3c94fbaf002..ac0d3acc337e 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -5524,7 +5524,8 @@ static const char readme_msg[] =3D "\t r[maxactive][:[/][]] []\n" #endif #ifdef CONFIG_FPROBE_EVENTS - "\t f[:[/][]] [%return] []\n" + "\t f[:[/][]] [:entry|:exit] []\= n" + "\t (single symbols still accept %return)\n" "\t t[:[/][]] []\n" #endif #ifdef CONFIG_HIST_TRIGGERS --=20 2.43.0 From nobody Wed Dec 17 19:22:33 2025 Received: from mail-qv1-f51.google.com (mail-qv1-f51.google.com [209.85.219.51]) (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 6946D2571DA for ; Sat, 4 Oct 2025 23:50:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759621840; cv=none; b=bEPvak5e/i8F4SL4BL8fP4jiqj5+fs8Di88i9LeEgUWUKq3XpgJ+KANn5yUpbmGgVkwwjC34qLrdaLJYI7DAi8xJdDuQiNk/PppvovRUlSlARu3xiRw9p4oVo8heBsos5L+oVV4u7CD6jHo+T8S4Z2Aa3J2/4uY0upBR5p7FxXw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759621840; c=relaxed/simple; bh=MWAW5VhfWlORCG3RklRaoqfXc6Pl+r6/x4eDwg+XNP8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ERts/TzC3gGbqJXX7J8l9dkwce35Ei2SKdNIY8G3UJEtq4MTPaCESOUsDMt0es6h2ct9upRe4qlpczHpHTZ4rprlDRoKBLGlYieh9lXdyIBxDT2A2Vuau03Dl80ltkRuzwQT+OMxhWvnPY2whW5Y+hRhEg3G+KOG1M30gIcIAcA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=EtOYVSxY; arc=none smtp.client-ip=209.85.219.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="EtOYVSxY" Received: by mail-qv1-f51.google.com with SMTP id 6a1803df08f44-78e9f48da30so32557446d6.1 for ; Sat, 04 Oct 2025 16:50:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1759621837; x=1760226637; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=LKpSd7nKkEP6TPwK8huS4lw5ZBZ0Awry5aiCZmFREXY=; b=EtOYVSxYUr2vLD1TGDyUpImsjKjaYvueya6SSME6tbh6GNx3Bj2qNTe7oYT2iY2Pic ESbNklCrshBqAzZVvkGVlcmA34OUAlKNXOoivVzDn/PnsUmGkJIKtC+z3bN7UoTsdIwe gM4VUWqEPeRPUZPTI0RQqUxRqiWltTTI+uuxbAQyZGbZ2OXROt4U/zrOzGHtn0ZUTsAI PYtgl7TjcMDz+63X3ftjfX2y7P4nJibIihlOh2sNmL1j2YtGB+B8CmOf5/YK9Mhns6MS Icuh/hDWaWCneYQz21oZJMk/fYWB3VRs9ir0GvefKarQUIFKDEHH/m6IUth02rCkvoxm NY/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759621837; x=1760226637; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=LKpSd7nKkEP6TPwK8huS4lw5ZBZ0Awry5aiCZmFREXY=; b=qfp/ZQRNQdN/4aEnju63kPu5Ll905/i3qHraKAR4kz0nSD5gzxP5bkkp8Rh8sQXx34 2gvI2aqezICTJeEUalmWfjtzewLYwzFhnMjgEK1qnkvv89vuUd5eylg5D4rSPnnUUnPa PPxp7NaeHqp2jXYzfa25TDY4hK8f8tdCyYx6PLM9f0KF5ZF+B7F90jqwLGxtIHmFjlWx gHD6CrsPUMzH/HnqzdUGWUgh2UWf5VDzoivGxI5XPb+Ud97LzU7nLK7DdaSshe+F9W+9 1n3wx+FGo9Lkm9bqb02FdkCeZbUMH4yTIinCyAfkFIHe+0dcSULt8969cDy8YNdsFXDV C5xQ== X-Forwarded-Encrypted: i=1; AJvYcCVD3/Kk00BcoXe7daQOplhcsqwd+jHlF8DbRBFUfqxkuDkZXPGILvdwnLOoNt8QXrAcbCrEbTQWMZ8unYA=@vger.kernel.org X-Gm-Message-State: AOJu0YxKmA5couNlJQzBIh7beX/o9YH3nk+02thfEKOMKavxvMbcVJfX 700svWDRNiNcuJVVGfjNmm1XA+27BnBcJCvxEWBjPkU5y82bOIJPiVfV X-Gm-Gg: ASbGnctZp2LkdtiK73TL6hnQK3UZDcIHbEVZhv9lPZF+xVefEi1div3yNJV6NR2CAvD F7gzlDbINHf+Io6vzfwBALVKlc2kP+Xrus24onuL3MHpEYe+zZeS4rNLacWZUnGIfy4EIiI/aLM tCUdgNNJdkKh8k4Kaais0RVeEifHQgIHsYedCbVXRJI8bKmkfome9om9PETftAc9HK6MKwCN4k5 R+MLfjAYV/VCc8QkwOmoByXy5uMJNtcLmF5fqG5ZvluMs7AULIWqCXrRAxU4I9NsRrmGRzry8sa TKuByIgNn2zHeN8jE+q5ZgWVBZ1IwX8Pxzj+T4xOnV6mdFrVWjIR15+T4LY8qnDvxUYvDyeCu3K qP5kdyg6ImFT4oUcroeWFZwQlaCURLjLrvvBRA3VpttaS3mXXkYVvek6iAQ89gPLRylZCrA0dP7 SmPVPNd2ZeWBznnVAciQhyA7fOFQ== X-Google-Smtp-Source: AGHT+IFTFbWAAtyaYWQZu7JpRusB2bhk0aVf9mwA/xe8QOYGt6MnziETDI6P8vQ523aryY3fgxqaAw== X-Received: by 2002:a05:6214:3319:20b0:879:defa:a6f2 with SMTP id 6a1803df08f44-879defaa90emr75983146d6.18.1759621837280; Sat, 04 Oct 2025 16:50:37 -0700 (PDT) Received: from seokw-960QHA.mynetworksettings.com ([2600:4041:4491:2000:dd54:e5ff:d4b7:cf43]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-878bdf5383fsm76180216d6.56.2025.10.04.16.50.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 04 Oct 2025 16:50:35 -0700 (PDT) From: Ryan Chung To: rostedt@goodmis.org, mhiramat@kernel.org Cc: mathieu.desnoyers@efficios.com, shuah@kernel.org, hca@linux.ibm.com, corbet@lwn.net, linux-trace-kernel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-doc@vger.kernel.org, seokwoo.chung130@gmail.com Subject: [PATCH v3 3/5] tracing: fprobe: support comma-separated symbols and :entry/:exit Date: Sun, 5 Oct 2025 08:46:57 +0900 Message-ID: <20251004235001.133111-4-seokwoo.chung130@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251004235001.133111-1-seokwoo.chung130@gmail.com> References: <20251004235001.133111-1-seokwoo.chung130@gmail.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 Content-Type: text/plain; charset="utf-8" Signed-off-by: Ryan Chung --- kernel/trace/trace_fprobe.c | 247 ++++++++++++++++++++++++++++-------- 1 file changed, 192 insertions(+), 55 deletions(-) diff --git a/kernel/trace/trace_fprobe.c b/kernel/trace/trace_fprobe.c index b36ade43d4b3..ec5b6e1c1a1b 100644 --- a/kernel/trace/trace_fprobe.c +++ b/kernel/trace/trace_fprobe.c @@ -191,6 +191,9 @@ struct trace_fprobe { bool tprobe; struct tracepoint_user *tuser; struct trace_probe tp; + char *filter; + char *nofilter; + bool list_mode; }; =20 static bool is_trace_fprobe(struct dyn_event *ev) @@ -203,14 +206,10 @@ static struct trace_fprobe *to_trace_fprobe(struct dy= n_event *ev) return container_of(ev, struct trace_fprobe, devent); } =20 -/** - * for_each_trace_fprobe - iterate over the trace_fprobe list - * @pos: the struct trace_fprobe * for each entry - * @dpos: the struct dyn_event * to use as a loop cursor - */ -#define for_each_trace_fprobe(pos, dpos) \ - for_each_dyn_event(dpos) \ - if (is_trace_fprobe(dpos) && (pos =3D to_trace_fprobe(dpos))) +static struct trace_fprobe *trace_fprobe_from_dyn(struct dyn_event *ev) +{ + return is_trace_fprobe(ev) ? to_trace_fprobe(ev) : NULL; +} =20 static bool trace_fprobe_is_return(struct trace_fprobe *tf) { @@ -227,6 +226,109 @@ static const char *trace_fprobe_symbol(struct trace_f= probe *tf) return tf->symbol ? tf->symbol : "unknown"; } =20 +static bool has_wildcard(const char *s) +{ + return s && (strchr(s, '*') || strchr(s, '?')); +} + +static int parse_fprobe_spec(const char *in, bool is_tracepoint, + char **base, bool *is_return, bool *list_mode, + char **filter, char **nofilter) +{ + const char *p; + char *work =3D NULL; + char *b =3D NULL, *f =3D NULL, *nf =3D NULL; + bool legacy_ret =3D false; + bool list =3D false; + int ret =3D 0; + + if (!in || !base || !is_return || !list_mode || !filter || !nofilter) + return -EINVAL; + + *base =3D NULL; *filter =3D NULL; *nofilter =3D NULL; + *is_return =3D false; *list_mode =3D false; + + if (is_tracepoint) { + if (strchr(in, ',') || strchr(in, ':')) + return -EINVAL; + if (strstr(in, "%return")) + return -EINVAL; + for (p =3D in; *p; p++) + if (!isalnum(*p) && *p !=3D '_') + return -EINVAL; + b =3D kstrdup(in, GFP_KERNEL); + if (!b) + return -ENOMEM; + *base =3D b; + return 0; + } + + work =3D kstrdup(in, GFP_KERNEL); + if (!work) + return -ENOMEM; + + p =3D strstr(work, "%return"); + if (p) { + if (!strcmp(p, ":exit")) { + *is_return =3D true; + *p =3D '\0'; + } else if (!strcmp(p, ":entry")) { + *p =3D '\0'; + } else { + ret =3D -EINVAL; + goto out; + } + } + + list =3D !!strchr(work, ',') || has_wildcard(work); + if (legacy_ret) + *is_return =3D true; + + b =3D kstrdup(work, GFP_KERNEL); + if (!b) { + ret =3D -ENOMEM; + goto out; + } + + if (list) { + char *tmp =3D b, *tok; + size_t fsz =3D strlen(b) + 1, nfsz =3D strlen(b) + 1; + + f =3D kzalloc(fsz, GFP_KERNEL); + nf =3D kzalloc(nfsz, GFP_KERNEL); + if (!f || !nf) { + ret =3D -ENOMEM; + goto out; + } + + while ((tok =3D strsep(&tmp, ",")) !=3D NULL) { + char *dst; + bool neg =3D (*tok =3D=3D '!'); + + if (*tok =3D=3D '\0') + continue; + if (neg) + tok++; + dst =3D neg ? nf : f; + if (dst[0] !=3D '\0') + strcat(dst, ","); + strcat(dst, tok); + } + *list_mode =3D true; + } + + *base =3D b; b =3D NULL; + *filter =3D f; f =3D NULL; + *nofilter =3D nf; nf =3D NULL; + +out: + kfree(work); + kfree(b); + kfree(f); + kfree(nf); + return ret; +} + static bool trace_fprobe_is_busy(struct dyn_event *ev) { struct trace_fprobe *tf =3D to_trace_fprobe(ev); @@ -556,13 +658,17 @@ static void free_trace_fprobe(struct trace_fprobe *tf) trace_probe_cleanup(&tf->tp); if (tf->tuser) tracepoint_user_put(tf->tuser); + kfree(tf->filter); + kfree(tf->nofilter); kfree(tf->symbol); kfree(tf); } } =20 /* Since alloc_trace_fprobe() can return error, check the pointer is ERR t= oo. */ -DEFINE_FREE(free_trace_fprobe, struct trace_fprobe *, if (!IS_ERR_OR_NULL(= _T)) free_trace_fprobe(_T)) +DEFINE_FREE(free_trace_fprobe, struct trace_fprobe *, + if (!IS_ERR_OR_NULL(_T)) + free_trace_fprobe(_T)) =20 /* * Allocate new trace_probe and initialize it (including fprobe). @@ -605,10 +711,16 @@ static struct trace_fprobe *find_trace_fprobe(const c= har *event, struct dyn_event *pos; struct trace_fprobe *tf; =20 - for_each_trace_fprobe(tf, pos) + list_for_each_entry(pos, &dyn_event_list, list) { + tf =3D trace_fprobe_from_dyn(pos); + if (!tf) + continue; + if (strcmp(trace_probe_name(&tf->tp), event) =3D=3D 0 && strcmp(trace_probe_group_name(&tf->tp), group) =3D=3D 0) return tf; + } + return NULL; } =20 @@ -835,7 +947,12 @@ static int __register_trace_fprobe(struct trace_fprobe= *tf) if (trace_fprobe_is_tracepoint(tf)) return __regsiter_tracepoint_fprobe(tf); =20 - /* TODO: handle filter, nofilter or symbol list */ + /* Registration path: + * - list_mode: pass filter/nofilter + * - single: pass symbol only (legacy) + */ + if (tf->list_mode) + return register_fprobe(&tf->fp, tf->filter, tf->nofilter); return register_fprobe(&tf->fp, tf->symbol, NULL); } =20 @@ -1114,7 +1231,11 @@ static int __tprobe_event_module_cb(struct notifier_= block *self, return NOTIFY_DONE; =20 mutex_lock(&event_mutex); - for_each_trace_fprobe(tf, pos) { + list_for_each_entry(pos, &dyn_event_list, list) { + tf =3D trace_fprobe_from_dyn(pos); + if (!tf) + continue; + /* Skip fprobe and disabled tprobe events. */ if (!trace_fprobe_is_tracepoint(tf) || !tf->tuser) continue; @@ -1155,55 +1276,35 @@ static int parse_symbol_and_return(int argc, const = char *argv[], char **symbol, bool *is_return, bool is_tracepoint) { - char *tmp =3D strchr(argv[1], '%'); - int i; - - if (tmp) { - int len =3D tmp - argv[1]; - - if (!is_tracepoint && !strcmp(tmp, "%return")) { - *is_return =3D true; - } else { - trace_probe_log_err(len, BAD_ADDR_SUFFIX); - return -EINVAL; - } - *symbol =3D kmemdup_nul(argv[1], len, GFP_KERNEL); - } else - *symbol =3D kstrdup(argv[1], GFP_KERNEL); - if (!*symbol) - return -ENOMEM; - - if (*is_return) - return 0; + int i, ret; + bool list_mode =3D false; + char *filter =3D NULL; *nofilter =3D NULL; =20 - if (is_tracepoint) { - tmp =3D *symbol; - while (*tmp && (isalnum(*tmp) || *tmp =3D=3D '_')) - tmp++; - if (*tmp) { - /* find a wrong character. */ - trace_probe_log_err(tmp - *symbol, BAD_TP_NAME); - kfree(*symbol); - *symbol =3D NULL; - return -EINVAL; - } - } + ret =3D parse_fprobe_spec(argv[1], is_tracepoint, symbol, is_return, + &list_mode, &filter, &nofilter); + if (ret) + return ret; =20 - /* If there is $retval, this should be a return fprobe. */ for (i =3D 2; i < argc; i++) { - tmp =3D strstr(argv[i], "$retval"); + char *tmp =3D strstr(argv[i], "$retval"); + if (tmp && !isalnum(tmp[7]) && tmp[7] !=3D '_') { if (is_tracepoint) { trace_probe_log_set_index(i); trace_probe_log_err(tmp - argv[i], RETVAL_ON_PROBE); kfree(*symbol); *symbol =3D NULL; + kfree(filter); + kfree(nofilter); return -EINVAL; } *is_return =3D true; break; } } + + kfree(filter); + kfree(nofilter); return 0; } =20 @@ -1247,6 +1348,11 @@ static int trace_fprobe_create_internal(int argc, co= nst char *argv[], int i, new_argc =3D 0, ret =3D 0; bool is_tracepoint =3D false; bool is_return =3D false; + bool list_mode =3D false; + + char *parsed_filter __free(kfree) =3D NULL; + char *parsed_nofilter __free(kfree) =3D NULL; + bool has_wild =3D false; =20 if ((argv[0][0] !=3D 'f' && argv[0][0] !=3D 't') || argc < 2) return -ECANCELED; @@ -1267,8 +1373,9 @@ static int trace_fprobe_create_internal(int argc, con= st char *argv[], =20 trace_probe_log_set_index(1); =20 - /* a symbol(or tracepoint) must be specified */ - ret =3D parse_symbol_and_return(argc, argv, &symbol, &is_return, is_trace= point); + /* Parse spec early (single vs list, suffix, base symbol) */ + ret =3D parse_fprobe_spec(argv[1], is_tracepoint, &symbol, &is_return, + &list_mode, &parsed_filter, &parsed_nofilter); if (ret < 0) return -EINVAL; =20 @@ -1283,10 +1390,16 @@ static int trace_fprobe_create_internal(int argc, c= onst char *argv[], return -EINVAL; } =20 - if (!event) { - ebuf =3D kmalloc(MAX_EVENT_NAME_LEN, GFP_KERNEL); - if (!ebuf) - return -ENOMEM; + if (!event) { + /* + * Event name rules: + * - For list/wildcard: require explicit [GROUP/]EVENT + * - For single literal: autogenerate symbol__entry/symbol__exit + */ + if (list_mode || has_wildcard(symbol)) { + trace_probe_log_err(0, NO_GROUP_NAME); + return -EINVAL; + } /* Make a new event name */ if (is_tracepoint) snprintf(ebuf, MAX_EVENT_NAME_LEN, "%s%s", @@ -1319,7 +1432,8 @@ static int trace_fprobe_create_internal(int argc, con= st char *argv[], NULL, NULL, NULL, sbuf); } } - if (!ctx->funcname) + + if (!list_mode && !has_wildcard(symbol) && !is_tracepoint) ctx->funcname =3D symbol; =20 abuf =3D kmalloc(MAX_BTF_ARGS_LEN, GFP_KERNEL); @@ -1353,6 +1467,21 @@ static int trace_fprobe_create_internal(int argc, co= nst char *argv[], return ret; } =20 + /* carry list parsing result into tf */ + if (!is_tracepoint) { + tf->list_mode =3D list_mode; + if (parsed_filter) { + tf->filter =3D kstrdup(parsed_filter, GFP_KERNEL); + if (!tf->filter) + return -ENOMEM; + } + if (parsed_nofilter) { + tf->nofilter =3D kstrdup(parsed_nofilter, GFP_KERNEL); + if (!tf->nofilter) + return -ENOMEM; + } + } + /* parse arguments */ for (i =3D 0; i < argc; i++) { trace_probe_log_set_index(i + 2); @@ -1439,8 +1568,16 @@ static int trace_fprobe_show(struct seq_file *m, str= uct dyn_event *ev) seq_printf(m, ":%s/%s", trace_probe_group_name(&tf->tp), trace_probe_name(&tf->tp)); =20 - seq_printf(m, " %s%s", trace_fprobe_symbol(tf), - trace_fprobe_is_return(tf) ? "%return" : ""); + seq_printf(m, "%s", trace_fprobe_symbol(tf)); + if (!trace_fprobe_is_tracepoint(tf)) { + if (tf->list_mode) { + if (trace_fprobe_is_return(tf)) + seq_puts(m, ":exit"); + } else { + if (trace_fprobe_is_return(tf)) + seq_puts(m, "%return"); + } + } =20 for (i =3D 0; i < tf->tp.nr_args; i++) seq_printf(m, " %s=3D%s", tf->tp.args[i].name, tf->tp.args[i].comm); --=20 2.43.0 From nobody Wed Dec 17 19:22:33 2025 Received: from mail-qv1-f46.google.com (mail-qv1-f46.google.com [209.85.219.46]) (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 DCDD525785B for ; Sat, 4 Oct 2025 23:50:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759621842; cv=none; b=PQFzqCh9OeujdkoRdfb4FF7HdLBk6b31msKS7YJaiq05MqixoD7/zxTR8xqjCF28y4MxdJIJqDzI8gxkf2JC20HKEDrwItDNoPaWCmF7qyWJmtkLqKQiIFJMeNXm3tZvb2A3FMQD/HBYW0RRGLA10GDGrQtcp0zj/ZR0n71hoI4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759621842; c=relaxed/simple; bh=EXyB3no/ZYQZiw4k2sIVnM4eV2neGR0XKhmW6028cdM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=tsf5a50Fx9ilwMffBeUdM6j6rOY0ewUc4dzW5ghmW+pjLmk99AJbz0r90YICPhG1tXhhqvuNUc1QroW82QMR5ioSoxbhUE4RH3o94SQ7GDxuwldLNpAOwqt78ygLaDVMMgYmH/CSrQPwf9oOW1/i8dZM/nVQZ2sqpK7iqyXyrlo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Gmr2ExC/; arc=none smtp.client-ip=209.85.219.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Gmr2ExC/" Received: by mail-qv1-f46.google.com with SMTP id 6a1803df08f44-70ba7aa131fso37164466d6.2 for ; Sat, 04 Oct 2025 16:50:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1759621840; x=1760226640; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=PjU7oe93mN2yk67x3/TWExFFSzr4kO2WctOACXz9uio=; b=Gmr2ExC/ahizGo5cxeQXkFW86dwTO8nMHPObyB+wxLcnWNJ5HdwutrgO0Mltfvv/Wp 3DpJQx02gbKTeEWPIPcqSZQZ8hZQyQU37b8iulUUG40wb1orggxB4lxiAmQGXdHi7VEg Bt/ja8gkzGcXVn510StpEomHonNZ7vA0Tyi1qKzXtntCsPDRxNApu/t0wo1+2M74qprP ny0gyr5oZsCrQH8lZJQUIfUnJYjMgPXtQf8/GsKY8akZeD885AmLqo514VWemvjZCD5o ODaUnyYMNiG7Y6AVn858kvmzM9f0IPom2W2Lwbw9Pvf0qjT7YRVevUkhPqu95vC8q4tu g67w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759621840; x=1760226640; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=PjU7oe93mN2yk67x3/TWExFFSzr4kO2WctOACXz9uio=; b=vKJ+/WVPip8J6CMkzXIJxOeqXJHAipb2ALcmxCd/RIjBMpb6JeGRzPVtPQjTfzz/H1 8F4VAqlB9GFL67peMfufAysK2hcmW7XB5jr5R337HXN7PXeguW4dG1O6ckPg/ctcXpfC Y+PlaHCQU5zhhLZczhR2daPXQkVgOwcRZASNDy69G3MqubYXypXe2tU0f5npaWxxd7rd JLjmwOlIaE7KRMB2zcJdQVYDsTt8/RTawEsPo9L1wQJlpZJBHEkwzsHNzkIsfImsyNZI Qwlhy1uVmGm+/r7dc4QgmKkz1pGqPP79zgpf1M1xupJeqIbzFBxnvQuWzW0RCHhxmF4z JvWQ== X-Forwarded-Encrypted: i=1; AJvYcCXO/hnBxLW9GFI1OH1Dn1UTO7jBJXnxm6+EGhW6qfqyGVn5qrnbK5u6kjFr2m/FInNKOuZD25VsUM5XPlI=@vger.kernel.org X-Gm-Message-State: AOJu0Yw/LM/e4gpCyH2NNrTkYJN9YibBvkAEgMx00e3vNm2RX3Ei4TeT jHLnGnIyK3EsNzIwr1Ur7AoQm4qgDDkKFfoSYHXnMadimW571N0J8shg X-Gm-Gg: ASbGncvkuv+In5mqoPSjcKx1h//VareIgwuEqLIeh1ouvLUsck1JC9KN8SPTyVVtGgz Z0eHfV5G8QqlYFMERmUq2hMb/70kYCDG1f1mTlps9qQLB8Nednpju5LTMX4z+o1IhLePge0RcJ4 JG+Y1BnIupLEMHvTWrOfGvSjfcDsDRPD2OYP189/djVxpG79jMHBbaZzjtOolvWp6VNlIZDg6ZX XAJs9xajplRdCnPT2MsT7CkYZb0vs7Yy7kWFsLdX6plmmIktYZUoEmErAwdZTjbTpbo1Rljq8Se BV8fDi9+YV7UG2KX9+XqhShHjRrh1B+CQUhOGFSFTFSQp3k+dWbE/ds9WsHhsBYsX371EIZFhWN rDNNDWw88aZ2t+iIQVf6ikqgfNDK4v2K3wrPHfl/HJy20BJAGvXB6Um3YSjJ0S9zZTtrccfvcTh jGyXrrajYG7QKKALg= X-Google-Smtp-Source: AGHT+IEUWXDZx+IAlNDV8Mu+BE5kMa9E4iKCTAQ71zUHKPBS5QeBaFqes3mcBdLmYCHeSFsI3jGX4w== X-Received: by 2002:a05:6214:230f:b0:796:bfca:9c68 with SMTP id 6a1803df08f44-879dc77b87bmr86391786d6.3.1759621839475; Sat, 04 Oct 2025 16:50:39 -0700 (PDT) Received: from seokw-960QHA.mynetworksettings.com ([2600:4041:4491:2000:dd54:e5ff:d4b7:cf43]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-878bdf5383fsm76180216d6.56.2025.10.04.16.50.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 04 Oct 2025 16:50:39 -0700 (PDT) From: Ryan Chung To: rostedt@goodmis.org, mhiramat@kernel.org Cc: mathieu.desnoyers@efficios.com, shuah@kernel.org, hca@linux.ibm.com, corbet@lwn.net, linux-trace-kernel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-doc@vger.kernel.org, seokwoo.chung130@gmail.com Subject: [PATCH v3 4/5] selftests/ftrace: dynevent: add reject cases for list/:entry/:exit Date: Sun, 5 Oct 2025 08:46:58 +0900 Message-ID: <20251004235001.133111-5-seokwoo.chung130@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251004235001.133111-1-seokwoo.chung130@gmail.com> References: <20251004235001.133111-1-seokwoo.chung130@gmail.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 Content-Type: text/plain; charset="utf-8" Signed-off-by: Ryan Chung --- .../test.d/dynevent/add_remove_fprobe.tc | 121 ++++++++++++++++++ 1 file changed, 121 insertions(+) diff --git a/tools/testing/selftests/ftrace/test.d/dynevent/add_remove_fpro= be.tc b/tools/testing/selftests/ftrace/test.d/dynevent/add_remove_fprobe.tc index 2506f464811b..d5761d31217c 100644 --- a/tools/testing/selftests/ftrace/test.d/dynevent/add_remove_fprobe.tc +++ b/tools/testing/selftests/ftrace/test.d/dynevent/add_remove_fprobe.tc @@ -2,6 +2,8 @@ # SPDX-License-Identifier: GPL-2.0 # description: Generic dynamic event - add/remove fprobe events # requires: dynamic_events "f[:[/][]] [%return] [= ]":README +# Note: list-style specs and :entry/:exit may be unavailable on older kern= els. +# These tests auto-skip at runtime if the list form is rejected by tracefs. =20 echo 0 > events/enable echo > dynamic_events @@ -89,4 +91,123 @@ if [ $cnt -ne $ocnt ]; then exit_fail fi =20 +# ---- New accept cases for list syntax with :entry/:exit and !-exclusions= ---- +if echo "f:test/__list_check $PLACE,$PLACE3" >> dynamic_events 2> /dev/nul= l; then + # Clean the probe added by the guard + echo "-:test/__list_check" >> dynamic_events + + # List default (entry) with exclusion, explicit group/event + echo "f:test/list_entry $PLACE,!$PLACE2,$PLACE3" >> dynamic_events + grep -q "test/list_entry" dynamic_events + test -d events/test/list_entry + + echo 1 > events/test/list_entry/enable + # Should attach to PLACE and PLACE3, but not PLACE2 + grep -q "$PLACE" enabled_functions + grep -q "$PLACE3" enabled_functions + ! grep -q "$PLACE2" enabled_functions + cnt=3D`cat enabled_functions | wc -l` + if [ $cnt -ne $((ocnt + 2)) ]; then + exit_fail + fi + + # Disable and remove; count should be back to baseline + echo 0 > events/test/list_entry/enable + echo "-:test/list_entry" >> dynamic_events + ! grep -q "test/list_entry" dynamic_events + cnt=3D`cat enabled_functions | wc -l` + if [ $cnt -ne $ocnt ]; then + exit_fail + fi + + # List with explicit :entry suffix (same behavior as default) + echo "f:test/list_entry_exp $PLACE,!$PLACE2,$PLACE3:entry" >> dynamic_eve= nts + grep -q "test/list_entry_exp" dynamic_events + test -d events/test/list_entry_exp + + echo 1 > events/test/list_entry_exp/enable + grep -q "$PLACE" enabled_functions + grep -q "$PLACE3" enabled_functions + ! grep -q "$PLACE2" enabled_functions + cnt=3D`cat enabled_functions | wc -l` + if [ $cnt -ne $((ocnt + 2)) ]; then + exit_fail + fi + + echo 0 > events/test/list_entry_exp/enable + echo "-:test/list_entry_exp" >> dynamic_events + ! grep -q "test/list_entry_exp" dynamic_events + cnt=3D`cat enabled_functions | wc -l` + if [ $cnt -ne $ocnt ]; then + exit_fail + fi + + # List with :exit suffix across the same set + echo "f:test/list_exit $PLACE,!$PLACE2,$PLACE3:exit" >> dynamic_events + grep -q "test/list_exit" dynamic_events + test -d events/test/list_exit + + echo 1 > events/test/list_exit/enable + # On return probes, enabled_functions still reflects attached functions. + grep -q "$PLACE" enabled_functions + grep -q "$PLACE3" enabled_functions + ! grep -q "$PLACE2" enabled_functions + cnt=3D`cat enabled_functions | wc -l` + if [ $cnt -ne $((ocnt + 2)) ]; then + exit_fail + fi + + echo 0 > events/test/list_exit/enable + echo "-:test/list_exit" >> dynamic_events + ! grep -q "test/list_exit" dynamic_events + cnt=3D`cat enabled_functions | wc -l` + if [ $cnt -ne $ocnt ]; then + exit_fail + fi + + # Enabling entry and exit together does not double-count functions + echo "f:test/list_both_e $PLACE,!$PLACE2,$PLACE3" >> dynamic_events + echo "f:test/list_both_x $PLACE,!$PLACE2,$PLACE3:exit" >> dynamic_events + grep -q "test/list_both_e" dynamic_events + grep -q "test/list_both_x" dynamic_events + test -d events/test/list_both_e + test -d events/test/list_both_x + + echo 1 > events/test/list_both_e/enable + cnt=3D`cat enabled_functions | wc -l` + if [ $cnt -ne $((ocnt + 2)) ]; then + exit_fail + fi + + # Enabling :exit for the same set should keep the count the same + echo 1 > events/test/list_both_x/enable + cnt=3D`cat enabled_functions | wc -l` + if [ $cnt -ne $((ocnt + 2)) ]; then + exit_fail + fi + + # Disable one; count should remain (the other still holds the attach) + echo 0 > events/test/list_both_e/enable + cnt=3D`cat enabled_functions | wc -l` + if [ $cnt -ne $((ocnt + 2)) ]; then + exit_fail + fi + + # Disable the other; count returns to baseline + echo 0 > events/test/list_both_x/enable + cnt=3D`cat enabled_functions | wc -l` + if [ $cnt -ne $ocnt ]; then + exit_fail + fi + + # Remove both definitions + echo "-:test/list_both_e" >> dynamic_events + echo "-:test/list_both_x" >> dynamic_events + ! grep -q "test/list_both_e" dynamic_events + ! grep -q "test/list_both_x" dynamic_events +else + # List-form not supported; skip silently + : +fi + clear_trace --=20 2.43.0 From nobody Wed Dec 17 19:22:33 2025 Received: from mail-qv1-f45.google.com (mail-qv1-f45.google.com [209.85.219.45]) (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 D712325B1CE for ; Sat, 4 Oct 2025 23:50:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759621846; cv=none; b=ROk7JOOEZkIi3vve1fR+tPRTBdeE35ksswr6cpKLaAtQKGfP+XNvQ2aBaAhZiyyNo2hfoYfK1Fqb7VsMcorXbtLecSms5Y3ciMSnuf3W4XdLigMf/Cy1pEz+EDecwi2YSpQbLYTxEKyxWXuzBmX3Yd20haZAjxBj8RJOKu4D0yY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759621846; c=relaxed/simple; bh=PwSbstcnj8nUvIHNmAbBLq7n/u1XUkkYoyy8GQo7W84=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=llXqmm+QqP2aDQn/L1g34RCQXaOv9mdXeXTprAOPpVH6LH4D3igJesinfRAuYjOQrtmPme89z9D7UnbaGLbcDvqnxBRnsg2MxMb2D7IbEx1FN7H13UODikvCg6Ke33v+5XyimIwvaI2u6l2NQ4lS5nwJXXGMHDUVbC1rxBf9mo4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=knZ/FzS5; arc=none smtp.client-ip=209.85.219.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="knZ/FzS5" Received: by mail-qv1-f45.google.com with SMTP id 6a1803df08f44-7957e2f6ba8so35459786d6.3 for ; Sat, 04 Oct 2025 16:50:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1759621844; x=1760226644; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=p5Zg/1Y7tRoNadojvxskF2acevAo1Z1Xk2uqZsYRAJI=; b=knZ/FzS5Gzsj8O28KdwfvuudokosabHdZD01pTtPrpKyrftL3icpAZ9dY9ZSxfp/zB 9S0VmUe3nre0RIB/8KRb6e9VL++6mbiYI52QGUrVTEmK/844S9x1X9sfhKqNj9JtXgBs OVu6hlmjfR2XhJtvDErhCbc9/AudOBaDCuNl2xOUXJqTwqAKypvymGYMvzZhh+LotgHx V5KchoWQo3+VkDdXIwpZ9XB3dUzZQbjaPOikmNQiEXgvSFUSDZLDrZonC51I0RDzA7x/ /O+pAWiXwp+7VSVBthMHPH0oRkHX7XjQ5mon/800W5W8tqo1hRCCs59cpvx2D4Temfj1 U6YQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759621844; x=1760226644; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=p5Zg/1Y7tRoNadojvxskF2acevAo1Z1Xk2uqZsYRAJI=; b=hjsltHyEN7NphHzB+Hjau7wHdeTG4kf7NcOss+5MgTmKGh94Lnw38EW6uQJTkUmVN3 ilkZlEovOtHZnc7j0EjdnhtI1arg3Xzy6XI+8Cp3PGTkGH/afdw1f3MWBu3CZEXneUAB KqOEzC7tWPCwIHea86DbKQtKUzt0DmqNKpOdLQlvS/hZabXUzPGl3IzUN8H8QTr1TJJo WtklSCDONqSolfMbSFTW4DI6rP5fJ5bfOSIDawnPfPnnYkdbtOItgyxUPeobrlEmpVGH S7gYSRTL8uevsXM1u56ACH+fOjnOQHNz2vIyaX+1ZooKRsvyf53slDTk54Nxi4es5CVC 8hOw== X-Forwarded-Encrypted: i=1; AJvYcCX27tK094qHt+5LOgLDv2rEfoVcbAGr3LyWRBR2NYzhF6XzW5jdRtj7C/dc6rh8/h1ieiiCOhYAFTwryl0=@vger.kernel.org X-Gm-Message-State: AOJu0YyI+KTd6DFewSyt021t8rsuj8XZFlriMc0/gtRLL1dadY8rTCV3 MB0Av+N1Xz0HmSy1ef5qUCXwg5wxQfMqyEJzyVvR9JsMLk3NztK0XRe3 X-Gm-Gg: ASbGnctP1J72AemW/6kg4wRRmXWDB5AZAfkpMgKA6CcUlizFUA/fPK3yN3rFqX6Hsfe Rff0ILRmWV8Crz4Sy0ffnPzt+lQceoXq1rCo+twEJNtJE2ZxwXl3KMkCsOrq5vyfgbZT/GCw6yP WE6KT8TT2yVJUuBO4s846s8ssxlxqd9nevOz+z32+V1N5SbzvIlmwevKxT5irD0k6Ch0zPGFhHK CYAeQ9qB2VE7JnYuC114GV0cz8RyiWWA59xeNLdcj2L5zYv93uLW2WVBshBwAr2V+MpUXnAb+Kl 65xvePCE+JNuExmfXbO34DODFZOBGclGaKo2WCEE3abeuNT6Vas4iwzID972vBz5u0RgJlOKVk+ tNfNS/4bcBEKpTj7ulHxR0yPvTJJPF+DA9ipPMt2AFeVsYYBkAi0z3qesumetHCF612L9CxhzrI b1z/vldA8RtmT7rTg= X-Google-Smtp-Source: AGHT+IECC20UZjnBEUBrVIWpdj8P1aH96WApe+AVKUjSXUYa+YVIzdIMuaznQLxMCYBN3sW2e1+1jQ== X-Received: by 2002:a05:6214:4108:b0:81c:b934:a01 with SMTP id 6a1803df08f44-879dc83ec30mr102513536d6.31.1759621843927; Sat, 04 Oct 2025 16:50:43 -0700 (PDT) Received: from seokw-960QHA.mynetworksettings.com ([2600:4041:4491:2000:dd54:e5ff:d4b7:cf43]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-878bdf5383fsm76180216d6.56.2025.10.04.16.50.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 04 Oct 2025 16:50:42 -0700 (PDT) From: Ryan Chung To: rostedt@goodmis.org, mhiramat@kernel.org Cc: mathieu.desnoyers@efficios.com, shuah@kernel.org, hca@linux.ibm.com, corbet@lwn.net, linux-trace-kernel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-doc@vger.kernel.org, seokwoo.chung130@gmail.com Subject: [PATCH v3 5/5] selftests/ftrace: dynevent: add reject cases Date: Sun, 5 Oct 2025 08:46:59 +0900 Message-ID: <20251004235001.133111-6-seokwoo.chung130@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251004235001.133111-1-seokwoo.chung130@gmail.com> References: <20251004235001.133111-1-seokwoo.chung130@gmail.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 Content-Type: text/plain; charset="utf-8" Signed-off-by: Ryan Chung --- .../ftrace/test.d/dynevent/fprobe_syntax_errors.tc | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/tools/testing/selftests/ftrace/test.d/dynevent/fprobe_syntax_e= rrors.tc b/tools/testing/selftests/ftrace/test.d/dynevent/fprobe_syntax_err= ors.tc index fee479295e2f..720c0047c0ff 100644 --- a/tools/testing/selftests/ftrace/test.d/dynevent/fprobe_syntax_errors.tc +++ b/tools/testing/selftests/ftrace/test.d/dynevent/fprobe_syntax_errors.tc @@ -2,6 +2,7 @@ # SPDX-License-Identifier: GPL-2.0 # description: Fprobe event parser error log check # requires: dynamic_events "f[:[/][]] [%return] [= ]":README +# requires: dynamic_events "f[:[/][]] [:entry|:ex= it] []":README =20 check_error() { # command-with-error-pos-by-^ ftrace_errlog_check 'trace_fprobe' "$1" 'dynamic_events' @@ -95,6 +96,18 @@ fi # %return suffix errors check_error 'f vfs_read^%hoge' # BAD_ADDR_SUFFIX =20 +# New list/wildcard syntax errors +if grep -q: ":exit" README; then +check_error 'f ^vfs_read, do_sys_open' # LIST_NEEDS_EVENT +check_error 'f ^vfs_read,do_sys_open' # LIST_NEEDS_EVENT +check_error 'f:dyn/ret_forbid vfs_*^%return' # WILDCARD_WITH_RETURN +check_error 'f:dyn/ret_forbid vfs_read,do_sys_open^%return' # LIST_WITH_RE= TURN +check_error 'f:dyn/list_bad ^,vfs_read' # LEADING_COMMA +check_error 'f:dyn/list_bad vfs_read,^' # TRAILING_COMMA +check_error 'f:dyn/list_bad vfs_read,^,do_sys_open' # EMPTY_TOKEN +check_error 'f:dyn/mixed vfs_read%return^:exit' # MIXED_SUFFIX + + # BTF arguments errors if grep -q "" README; then check_error 'f vfs_read args=3D^$arg*' # BAD_VAR_ARGS --=20 2.43.0