LinuxPPC-Dev Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Athira Rajeev <atrajeev@linux.ibm.com>
To: Arnaldo Carvalho de Melo <acme@kernel.org>,
	Namhyung Kim <namhyung@kernel.org>,
	Ian Rogers <irogers@google.com>
Cc: jolsa@kernel.org, adrian.hunter@intel.com, mpetlan@redhat.com,
	tmricht@linux.ibm.com, maddy@linux.ibm.com, irogers@google.com,
	linux-perf-users@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
	hbathini@linux.vnet.ibm.com, Tejas.Manhas1@ibm.com,
	Tanushree.Shah@ibm.com, Shivani.Nittor@ibm.com,
	Venkat <venkat88@linux.ibm.com>
Subject: Re: [PATCH V3] tools/perf/tests: Update test_adding_kernel.sh to handle proper debuginfo check
Date: Thu, 21 May 2026 14:01:08 +0530	[thread overview]
Message-ID: <D7E4148E-DC3F-4FCC-8DD8-AA4A085DAF1D@linux.ibm.com> (raw)
In-Reply-To: <AEEE2C46-8D1E-442E-B5A9-7B53E681E69B@linux.ibm.com>



> On 29 Apr 2026, at 7:01 PM, Venkat <venkat88@linux.ibm.com> wrote:
> 
> 
> 
>> On 24 Apr 2026, at 10:54 PM, Athira Rajeev <atrajeev@linux.ibm.com> wrote:
>> 
>> Perf test perftool-testsuite_probe fails as below:
>> 
>> Regexp not found: "\s*probe:inode_permission(?:_\d+)?\s+\(on inode_permission(?:[:\+][0-9A-Fa-f]+)?@.+\)"
>> -- [ FAIL ] -- perf_probe :: test_adding_kernel :: listing added probe :: perf probe -l (output regexp parsing)
>> -- [ PASS ] -- perf_probe :: test_adding_kernel :: removing multiple probes
>> Regexp not found: "probe:vfs_mknod"
>> Regexp not found: "probe:vfs_create"
>> Regexp not found: "probe:vfs_rmdir"
>> Regexp not found: "probe:vfs_link"
>> Regexp not found: "probe:vfs_write"
>> -- [ FAIL ] -- perf_probe :: test_adding_kernel :: wildcard adding support (command exitcode + output regexp parsing)
>> Regexp not found: "somenonexistingrandomstuffwhichisalsoprettylongorevenlongertoexceed64"
>> Regexp not found: "in this function|at this address"
>> -- [ FAIL ] -- perf_probe :: test_adding_kernel :: non-existing variable (output regexp parsing)
>> ## [ FAIL ] ## perf_probe :: test_adding_kernel SUMMARY :: 3 failures found
>> 
>> Further analysing, the failed testcase is for "test_adding_kernel".
>> If the kernel debuginfo is missing, perf probe fails as below:
>> 
>> perf probe -nf --max-probes=512 -a 'vfs_* $params'
>> Failed to find the path for the kernel: No such file or directory
>> Error: Failed to add events.
>> 
>> skip_if_no_debuginfo has check to handle whether debuginfo is present
>> and the testcase checks for debuginfo since this :
>> commit 90d32e92011e ("tools/perf: Handle perftool-testsuite_probe
>> testcases fail when kernel debuginfo is not present")
>> 
>> Recently a change got added in "tests/shell/lib/probe_vfs_getname.sh"
>> via this another fix:
>> commit 92b664dcefab ("perf test probe_vfs_getname: Skip if no suitable
>> line detected")
>> Since this commit, first add_probe_vfs_getname is used to prevent false
>> failures. And based on return code of add_probe_vfs_getname, skip_if_no_debuginfo
>> is used to skip testcase if debuginfo is present. And this modified other
>> testcases to call add_probe_vfs_getname first and invoke
>> skip_if_no_debuginfo based on return value.
>> 
>> The tests in test_adding_kernel.sh which depends on presence of
>> debuginfo are:
>> 1. probe add for inode_permission
>> 2. probe max-probes option using 'vfs_* $params'
>> 3. non-existing variable probing
>> 
>> For these tests, probe check for specific line is not required.
>> So call skip_if_no_debuginfo with argument to say if line check is
>> needed. This is to convey to skip_if_no_debuginfo() function
>> that test only needs to check for debuginfo, and not specifically
>> line number. Update skip_if_no_debuginfo to use simple "perf probe"
>> check if test only needs to check for debuginfo. And for other
>> tests which rely on line number, use add_probe_vfs_getname()
>> Update other places which uses skip_if_no_debuginfo to use argument
>> as zero.
>> 
>> With the change, verified that only three which required debuginfo only
>> is skipped and others ran successfully. Also tested with debuginfo
>> to make sure tests are not skipped.
>> 
>> Reported-by: Tejas Manhas <Tejas.Manhas1@ibm.com>
>> Reviewed-by: Ian Rogers <irogers@google.com>
>> Signed-off-by: Athira Rajeev <atrajeev@linux.ibm.com>
>> ---
> 
> Tested this patch, by applying on top of mainline, and it fixes the reported issue.
> 
> Without this patch:
> 
> # ./perf test -v perftool-testsuite_probe
> --- start ---
> test child forked, pid 15772
> Probing start_text
> -- [ PASS ] -- perf_probe :: test_adding_blacklisted :: adding blacklisted function start_text
> -- [ PASS ] -- perf_probe :: test_adding_blacklisted :: listing blacklisted probe (should NOT be listed)
> ## [ PASS ] ## perf_probe :: test_adding_blacklisted SUMMARY
> -- [ PASS ] -- perf_probe :: test_adding_kernel :: adding probe inode_permission ::
> -- [ PASS ] -- perf_probe :: test_adding_kernel :: adding probe inode_permission :: -a
> -- [ PASS ] -- perf_probe :: test_adding_kernel :: adding probe inode_permission :: --add
> -- [ PASS ] -- perf_probe :: test_adding_kernel :: listing added probe :: perf list
> Regexp not found: "\s*probe:inode_permission(?:_\d+)?\s+\(on inode_permission(?:[:\+][0-9A-Fa-f]+)?@.+\)"
> -- [ FAIL ] -- perf_probe :: test_adding_kernel :: listing added probe :: perf probe -l (output regexp parsing)
> -- [ PASS ] -- perf_probe :: test_adding_kernel :: using added probe
> -- [ PASS ] -- perf_probe :: test_adding_kernel :: deleting added probe
> -- [ PASS ] -- perf_probe :: test_adding_kernel :: listing removed probe (should NOT be listed)
> -- [ PASS ] -- perf_probe :: test_adding_kernel :: dry run :: adding probe
> -- [ PASS ] -- perf_probe :: test_adding_kernel :: force-adding probes :: first probe adding
> -- [ PASS ] -- perf_probe :: test_adding_kernel :: force-adding probes :: second probe adding (without force)
> -- [ PASS ] -- perf_probe :: test_adding_kernel :: force-adding probes :: second probe adding (with force)
> -- [ PASS ] -- perf_probe :: test_adding_kernel :: using doubled probe
> -- [ PASS ] -- perf_probe :: test_adding_kernel :: removing multiple probes
> Regexp not found: "probe:vfs_mknod"
> Regexp not found: "probe:vfs_create"
> Regexp not found: "probe:vfs_rmdir"
> Regexp not found: "probe:vfs_link"
> Regexp not found: "probe:vfs_write"
> -- [ FAIL ] -- perf_probe :: test_adding_kernel :: wildcard adding support (command exitcode + output regexp parsing)
> Regexp not found: "Failed to find"
> Regexp not found: "somenonexistingrandomstuffwhichisalsoprettylongorevenlongertoexceed64"
> Regexp not found: "in this function|at this address"
> Line did not match any pattern: "The /lib/modules/7.1.0-rc1+/build/vmlinux file has no debug information."
> Line did not match any pattern: "Rebuild with CONFIG_DEBUG_INFO=y, or install an appropriate debuginfo package."
> -- [ FAIL ] -- perf_probe :: test_adding_kernel :: non-existing variable (output regexp parsing)
> -- [ PASS ] -- perf_probe :: test_adding_kernel :: function with retval :: add
> -- [ PASS ] -- perf_probe :: test_adding_kernel :: function with retval :: record
> -- [ PASS ] -- perf_probe :: test_adding_kernel :: function argument probing :: script
> ## [ FAIL ] ## perf_probe :: test_adding_kernel SUMMARY :: 3 failures found
> -- [ SKIP ] -- perf_probe :: test_basic :: help message :: testcase skipped
> -- [ PASS ] -- perf_probe :: test_basic :: usage message
> -- [ PASS ] -- perf_probe :: test_basic :: quiet switch
> ## [ PASS ] ## perf_probe :: test_basic SUMMARY
> -- [ PASS ] -- perf_probe :: test_invalid_options :: missing argument for -a
> -- [ PASS ] -- perf_probe :: test_invalid_options :: missing argument for -d
> -- [ PASS ] -- perf_probe :: test_invalid_options :: missing argument for -L
> -- [ PASS ] -- perf_probe :: test_invalid_options :: missing argument for -V
> -- [ PASS ] -- perf_probe :: test_invalid_options :: unnecessary argument for -F
> -- [ PASS ] -- perf_probe :: test_invalid_options :: unnecessary argument for -l
> -- [ PASS ] -- perf_probe :: test_invalid_options :: mutually exclusive options :: -a xxx -d xxx
> -- [ PASS ] -- perf_probe :: test_invalid_options :: mutually exclusive options :: -a xxx -L foo
> -- [ PASS ] -- perf_probe :: test_invalid_options :: mutually exclusive options :: -a xxx -V foo
> -- [ PASS ] -- perf_probe :: test_invalid_options :: mutually exclusive options :: -a xxx -l
> -- [ PASS ] -- perf_probe :: test_invalid_options :: mutually exclusive options :: -a xxx -F
> -- [ PASS ] -- perf_probe :: test_invalid_options :: mutually exclusive options :: -d xxx -L foo
> -- [ PASS ] -- perf_probe :: test_invalid_options :: mutually exclusive options :: -d xxx -V foo
> -- [ PASS ] -- perf_probe :: test_invalid_options :: mutually exclusive options :: -d xxx -l
> -- [ PASS ] -- perf_probe :: test_invalid_options :: mutually exclusive options :: -d xxx -F
> -- [ PASS ] -- perf_probe :: test_invalid_options :: mutually exclusive options :: -L foo -V bar
> -- [ PASS ] -- perf_probe :: test_invalid_options :: mutually exclusive options :: -L foo -l
> -- [ PASS ] -- perf_probe :: test_invalid_options :: mutually exclusive options :: -L foo -F
> -- [ PASS ] -- perf_probe :: test_invalid_options :: mutually exclusive options :: -V foo -l
> -- [ PASS ] -- perf_probe :: test_invalid_options :: mutually exclusive options :: -V foo -F
> -- [ PASS ] -- perf_probe :: test_invalid_options :: mutually exclusive options :: -l -F
> ## [ PASS ] ## perf_probe :: test_invalid_options SUMMARY
> -- [ PASS ] -- perf_probe :: test_line_semantics :: acceptable descriptions :: func
> -- [ PASS ] -- perf_probe :: test_line_semantics :: acceptable descriptions :: func:10
> -- [ PASS ] -- perf_probe :: test_line_semantics :: acceptable descriptions :: func:0-10
> -- [ PASS ] -- perf_probe :: test_line_semantics :: acceptable descriptions :: func:2+10
> -- [ PASS ] -- perf_probe :: test_line_semantics :: acceptable descriptions :: func@source.c
> -- [ PASS ] -- perf_probe :: test_line_semantics :: acceptable descriptions :: func@source.c:1
> -- [ PASS ] -- perf_probe :: test_line_semantics :: acceptable descriptions :: source.c:1
> -- [ PASS ] -- perf_probe :: test_line_semantics :: acceptable descriptions :: source.c:1+1
> -- [ PASS ] -- perf_probe :: test_line_semantics :: acceptable descriptions :: source.c:1-10
> -- [ PASS ] -- perf_probe :: test_line_semantics :: unacceptable descriptions :: func:foo
> -- [ PASS ] -- perf_probe :: test_line_semantics :: unacceptable descriptions :: func:1-foo
> -- [ PASS ] -- perf_probe :: test_line_semantics :: unacceptable descriptions :: func:1+foo
> -- [ PASS ] -- perf_probe :: test_line_semantics :: unacceptable descriptions :: func;lazy\*pattern
> ## [ PASS ] ## perf_probe :: test_line_semantics SUMMARY
> ---- end(-1) ----
> 137: perftool-testsuite_probe                                        : FAILED!
> 
> With This patch:
> 
> # ./perf test -v perftool-testsuite_probe
> 137: perftool-testsuite_probe                                        : Ok
> 
> Please add below tag.
> 
> Tested-by: Venkat Rao Bagalkote <venkat88@linux.ibm.com>
> 
> Regards,
> Venkat.

Hi,

Can we please have this pulled in, if the patches looks fine ?

Thanks
Athira
> 
>> Changelog:
>> v2 -> v3:
>> - Update other callsites to use "skip_if_no_debuginfo 0"
>> - Use "perf probe -vn --add inode_permission $params"
>> 
>> v1 -> v2:
>> - First version used "perf probe -v -L getname_flags" for debuginfo
>> check. This will not catch fail string "Debuginfo-analysis is not
>> supported" which is used in cases when perf is built without dwarf.
>> So use "perf probe -vn add inode_permission" to capture cases when
>> tools built with NO_LIBDWARF=1. This will capture debuginfo missing as
>> well as tool built without dwarf case.
>> 
>> .../tests/shell/base_probe/test_adding_kernel.sh  | 15 ++++++++++++++-
>> tools/perf/tests/shell/lib/probe_vfs_getname.sh   | 13 ++++++++++++-
>> tools/perf/tests/shell/probe_vfs_getname.sh       |  7 ++++++-
>> .../shell/record+script_probe_vfs_getname.sh      |  7 ++++++-
>> tools/perf/tests/shell/trace+probe_vfs_getname.sh |  7 ++++++-
>> 5 files changed, 44 insertions(+), 5 deletions(-)
>> 
>> diff --git a/tools/perf/tests/shell/base_probe/test_adding_kernel.sh b/tools/perf/tests/shell/base_probe/test_adding_kernel.sh
>> index 555a825d55f2..f3db125c8669 100755
>> --- a/tools/perf/tests/shell/base_probe/test_adding_kernel.sh
>> +++ b/tools/perf/tests/shell/base_probe/test_adding_kernel.sh
>> @@ -23,10 +23,23 @@ TEST_RESULT=0
>> . "$DIR_PATH/../lib/probe_vfs_getname.sh"
>> 
>> TEST_PROBE=${TEST_PROBE:-"inode_permission"}
>> +PROBE_NO_LINE_CHECK=1
>> 
>> # set NO_DEBUGINFO to skip testcase if debuginfo is not present
>> # skip_if_no_debuginfo returns 2 if debuginfo is not present
>> -skip_if_no_debuginfo
>> +#
>> +# The perf probe checks which depends on presence of debuginfo and
>> +# used in this testcase are:
>> +# 1. probe add for inode_permission
>> +# 2. probe max-probes option using 'vfs_* $params'
>> +# 3. non-existing variable probing
>> +#
>> +# For these tests, probe check for specific line is not
>> +# required ( add_probe_vfs_getname does that ). So call
>> +# skip_if_no_debuginfo with argument as 1. This is to convey
>> +# that test only needs to check for debuginfo, and not specifically
>> +# line number
>> +skip_if_no_debuginfo $PROBE_NO_LINE_CHECK
>> if [ $? -eq 2 ]; then
>> NO_DEBUGINFO=1
>> fi
>> diff --git a/tools/perf/tests/shell/lib/probe_vfs_getname.sh b/tools/perf/tests/shell/lib/probe_vfs_getname.sh
>> index 88cd0e26d5f6..2c5252a38ea1 100644
>> --- a/tools/perf/tests/shell/lib/probe_vfs_getname.sh
>> +++ b/tools/perf/tests/shell/lib/probe_vfs_getname.sh
>> @@ -39,7 +39,18 @@ add_probe_vfs_getname() {
>> }
>> 
>> skip_if_no_debuginfo() {
>> - add_probe_vfs_getname -v 2>&1 | grep -E -q "^(Failed to find the path for the kernel|Debuginfo-analysis is not supported)|(file has no debug information)" && return 2
>> + no_line_check=$1
>> + debug_str="^(Failed to find the path for the kernel|Debuginfo-analysis is not supported)|(file has no debug information)"
>> +
>> + # search for debug_str using simple perf probe if the
>> + # test only needs to check for debuginfo, and not specifically
>> + # line number.
>> + if [ $no_line_check -eq 1 ]; then
>> + perf probe -vn --add 'inode_permission $params' 2>&1 | grep -E -q "$debug_str" && return 2
>> + else
>> + add_probe_vfs_getname -v 2>&1 | grep -E -q "$debug_str" && return 2
>> + fi
>> +
>> return 1
>> }
>> 
>> diff --git a/tools/perf/tests/shell/probe_vfs_getname.sh b/tools/perf/tests/shell/probe_vfs_getname.sh
>> index 5fe5682c28ce..b0878f571449 100755
>> --- a/tools/perf/tests/shell/probe_vfs_getname.sh
>> +++ b/tools/perf/tests/shell/probe_vfs_getname.sh
>> @@ -16,8 +16,13 @@ skip_if_no_perf_probe || exit 2
>> add_probe_vfs_getname
>> err=$?
>> 
>> +# Invoke skip_if_no_debuginfo with argument as 0,
>> +# since the test needs suitable line number for getname
>> +# along with debuginfo check.
>> +# Argument "1" is used when to convey that test only needs to
>> +# check for debuginfo, and not specifically line number.
>> if [ $err -eq 1 ] ; then
>> - skip_if_no_debuginfo
>> + skip_if_no_debuginfo 0
>> err=$?
>> fi
>> 
>> diff --git a/tools/perf/tests/shell/record+script_probe_vfs_getname.sh b/tools/perf/tests/shell/record+script_probe_vfs_getname.sh
>> index 002f7037f182..48063fc2b221 100755
>> --- a/tools/perf/tests/shell/record+script_probe_vfs_getname.sh
>> +++ b/tools/perf/tests/shell/record+script_probe_vfs_getname.sh
>> @@ -38,8 +38,13 @@ perf_script_filenames() {
>> add_probe_vfs_getname
>> err=$?
>> 
>> +# Invoke skip_if_no_debuginfo with argument as 0,
>> +# since the test needs suitable line number for getname
>> +# along with debuginfo check.
>> +# Argument "1" is used when to convey that test only needs to
>> +# check for debuginfo, and not specifically line number.
>> if [ $err -eq 1 ] ; then
>> -        skip_if_no_debuginfo
>> +        skip_if_no_debuginfo 0
>>        err=$?
>> fi
>> 
>> diff --git a/tools/perf/tests/shell/trace+probe_vfs_getname.sh b/tools/perf/tests/shell/trace+probe_vfs_getname.sh
>> index 7a0b1145d0cd..6833fba12086 100755
>> --- a/tools/perf/tests/shell/trace+probe_vfs_getname.sh
>> +++ b/tools/perf/tests/shell/trace+probe_vfs_getname.sh
>> @@ -28,8 +28,13 @@ trace_open_vfs_getname() {
>> add_probe_vfs_getname
>> err=$?
>> 
>> +# Invoke skip_if_no_debuginfo with argument as 0,
>> +# since the test needs suitable line number for getname
>> +# along with debuginfo check.
>> +# Argument "1" is used when to convey that test only needs to
>> +# check for debuginfo, and not specifically line number.
>> if [ $err -eq 1 ] ; then
>> -        skip_if_no_debuginfo
>> +        skip_if_no_debuginfo 0
>>        err=$?
>> fi
>> 
>> -- 
>> 2.47.3




  reply	other threads:[~2026-05-21  8:31 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-04-24 17:24 [PATCH V3] tools/perf/tests: Update test_adding_kernel.sh to handle proper debuginfo check Athira Rajeev
2026-04-29 13:31 ` Venkat
2026-05-21  8:31   ` Athira Rajeev [this message]
2026-06-09 14:25     ` Athira Rajeev

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=D7E4148E-DC3F-4FCC-8DD8-AA4A085DAF1D@linux.ibm.com \
    --to=atrajeev@linux.ibm.com \
    --cc=Shivani.Nittor@ibm.com \
    --cc=Tanushree.Shah@ibm.com \
    --cc=Tejas.Manhas1@ibm.com \
    --cc=acme@kernel.org \
    --cc=adrian.hunter@intel.com \
    --cc=hbathini@linux.vnet.ibm.com \
    --cc=irogers@google.com \
    --cc=jolsa@kernel.org \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=maddy@linux.ibm.com \
    --cc=mpetlan@redhat.com \
    --cc=namhyung@kernel.org \
    --cc=tmricht@linux.ibm.com \
    --cc=venkat88@linux.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox