Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755351AbbGZQbu (ORCPT ); Sun, 26 Jul 2015 12:31:50 -0400 Received: from mx1.redhat.com ([209.132.183.28]:43646 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755284AbbGZQbs (ORCPT ); Sun, 26 Jul 2015 12:31:48 -0400 Date: Sun, 26 Jul 2015 18:31:44 +0200 From: Jiri Olsa To: kan.liang@intel.com Cc: a.p.zijlstra@chello.nl, acme@kernel.org, luto@kernel.org, mingo@redhat.com, eranian@google.com, ak@linux.intel.com, mark.rutland@arm.com, adrian.hunter@intel.com, jolsa@kernel.org, namhyung@kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH V2 1/6] perf,tools: save cpu max freq in perf header Message-ID: <20150726163144.GE24646@krava.brq.redhat.com> References: <1437745712-16649-1-git-send-email-kan.liang@intel.com> <1437745712-16649-2-git-send-email-kan.liang@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1437745712-16649-2-git-send-email-kan.liang@intel.com> User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1963 Lines: 59 On Fri, Jul 24, 2015 at 09:48:27AM -0400, kan.liang@intel.com wrote: SNIP > struct perf_header *h __maybe_unused, > struct perf_evlist *evlist __maybe_unused) > @@ -1158,6 +1168,11 @@ static void print_cpuid(struct perf_header *ph, int fd __maybe_unused, FILE *fp) > fprintf(fp, "# cpuid : %s\n", ph->env.cpuid); > } > > +static void print_cpu_max_freq(struct perf_header *ph, int fd __maybe_unused, FILE *fp) > +{ > + fprintf(fp, "# CPU max frequency : %u MHz\n", ph->env.cpu_max_freq); > +} > + > static void print_branch_stack(struct perf_header *ph __maybe_unused, > int fd __maybe_unused, FILE *fp) > { > @@ -1471,6 +1486,25 @@ static int process_cpuid(struct perf_file_section *section __maybe_unused, > return ph->env.cpuid ? 0 : -ENOMEM; > } > > +static int process_cpu_max_freq(struct perf_file_section *section __maybe_unused, > + struct perf_header *ph, int fd, > + void *data __maybe_unused) > +{ > + ssize_t ret; > + u32 nr; > + > + ret = readn(fd, &nr, sizeof(nr)); > + if (ret != sizeof(nr)) > + return -1; > + > + if (ph->needs_swap) > + nr = bswap_32(nr); > + > + ph->env.cpu_max_freq = nr; > + > + return 0; > +} > + > static int process_total_mem(struct perf_file_section *section __maybe_unused, > struct perf_header *ph, int fd, > void *data __maybe_unused) > @@ -1885,6 +1919,7 @@ static const struct feature_ops feat_ops[HEADER_LAST_FEATURE] = { > FEAT_OPP(HEADER_NRCPUS, nrcpus), > FEAT_OPP(HEADER_CPUDESC, cpudesc), > FEAT_OPP(HEADER_CPUID, cpuid), > + FEAT_OPP(HEADER_CPU_MAX_FREQ, cpu_max_freq), I wonder we should start generic FEAT for CPU related data stored in some expandable way tag-value or such jirka -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/