[PATCH 4.18 049/235] perf tests: Fix record+probe_libc_inet_pton.sh when event exists

2018-09-24 Thread Greg Kroah-Hartman
4.18-stable review patch.  If anyone has any objections, please let me know.

--

From: Sandipan Das 

[ Upstream commit 60089e42d38438772e2f83334e3e5b7497009366 ]

If the event 'probe_libc:inet_pton' already exists, this test fails and
deletes the existing event before exiting. This will then pass for any
subsequent executions.

Instead of skipping to deleting the existing event because of failing to
add a new event, a duplicate event is now created and the script
continues with the usual checks. Only the new duplicate event that is
created at the beginning of the test is deleted as a part of the
cleanups in the end. All existing events remain as it is.

This can be observed on a powerpc64 system running Fedora 27 as shown
below.

  # perf probe -x /usr/lib64/power8/libc-2.26.so -a inet_pton

  Added new event:
probe_libc:inet_pton (on inet_pton in /usr/lib64/power8/libc-2.26.so)

Before:

  # perf test -v "probe libc's inet_pton & backtrace it with ping"

  62: probe libc's inet_pton & backtrace it with ping   :
  --- start ---
  test child forked, pid 21302
  test child finished with -1
   end 
  probe libc's inet_pton & backtrace it with ping: FAILED!

  # perf probe --list

After:

  # perf test -v "probe libc's inet_pton & backtrace it with ping"

  62: probe libc's inet_pton & backtrace it with ping   :
  --- start ---
  test child forked, pid 21490
  ping 21513 [035] 39357.565561: probe_libc:inet_pton_1: (7fffa4c623b0)
  7fffa4c623b0 __GI___inet_pton+0x0 (/usr/lib64/power8/libc-2.26.so)
  7fffa4c190dc gaih_inet.constprop.7+0xf4c (/usr/lib64/power8/libc-2.26.so)
  7fffa4c19c4c getaddrinfo+0x15c (/usr/lib64/power8/libc-2.26.so)
  111d93c20 main+0x3e0 (/usr/bin/ping)
  test child finished with 0
   end 
  probe libc's inet_pton & backtrace it with ping: Ok

  # perf probe --list

probe_libc:inet_pton (on __inet_pton@resolv/inet_pton.c in 
/usr/lib64/power8/libc-2.26.so)

Signed-off-by: Sandipan Das 
Cc: Jiri Olsa 
Cc: Kim Phillips 
Cc: Naveen N. Rao 
Cc: Ravi Bangoria 
Link: 
http://lkml.kernel.org/r/e11fecff96e6cf4c65cdbd9012463513d7b8356c.1530724939.git.sandi...@linux.ibm.com
Signed-off-by: Arnaldo Carvalho de Melo 
Signed-off-by: Sasha Levin 
Signed-off-by: Greg Kroah-Hartman 
---
 tools/perf/tests/shell/record+probe_libc_inet_pton.sh |   28 +++---
 1 file changed, 24 insertions(+), 4 deletions(-)

--- a/tools/perf/tests/shell/record+probe_libc_inet_pton.sh
+++ b/tools/perf/tests/shell/record+probe_libc_inet_pton.sh
@@ -13,11 +13,24 @@
 libc=$(grep -w libc /proc/self/maps | head -1 | sed -r 
's/.*[[:space:]](\/.*)/\1/g')
 nm -Dg $libc 2>/dev/null | fgrep -q inet_pton || exit 254
 
+event_pattern='probe_libc:inet_pton(\_[[:digit:]]+)?'
+
+add_libc_inet_pton_event() {
+
+   event_name=$(perf probe -f -x $libc -a inet_pton 2>&1 | tail -n +2 | 
head -n -5 | \
+   grep -P -o "$event_pattern(?=[[:space:]]\(on inet_pton 
in $libc\))")
+
+   if [ $? -ne 0 -o -z "$event_name" ] ; then
+   printf "FAIL: could not add event\n"
+   return 1
+   fi
+}
+
 trace_libc_inet_pton_backtrace() {
 
expected=`mktemp -u /tmp/expected.XXX`
 
-   echo "ping[][0-9 \.:]+probe_libc:inet_pton: \([[:xdigit:]]+\)" > 
$expected
+   echo "ping[][0-9 \.:]+$event_name: \([[:xdigit:]]+\)" > $expected
echo ".*inet_pton\+0x[[:xdigit:]]+[[:space:]]\($libc|inlined\)$" >> 
$expected
case "$(uname -m)" in
s390x)
@@ -41,7 +54,7 @@ trace_libc_inet_pton_backtrace() {
 
perf_data=`mktemp -u /tmp/perf.data.XXX`
perf_script=`mktemp -u /tmp/perf.script.XXX`
-   perf record -e probe_libc:inet_pton/$eventattr/ -o $perf_data ping -6 
-c 1 ::1 > /dev/null 2>&1
+   perf record -e $event_name/$eventattr/ -o $perf_data ping -6 -c 1 ::1 > 
/dev/null 2>&1
perf script -i $perf_data > $perf_script
 
exec 3<$perf_script
@@ -62,13 +75,20 @@ trace_libc_inet_pton_backtrace() {
# even if the perf script output does not match.
 }
 
+delete_libc_inet_pton_event() {
+
+   if [ -n "$event_name" ] ; then
+   perf probe -q -d $event_name
+   fi
+}
+
 # Check for IPv6 interface existence
 ip a sh lo | fgrep -q inet6 || exit 2
 
 skip_if_no_perf_probe && \
-perf probe -q $libc inet_pton && \
+add_libc_inet_pton_event && \
 trace_libc_inet_pton_backtrace
 err=$?
 rm -f ${perf_data} ${perf_script} ${expected}
-perf probe -q -d probe_libc:inet_pton
+delete_libc_inet_pton_event
 exit $err




[PATCH 4.18 049/235] perf tests: Fix record+probe_libc_inet_pton.sh when event exists

2018-09-24 Thread Greg Kroah-Hartman
4.18-stable review patch.  If anyone has any objections, please let me know.

--

From: Sandipan Das 

[ Upstream commit 60089e42d38438772e2f83334e3e5b7497009366 ]

If the event 'probe_libc:inet_pton' already exists, this test fails and
deletes the existing event before exiting. This will then pass for any
subsequent executions.

Instead of skipping to deleting the existing event because of failing to
add a new event, a duplicate event is now created and the script
continues with the usual checks. Only the new duplicate event that is
created at the beginning of the test is deleted as a part of the
cleanups in the end. All existing events remain as it is.

This can be observed on a powerpc64 system running Fedora 27 as shown
below.

  # perf probe -x /usr/lib64/power8/libc-2.26.so -a inet_pton

  Added new event:
probe_libc:inet_pton (on inet_pton in /usr/lib64/power8/libc-2.26.so)

Before:

  # perf test -v "probe libc's inet_pton & backtrace it with ping"

  62: probe libc's inet_pton & backtrace it with ping   :
  --- start ---
  test child forked, pid 21302
  test child finished with -1
   end 
  probe libc's inet_pton & backtrace it with ping: FAILED!

  # perf probe --list

After:

  # perf test -v "probe libc's inet_pton & backtrace it with ping"

  62: probe libc's inet_pton & backtrace it with ping   :
  --- start ---
  test child forked, pid 21490
  ping 21513 [035] 39357.565561: probe_libc:inet_pton_1: (7fffa4c623b0)
  7fffa4c623b0 __GI___inet_pton+0x0 (/usr/lib64/power8/libc-2.26.so)
  7fffa4c190dc gaih_inet.constprop.7+0xf4c (/usr/lib64/power8/libc-2.26.so)
  7fffa4c19c4c getaddrinfo+0x15c (/usr/lib64/power8/libc-2.26.so)
  111d93c20 main+0x3e0 (/usr/bin/ping)
  test child finished with 0
   end 
  probe libc's inet_pton & backtrace it with ping: Ok

  # perf probe --list

probe_libc:inet_pton (on __inet_pton@resolv/inet_pton.c in 
/usr/lib64/power8/libc-2.26.so)

Signed-off-by: Sandipan Das 
Cc: Jiri Olsa 
Cc: Kim Phillips 
Cc: Naveen N. Rao 
Cc: Ravi Bangoria 
Link: 
http://lkml.kernel.org/r/e11fecff96e6cf4c65cdbd9012463513d7b8356c.1530724939.git.sandi...@linux.ibm.com
Signed-off-by: Arnaldo Carvalho de Melo 
Signed-off-by: Sasha Levin 
Signed-off-by: Greg Kroah-Hartman 
---
 tools/perf/tests/shell/record+probe_libc_inet_pton.sh |   28 +++---
 1 file changed, 24 insertions(+), 4 deletions(-)

--- a/tools/perf/tests/shell/record+probe_libc_inet_pton.sh
+++ b/tools/perf/tests/shell/record+probe_libc_inet_pton.sh
@@ -13,11 +13,24 @@
 libc=$(grep -w libc /proc/self/maps | head -1 | sed -r 
's/.*[[:space:]](\/.*)/\1/g')
 nm -Dg $libc 2>/dev/null | fgrep -q inet_pton || exit 254
 
+event_pattern='probe_libc:inet_pton(\_[[:digit:]]+)?'
+
+add_libc_inet_pton_event() {
+
+   event_name=$(perf probe -f -x $libc -a inet_pton 2>&1 | tail -n +2 | 
head -n -5 | \
+   grep -P -o "$event_pattern(?=[[:space:]]\(on inet_pton 
in $libc\))")
+
+   if [ $? -ne 0 -o -z "$event_name" ] ; then
+   printf "FAIL: could not add event\n"
+   return 1
+   fi
+}
+
 trace_libc_inet_pton_backtrace() {
 
expected=`mktemp -u /tmp/expected.XXX`
 
-   echo "ping[][0-9 \.:]+probe_libc:inet_pton: \([[:xdigit:]]+\)" > 
$expected
+   echo "ping[][0-9 \.:]+$event_name: \([[:xdigit:]]+\)" > $expected
echo ".*inet_pton\+0x[[:xdigit:]]+[[:space:]]\($libc|inlined\)$" >> 
$expected
case "$(uname -m)" in
s390x)
@@ -41,7 +54,7 @@ trace_libc_inet_pton_backtrace() {
 
perf_data=`mktemp -u /tmp/perf.data.XXX`
perf_script=`mktemp -u /tmp/perf.script.XXX`
-   perf record -e probe_libc:inet_pton/$eventattr/ -o $perf_data ping -6 
-c 1 ::1 > /dev/null 2>&1
+   perf record -e $event_name/$eventattr/ -o $perf_data ping -6 -c 1 ::1 > 
/dev/null 2>&1
perf script -i $perf_data > $perf_script
 
exec 3<$perf_script
@@ -62,13 +75,20 @@ trace_libc_inet_pton_backtrace() {
# even if the perf script output does not match.
 }
 
+delete_libc_inet_pton_event() {
+
+   if [ -n "$event_name" ] ; then
+   perf probe -q -d $event_name
+   fi
+}
+
 # Check for IPv6 interface existence
 ip a sh lo | fgrep -q inet6 || exit 2
 
 skip_if_no_perf_probe && \
-perf probe -q $libc inet_pton && \
+add_libc_inet_pton_event && \
 trace_libc_inet_pton_backtrace
 err=$?
 rm -f ${perf_data} ${perf_script} ${expected}
-perf probe -q -d probe_libc:inet_pton
+delete_libc_inet_pton_event
 exit $err