From: kan.liang@linux.intel.com
To: acme@kernel.org, jolsa@kernel.org, mingo@redhat.com,
linux-kernel@vger.kernel.org
Cc: ak@linux.intel.com, Kan Liang <kan.liang@linux.intel.com>
Subject: [PATCH 2/3] perf parse-regs: Add generic support for non-gprs
Date: Tue, 14 May 2019 07:39:12 -0700 [thread overview]
Message-ID: <1557844753-58223-2-git-send-email-kan.liang@linux.intel.com> (raw)
In-Reply-To: <1557844753-58223-1-git-send-email-kan.liang@linux.intel.com>
From: Kan Liang <kan.liang@linux.intel.com>
Some non general purpose registers, e.g. XMM, can be collected on some
platforms, e.g. X86 Icelake.
Add a weak function has_non_gprs_support() to check if the
kernel/hardware support non-gprs collection.
Add a weak function non_gprs_mask() to return non-gprs mask.
By default, the non-gprs collection is not support. Specific platforms
should implement their own non-gprs functions if they can collect
non-gprs.
Signed-off-by: Kan Liang <kan.liang@linux.intel.com>
---
tools/perf/util/parse-regs-options.c | 10 +++++++++-
tools/perf/util/perf_regs.c | 10 ++++++++++
tools/perf/util/perf_regs.h | 2 ++
3 files changed, 21 insertions(+), 1 deletion(-)
diff --git a/tools/perf/util/parse-regs-options.c b/tools/perf/util/parse-regs-options.c
index b21617f..2f90f31 100644
--- a/tools/perf/util/parse-regs-options.c
+++ b/tools/perf/util/parse-regs-options.c
@@ -12,6 +12,7 @@ __parse_regs(const struct option *opt, const char *str, int unset, bool intr)
const struct sample_reg *r;
char *s, *os = NULL, *p;
int ret = -1;
+ bool has_non_gprs = has_non_gprs_support(intr);
if (unset)
return 0;
@@ -37,6 +38,8 @@ __parse_regs(const struct option *opt, const char *str, int unset, bool intr)
if (!strcmp(s, "?")) {
fprintf(stderr, "available registers: ");
for (r = sample_reg_masks; r->name; r++) {
+ if (!has_non_gprs && (r->mask & ~PERF_REGS_MASK))
+ break;
fprintf(stderr, "%s ", r->name);
}
fputc('\n', stderr);
@@ -44,6 +47,8 @@ __parse_regs(const struct option *opt, const char *str, int unset, bool intr)
return -1;
}
for (r = sample_reg_masks; r->name; r++) {
+ if (!has_non_gprs && (r->mask & ~PERF_REGS_MASK))
+ continue;
if (!strcasecmp(s, r->name))
break;
}
@@ -64,8 +69,11 @@ __parse_regs(const struct option *opt, const char *str, int unset, bool intr)
ret = 0;
/* default to all possible regs */
- if (*mode == 0)
+ if (*mode == 0) {
*mode = PERF_REGS_MASK;
+ if (has_non_gprs)
+ *mode |= non_gprs_mask(intr);
+ }
error:
free(os);
return ret;
diff --git a/tools/perf/util/perf_regs.c b/tools/perf/util/perf_regs.c
index 2acfcc5..0d278b6 100644
--- a/tools/perf/util/perf_regs.c
+++ b/tools/perf/util/perf_regs.c
@@ -13,6 +13,16 @@ int __weak arch_sdt_arg_parse_op(char *old_op __maybe_unused,
return SDT_ARG_SKIP;
}
+bool __weak has_non_gprs_support(bool intr __maybe_unused)
+{
+ return false;
+}
+
+u64 __weak non_gprs_mask(bool intr __maybe_unused)
+{
+ return 0;
+}
+
#ifdef HAVE_PERF_REGS_SUPPORT
int perf_reg_value(u64 *valp, struct regs_dump *regs, int id)
{
diff --git a/tools/perf/util/perf_regs.h b/tools/perf/util/perf_regs.h
index 1a15a4b..983b4e6 100644
--- a/tools/perf/util/perf_regs.h
+++ b/tools/perf/util/perf_regs.h
@@ -23,6 +23,8 @@ enum {
};
int arch_sdt_arg_parse_op(char *old_op, char **new_op);
+bool has_non_gprs_support(bool intr);
+u64 non_gprs_mask(bool intr);
#ifdef HAVE_PERF_REGS_SUPPORT
#include <perf_regs.h>
--
2.7.4
next prev parent reply other threads:[~2019-05-14 14:39 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-05-14 14:39 [PATCH 1/3] perf parse-regs: Split parse_regs kan.liang
2019-05-14 14:39 ` kan.liang [this message]
2019-05-14 18:19 ` [PATCH 2/3] perf parse-regs: Add generic support for non-gprs Arnaldo Carvalho de Melo
2019-05-14 19:25 ` Liang, Kan
2019-05-14 19:34 ` Arnaldo Carvalho de Melo
2019-05-14 14:39 ` [PATCH 3/3] perf regs x86: Add X86 " kan.liang
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=1557844753-58223-2-git-send-email-kan.liang@linux.intel.com \
--to=kan.liang@linux.intel.com \
--cc=acme@kernel.org \
--cc=ak@linux.intel.com \
--cc=jolsa@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.