提交 cfc65420 编写于 作者: D David Carrillo-Cisneros 提交者: Arnaldo Carvalho de Melo

perf header: Use struct feat_fd for print

As preparation for using header records in pipe mode, replace int fd
with struct feat_fd ff in print functions for all header record types.
Signed-off-by: NDavid Carrillo-Cisneros <davidcc@google.com>
Acked-by: NDavid Ahern <dsahern@gmail.com>
Acked-by: NJiri Olsa <jolsa@kernel.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: He Kuang <hekuang@huawei.com>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Paul Turner <pjt@google.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Simon Que <sque@chromium.org>
Cc: Stephane Eranian <eranian@google.com>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/r/20170718042549.145161-8-davidcc@google.comSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
上级 ccebbeb6
master alk-4.19.24 alk-4.19.30 alk-4.19.34 alk-4.19.36 alk-4.19.43 alk-4.19.48 alk-4.19.57 ck-4.19.67 ck-4.19.81 ck-4.19.91 github/fork/deepanshu1422/fix-typo-in-comment github/fork/haosdent/fix-typo linux-next v4.19.91 v4.19.90 v4.19.89 v4.19.88 v4.19.87 v4.19.86 v4.19.85 v4.19.84 v4.19.83 v4.19.82 v4.19.81 v4.19.80 v4.19.79 v4.19.78 v4.19.77 v4.19.76 v4.19.75 v4.19.74 v4.19.73 v4.19.72 v4.19.71 v4.19.70 v4.19.69 v4.19.68 v4.19.67 v4.19.66 v4.19.65 v4.19.64 v4.19.63 v4.19.62 v4.19.61 v4.19.60 v4.19.59 v4.19.58 v4.19.57 v4.19.56 v4.19.55 v4.19.54 v4.19.53 v4.19.52 v4.19.51 v4.19.50 v4.19.49 v4.19.48 v4.19.47 v4.19.46 v4.19.45 v4.19.44 v4.19.43 v4.19.42 v4.19.41 v4.19.40 v4.19.39 v4.19.38 v4.19.37 v4.19.36 v4.19.35 v4.19.34 v4.19.33 v4.19.32 v4.19.31 v4.19.30 v4.19.29 v4.19.28 v4.19.27 v4.19.26 v4.19.25 v4.19.24 v4.19.23 v4.19.22 v4.19.21 v4.19.20 v4.19.19 v4.19.18 v4.19.17 v4.19.16 v4.19.15 v4.19.14 v4.19.13 v4.19.12 v4.19.11 v4.19.10 v4.19.9 v4.19.8 v4.19.7 v4.19.6 v4.19.5 v4.19.4 v4.19.3 v4.19.2 v4.19.1 v4.19 v4.19-rc8 v4.19-rc7 v4.19-rc6 v4.19-rc5 v4.19-rc4 v4.19-rc3 v4.19-rc2 v4.19-rc1 ck-release-21 ck-release-20 ck-release-19.2 ck-release-19.1 ck-release-19 ck-release-18 ck-release-17.2 ck-release-17.1 ck-release-17 ck-release-16 ck-release-15.1 ck-release-15 ck-release-14 ck-release-13.2 ck-release-13 ck-release-12 ck-release-11 ck-release-10 ck-release-9 ck-release-7 alk-release-15 alk-release-14 alk-release-13.2 alk-release-13 alk-release-12 alk-release-11 alk-release-10 alk-release-9 alk-release-7
无相关合并请求
......@@ -1116,62 +1116,56 @@ static int write_stat(struct feat_fd *ff __maybe_unused,
return 0;
}
static void print_hostname(struct perf_header *ph, int fd __maybe_unused,
FILE *fp)
static void print_hostname(struct feat_fd *ff, FILE *fp)
{
fprintf(fp, "# hostname : %s\n", ph->env.hostname);
fprintf(fp, "# hostname : %s\n", ff->ph->env.hostname);
}
static void print_osrelease(struct perf_header *ph, int fd __maybe_unused,
FILE *fp)
static void print_osrelease(struct feat_fd *ff, FILE *fp)
{
fprintf(fp, "# os release : %s\n", ph->env.os_release);
fprintf(fp, "# os release : %s\n", ff->ph->env.os_release);
}
static void print_arch(struct perf_header *ph, int fd __maybe_unused, FILE *fp)
static void print_arch(struct feat_fd *ff, FILE *fp)
{
fprintf(fp, "# arch : %s\n", ph->env.arch);
fprintf(fp, "# arch : %s\n", ff->ph->env.arch);
}
static void print_cpudesc(struct perf_header *ph, int fd __maybe_unused,
FILE *fp)
static void print_cpudesc(struct feat_fd *ff, FILE *fp)
{
fprintf(fp, "# cpudesc : %s\n", ph->env.cpu_desc);
fprintf(fp, "# cpudesc : %s\n", ff->ph->env.cpu_desc);
}
static void print_nrcpus(struct perf_header *ph, int fd __maybe_unused,
FILE *fp)
static void print_nrcpus(struct feat_fd *ff, FILE *fp)
{
fprintf(fp, "# nrcpus online : %u\n", ph->env.nr_cpus_online);
fprintf(fp, "# nrcpus avail : %u\n", ph->env.nr_cpus_avail);
fprintf(fp, "# nrcpus online : %u\n", ff->ph->env.nr_cpus_online);
fprintf(fp, "# nrcpus avail : %u\n", ff->ph->env.nr_cpus_avail);
}
static void print_version(struct perf_header *ph, int fd __maybe_unused,
FILE *fp)
static void print_version(struct feat_fd *ff, FILE *fp)
{
fprintf(fp, "# perf version : %s\n", ph->env.version);
fprintf(fp, "# perf version : %s\n", ff->ph->env.version);
}
static void print_cmdline(struct perf_header *ph, int fd __maybe_unused,
FILE *fp)
static void print_cmdline(struct feat_fd *ff, FILE *fp)
{
int nr, i;
nr = ph->env.nr_cmdline;
nr = ff->ph->env.nr_cmdline;
fprintf(fp, "# cmdline : ");
for (i = 0; i < nr; i++)
fprintf(fp, "%s ", ph->env.cmdline_argv[i]);
fprintf(fp, "%s ", ff->ph->env.cmdline_argv[i]);
fputc('\n', fp);
}
static void print_cpu_topology(struct perf_header *ph, int fd __maybe_unused,
FILE *fp)
static void print_cpu_topology(struct feat_fd *ff, FILE *fp)
{
struct perf_header *ph = ff->ph;
int cpu_nr = ph->env.nr_cpus_avail;
int nr, i;
char *str;
int cpu_nr = ph->env.nr_cpus_avail;
nr = ph->env.nr_sibling_cores;
str = ph->env.sibling_cores;
......@@ -1297,9 +1291,9 @@ static int __desc_attr__fprintf(FILE *fp, const char *name, const char *val,
return fprintf(fp, ", %s = %s", name, val);
}
static void print_event_desc(struct perf_header *ph, int fd, FILE *fp)
static void print_event_desc(struct feat_fd *ff, FILE *fp)
{
struct perf_evsel *evsel, *events = read_event_desc(ph, fd);
struct perf_evsel *evsel, *events = read_event_desc(ff->ph, ff->fd);
u32 j;
u64 *id;
......@@ -1329,20 +1323,18 @@ static void print_event_desc(struct perf_header *ph, int fd, FILE *fp)
free_event_desc(events);
}
static void print_total_mem(struct perf_header *ph, int fd __maybe_unused,
FILE *fp)
static void print_total_mem(struct feat_fd *ff, FILE *fp)
{
fprintf(fp, "# total memory : %Lu kB\n", ph->env.total_mem);
fprintf(fp, "# total memory : %llu kB\n", ff->ph->env.total_mem);
}
static void print_numa_topology(struct perf_header *ph, int fd __maybe_unused,
FILE *fp)
static void print_numa_topology(struct feat_fd *ff, FILE *fp)
{
int i;
struct numa_node *n;
for (i = 0; i < ph->env.nr_numa_nodes; i++) {
n = &ph->env.numa_nodes[i];
for (i = 0; i < ff->ph->env.nr_numa_nodes; i++) {
n = &ff->ph->env.numa_nodes[i];
fprintf(fp, "# node%u meminfo : total = %"PRIu64" kB,"
" free = %"PRIu64" kB\n",
......@@ -1353,56 +1345,51 @@ static void print_numa_topology(struct perf_header *ph, int fd __maybe_unused,
}
}
static void print_cpuid(struct perf_header *ph, int fd __maybe_unused, FILE *fp)
static void print_cpuid(struct feat_fd *ff, FILE *fp)
{
fprintf(fp, "# cpuid : %s\n", ph->env.cpuid);
fprintf(fp, "# cpuid : %s\n", ff->ph->env.cpuid);
}
static void print_branch_stack(struct perf_header *ph __maybe_unused,
int fd __maybe_unused, FILE *fp)
static void print_branch_stack(struct feat_fd *ff __maybe_unused, FILE *fp)
{
fprintf(fp, "# contains samples with branch stack\n");
}
static void print_auxtrace(struct perf_header *ph __maybe_unused,
int fd __maybe_unused, FILE *fp)
static void print_auxtrace(struct feat_fd *ff __maybe_unused, FILE *fp)
{
fprintf(fp, "# contains AUX area data (e.g. instruction trace)\n");
}
static void print_stat(struct perf_header *ph __maybe_unused,
int fd __maybe_unused, FILE *fp)
static void print_stat(struct feat_fd *ff __maybe_unused, FILE *fp)
{
fprintf(fp, "# contains stat data\n");
}
static void print_cache(struct perf_header *ph __maybe_unused,
int fd __maybe_unused, FILE *fp __maybe_unused)
static void print_cache(struct feat_fd *ff, FILE *fp __maybe_unused)
{
int i;
fprintf(fp, "# CPU cache info:\n");
for (i = 0; i < ph->env.caches_cnt; i++) {
for (i = 0; i < ff->ph->env.caches_cnt; i++) {
fprintf(fp, "# ");
cpu_cache_level__fprintf(fp, &ph->env.caches[i]);
cpu_cache_level__fprintf(fp, &ff->ph->env.caches[i]);
}
}
static void print_pmu_mappings(struct perf_header *ph, int fd __maybe_unused,
FILE *fp)
static void print_pmu_mappings(struct feat_fd *ff, FILE *fp)
{
const char *delimiter = "# pmu mappings: ";
char *str, *tmp;
u32 pmu_num;
u32 type;
pmu_num = ph->env.nr_pmu_mappings;
pmu_num = ff->ph->env.nr_pmu_mappings;
if (!pmu_num) {
fprintf(fp, "# pmu mappings: not available\n");
return;
}
str = ph->env.pmu_mappings;
str = ff->ph->env.pmu_mappings;
while (pmu_num) {
type = strtoul(str, &tmp, 0);
......@@ -1425,14 +1412,13 @@ static void print_pmu_mappings(struct perf_header *ph, int fd __maybe_unused,
fprintf(fp, "# pmu mappings: unable to read\n");
}
static void print_group_desc(struct perf_header *ph, int fd __maybe_unused,
FILE *fp)
static void print_group_desc(struct feat_fd *ff, FILE *fp)
{
struct perf_session *session;
struct perf_evsel *evsel;
u32 nr = 0;
session = container_of(ph, struct perf_session, header);
session = container_of(ff->ph, struct perf_session, header);
evlist__for_each_entry(session->evlist, evsel) {
if (perf_evsel__is_group_leader(evsel) &&
......@@ -2109,7 +2095,7 @@ static int process_cache(struct perf_file_section *section __maybe_unused,
struct feature_ops {
int (*write)(struct feat_fd *ff, struct perf_evlist *evlist);
void (*print)(struct perf_header *h, int fd, FILE *fp);
void (*print)(struct feat_fd *ff, FILE *fp);
int (*process)(struct perf_file_section *section,
struct perf_header *h, int fd, void *data);
const char *name;
......@@ -2162,6 +2148,7 @@ static int perf_file_section__fprintf_info(struct perf_file_section *section,
int feat, int fd, void *data)
{
struct header_print_data *hd = data;
struct feat_fd ff;
if (lseek(fd, section->offset, SEEK_SET) == (off_t)-1) {
pr_debug("Failed to lseek to %" PRIu64 " offset for feature "
......@@ -2175,8 +2162,13 @@ static int perf_file_section__fprintf_info(struct perf_file_section *section,
if (!feat_ops[feat].print)
return 0;
ff = (struct feat_fd) {
.fd = fd,
.ph = ph,
};
if (!feat_ops[feat].full_only || hd->full)
feat_ops[feat].print(ph, fd, hd->fp);
feat_ops[feat].print(&ff, hd->fp);
else
fprintf(hd->fp, "# %s info available, use -I to display\n",
feat_ops[feat].name);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册