2017-04-06 07:52:05

by Christian Borntraeger

[permalink] [raw]
Subject: [PATCH 0/2] perf/s390: fix (and enhance) perf annotate

Arnaldo,
since 4.10 perf annotate fails with error -95 on s390.
This contains a fix for 4.11 (maybe CC stable for 4.10?) and
an extension to implement jump detection.

Christian Borntraeger (2):
s390/perf: fix perf annotate error -95 (4.10 regression)
perf/s390: implement jump types for perf annotate

tools/perf/arch/s390/annotate/instructions.c | 30 ++++++++++++++++++++++++++++
tools/perf/util/annotate.c | 8 ++++++++
2 files changed, 38 insertions(+)
create mode 100644 tools/perf/arch/s390/annotate/instructions.c

--
2.7.4


2017-04-06 07:52:17

by Christian Borntraeger

[permalink] [raw]
Subject: [PATCH 2/2] perf/s390: implement jump types for perf annotate

Implement simple detection for all kind of jumps and branches.

Signed-off-by: Christian Borntraeger <[email protected]>
---
tools/perf/arch/s390/annotate/instructions.c | 30 ++++++++++++++++++++++++++++
tools/perf/util/annotate.c | 2 ++
2 files changed, 32 insertions(+)
create mode 100644 tools/perf/arch/s390/annotate/instructions.c

diff --git a/tools/perf/arch/s390/annotate/instructions.c b/tools/perf/arch/s390/annotate/instructions.c
new file mode 100644
index 0000000..745b4b1
--- /dev/null
+++ b/tools/perf/arch/s390/annotate/instructions.c
@@ -0,0 +1,30 @@
+static struct ins_ops *s390__associate_ins_ops(struct arch *arch, const char *name)
+{
+ struct ins_ops *ops = NULL;
+
+ /* catch all kind of jumps */
+ if (strchr(name, 'j') ||
+ !strncmp(name, "bct", 3) ||
+ !strncmp(name, "br", 2))
+ ops = &jump_ops;
+ /* override call/returns */
+ if (!strcmp(name, "bras") ||
+ !strcmp(name, "brasl") ||
+ !strcmp(name, "basr"))
+ ops = &call_ops;
+ if (!strcmp(name, "br"))
+ ops = &ret_ops;
+
+ arch__associate_ins_ops(arch, name, ops);
+ return ops;
+}
+
+static int s390__annotate_init(struct arch *arch)
+{
+ if (!arch->initialized) {
+ arch->initialized = true;
+ arch->associate_instruction_ops = s390__associate_ins_ops;
+ }
+
+ return 0;
+}
diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c
index 7aa5722..2cc02f6 100644
--- a/tools/perf/util/annotate.c
+++ b/tools/perf/util/annotate.c
@@ -108,6 +108,7 @@ static int arch__associate_ins_ops(struct arch* arch, const char *name, struct i
#include "arch/arm64/annotate/instructions.c"
#include "arch/x86/annotate/instructions.c"
#include "arch/powerpc/annotate/instructions.c"
+#include "arch/s390/annotate/instructions.c"

static struct arch architectures[] = {
{
@@ -132,6 +133,7 @@ static struct arch architectures[] = {
},
{
.name = "s390",
+ .init = s390__annotate_init,
.objdump = {
.comment_char = '#',
},
--
2.7.4

2017-04-06 07:52:28

by Christian Borntraeger

[permalink] [raw]
Subject: [PATCH 1/2] s390/perf: fix perf annotate error -95 (4.10 regression)

since 4.10 perf annotate exits on s390 with an "unknown error -95".
Turns out that commit 786c1b51844d ("perf annotate: Start supporting
cross arch annotation") added a hard requirement for architecture
support when objdump is used but only provided x86 and arm
support. Meanwhile power was added so lets add s390 as well.

While at it make sure to implement the branch and jump types.

Signed-off-by: Christian Borntraeger <[email protected]>
Fixes: 786c1b51844 "perf annotate: Start supporting cross arch annotation"
Cc: Arnaldo Carvalho de Melo <[email protected]>
---
tools/perf/util/annotate.c | 6 ++++++
1 file changed, 6 insertions(+)

diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c
index 273f21f..7aa5722 100644
--- a/tools/perf/util/annotate.c
+++ b/tools/perf/util/annotate.c
@@ -130,6 +130,12 @@ static struct arch architectures[] = {
.name = "powerpc",
.init = powerpc__annotate_init,
},
+ {
+ .name = "s390",
+ .objdump = {
+ .comment_char = '#',
+ },
+ },
};

static void ins__delete(struct ins_operands *ops)
--
2.7.4

2017-04-07 15:23:59

by Arnaldo Carvalho de Melo

[permalink] [raw]
Subject: Re: [PATCH 1/2] s390/perf: fix perf annotate error -95 (4.10 regression)

Em Thu, Apr 06, 2017 at 09:51:51AM +0200, Christian Borntraeger escreveu:
> since 4.10 perf annotate exits on s390 with an "unknown error -95".
> Turns out that commit 786c1b51844d ("perf annotate: Start supporting
> cross arch annotation") added a hard requirement for architecture

Argh, that was unfortunate, I'll apply your patches and try to remove
that restriction, using the defaults previously in place :-\

thanks,

- Arnaldo


> support when objdump is used but only provided x86 and arm
> support. Meanwhile power was added so lets add s390 as well.
>
> While at it make sure to implement the branch and jump types.
>
> Signed-off-by: Christian Borntraeger <[email protected]>
> Fixes: 786c1b51844 "perf annotate: Start supporting cross arch annotation"
> Cc: Arnaldo Carvalho de Melo <[email protected]>
> ---
> tools/perf/util/annotate.c | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c
> index 273f21f..7aa5722 100644
> --- a/tools/perf/util/annotate.c
> +++ b/tools/perf/util/annotate.c
> @@ -130,6 +130,12 @@ static struct arch architectures[] = {
> .name = "powerpc",
> .init = powerpc__annotate_init,
> },
> + {
> + .name = "s390",
> + .objdump = {
> + .comment_char = '#',
> + },
> + },
> };
>
> static void ins__delete(struct ins_operands *ops)
> --
> 2.7.4

2017-04-10 09:20:28

by Christian Borntraeger

[permalink] [raw]
Subject: Re: [PATCH 1/2] s390/perf: fix perf annotate error -95 (4.10 regression)

On 04/07/2017 05:23 PM, Arnaldo Carvalho de Melo wrote:
> Em Thu, Apr 06, 2017 at 09:51:51AM +0200, Christian Borntraeger escreveu:
>> since 4.10 perf annotate exits on s390 with an "unknown error -95".
>> Turns out that commit 786c1b51844d ("perf annotate: Start supporting
>> cross arch annotation") added a hard requirement for architecture
>
> Argh, that was unfortunate, I'll apply your patches and try to remove
> that restriction, using the defaults previously in place :-\

Is there a chance to get this fix into 4.11? (the 2nd patch can certainly wait
for the next merge window)

>
> thanks,
>
> - Arnaldo
>
>
>> support when objdump is used but only provided x86 and arm
>> support. Meanwhile power was added so lets add s390 as well.
>>
>> While at it make sure to implement the branch and jump types.
>>
>> Signed-off-by: Christian Borntraeger <[email protected]>
>> Fixes: 786c1b51844 "perf annotate: Start supporting cross arch annotation"
>> Cc: Arnaldo Carvalho de Melo <[email protected]>
>> ---
>> tools/perf/util/annotate.c | 6 ++++++
>> 1 file changed, 6 insertions(+)
>>
>> diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c
>> index 273f21f..7aa5722 100644
>> --- a/tools/perf/util/annotate.c
>> +++ b/tools/perf/util/annotate.c
>> @@ -130,6 +130,12 @@ static struct arch architectures[] = {
>> .name = "powerpc",
>> .init = powerpc__annotate_init,
>> },
>> + {
>> + .name = "s390",
>> + .objdump = {
>> + .comment_char = '#',
>> + },
>> + },
>> };
>>
>> static void ins__delete(struct ins_operands *ops)
>> --
>> 2.7.4
>

Subject: [tip:perf/urgent] perf annotate s390: Fix perf annotate error -95 (4.10 regression)

Commit-ID: 3c1a427954399fd1bda1ee7e1b356f47b61cee74
Gitweb: http://git.kernel.org/tip/3c1a427954399fd1bda1ee7e1b356f47b61cee74
Author: Christian Borntraeger <[email protected]>
AuthorDate: Thu, 6 Apr 2017 09:51:51 +0200
Committer: Arnaldo Carvalho de Melo <[email protected]>
CommitDate: Fri, 7 Apr 2017 12:33:10 -0300

perf annotate s390: Fix perf annotate error -95 (4.10 regression)

since 4.10 perf annotate exits on s390 with an "unknown error -95".
Turns out that commit 786c1b51844d ("perf annotate: Start supporting
cross arch annotation") added a hard requirement for architecture
support when objdump is used but only provided x86 and arm support.
Meanwhile power was added so lets add s390 as well.

While at it make sure to implement the branch and jump types.

Signed-off-by: Christian Borntraeger <[email protected]>
Cc: Andreas Krebbel <[email protected]>
Cc: Hendrik Brueckner <[email protected]>
Cc: Martin Schwidefsky <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Cc: linux-s390 <[email protected]>
Cc: [email protected] # v4.10+
Fixes: 786c1b51844 "perf annotate: Start supporting cross arch annotation"
Link: http://lkml.kernel.org/r/[email protected]
Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
---
tools/perf/util/annotate.c | 6 ++++++
1 file changed, 6 insertions(+)

diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c
index 273f21f..7aa5722 100644
--- a/tools/perf/util/annotate.c
+++ b/tools/perf/util/annotate.c
@@ -130,6 +130,12 @@ static struct arch architectures[] = {
.name = "powerpc",
.init = powerpc__annotate_init,
},
+ {
+ .name = "s390",
+ .objdump = {
+ .comment_char = '#',
+ },
+ },
};

static void ins__delete(struct ins_operands *ops)

Subject: [tip:perf/core] perf annotate s390: Fix perf annotate error -95 (4.10 regression)

Commit-ID: e77852b32d6d4430c68c38aaf73efe5650fa25af
Gitweb: http://git.kernel.org/tip/e77852b32d6d4430c68c38aaf73efe5650fa25af
Author: Christian Borntraeger <[email protected]>
AuthorDate: Thu, 6 Apr 2017 09:51:51 +0200
Committer: Arnaldo Carvalho de Melo <[email protected]>
CommitDate: Tue, 11 Apr 2017 15:23:39 -0300

perf annotate s390: Fix perf annotate error -95 (4.10 regression)

since 4.10 perf annotate exits on s390 with an "unknown error -95".
Turns out that commit 786c1b51844d ("perf annotate: Start supporting
cross arch annotation") added a hard requirement for architecture
support when objdump is used but only provided x86 and arm support.
Meanwhile power was added so lets add s390 as well.

While at it make sure to implement the branch and jump types.

Signed-off-by: Christian Borntraeger <[email protected]>
Cc: Andreas Krebbel <[email protected]>
Cc: Hendrik Brueckner <[email protected]>
Cc: Martin Schwidefsky <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Cc: linux-s390 <[email protected]>
Cc: [email protected] # v4.10+
Fixes: 786c1b51844 "perf annotate: Start supporting cross arch annotation"
Link: http://lkml.kernel.org/r/[email protected]
Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
---
tools/perf/util/annotate.c | 6 ++++++
1 file changed, 6 insertions(+)

diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c
index a37032b..bfb2f1d 100644
--- a/tools/perf/util/annotate.c
+++ b/tools/perf/util/annotate.c
@@ -130,6 +130,12 @@ static struct arch architectures[] = {
.name = "powerpc",
.init = powerpc__annotate_init,
},
+ {
+ .name = "s390",
+ .objdump = {
+ .comment_char = '#',
+ },
+ },
};

static void ins__delete(struct ins_operands *ops)

Subject: [tip:perf/core] perf annotate s390: Implement jump types for perf annotate

Commit-ID: d9f8dfa9baf9b6ae1f2f84f887176558ecde5268
Gitweb: http://git.kernel.org/tip/d9f8dfa9baf9b6ae1f2f84f887176558ecde5268
Author: Christian Borntraeger <[email protected]>
AuthorDate: Thu, 6 Apr 2017 09:51:52 +0200
Committer: Arnaldo Carvalho de Melo <[email protected]>
CommitDate: Tue, 11 Apr 2017 15:23:40 -0300

perf annotate s390: Implement jump types for perf annotate

Implement simple detection for all kind of jumps and branches.

Signed-off-by: Christian Borntraeger <[email protected]>
Cc: Andreas Krebbel <[email protected]>
Cc: Hendrik Brueckner <[email protected]>
Cc: Martin Schwidefsky <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Cc: linux-s390 <[email protected]>
Cc: [email protected] # v4.10+
Link: http://lkml.kernel.org/r/[email protected]
Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
---
tools/perf/arch/s390/annotate/instructions.c | 30 ++++++++++++++++++++++++++++
tools/perf/util/annotate.c | 2 ++
2 files changed, 32 insertions(+)

diff --git a/tools/perf/arch/s390/annotate/instructions.c b/tools/perf/arch/s390/annotate/instructions.c
new file mode 100644
index 0000000..745b4b1
--- /dev/null
+++ b/tools/perf/arch/s390/annotate/instructions.c
@@ -0,0 +1,30 @@
+static struct ins_ops *s390__associate_ins_ops(struct arch *arch, const char *name)
+{
+ struct ins_ops *ops = NULL;
+
+ /* catch all kind of jumps */
+ if (strchr(name, 'j') ||
+ !strncmp(name, "bct", 3) ||
+ !strncmp(name, "br", 2))
+ ops = &jump_ops;
+ /* override call/returns */
+ if (!strcmp(name, "bras") ||
+ !strcmp(name, "brasl") ||
+ !strcmp(name, "basr"))
+ ops = &call_ops;
+ if (!strcmp(name, "br"))
+ ops = &ret_ops;
+
+ arch__associate_ins_ops(arch, name, ops);
+ return ops;
+}
+
+static int s390__annotate_init(struct arch *arch)
+{
+ if (!arch->initialized) {
+ arch->initialized = true;
+ arch->associate_instruction_ops = s390__associate_ins_ops;
+ }
+
+ return 0;
+}
diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c
index bfb2f1d..44ed665 100644
--- a/tools/perf/util/annotate.c
+++ b/tools/perf/util/annotate.c
@@ -108,6 +108,7 @@ static int arch__associate_ins_ops(struct arch* arch, const char *name, struct i
#include "arch/arm64/annotate/instructions.c"
#include "arch/x86/annotate/instructions.c"
#include "arch/powerpc/annotate/instructions.c"
+#include "arch/s390/annotate/instructions.c"

static struct arch architectures[] = {
{
@@ -132,6 +133,7 @@ static struct arch architectures[] = {
},
{
.name = "s390",
+ .init = s390__annotate_init,
.objdump = {
.comment_char = '#',
},