All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chen Yu <yu.c.chen@intel.com>
To: Calvin Walton <calvin.walton@kepstin.ca>
Cc: Borislav Petkov <bp@suse.de>, Terry Bowman <terry.bowman@amd.com>,
	lenb@kernel.org, linux-pm@vger.kernel.org,
	linux-kernel@vger.kernel.org, wei.huang2@amd.com, aros@gmx.com,
	rui.zhang@intel.com
Subject: Re: [PATCH v2] tools/power turbostat: Fix RAPL summary collection on AMD processors
Date: Fri, 23 Apr 2021 20:16:07 +0800	[thread overview]
Message-ID: <20210423121607.GA426003@chenyu-desktop> (raw)
In-Reply-To: <5cf35f3742d1181421d955174b1aa9434d042c96.camel@kepstin.ca>

On Tue, Apr 20, 2021 at 10:42:09AM -0400, Calvin Walton wrote:
> On Tue, 2021-04-20 at 22:37 +0800, Chen Yu wrote:
> > On Tue, Apr 20, 2021 at 09:28:06AM -0400, Calvin Walton wrote:
> > > This patch has the same issue I noticed with the initial revision
> > > of
> > > Terry's patch - the idx_to_offset function returns type int (32-bit
> > > signed), but MSR_PKG_ENERGY_STAT is greater than INT_MAX (or
> > > rather,
> > > would be interpreted as a negative number)
> > > 
> > > The end result is, as far as I can tell, that it hits the if
> > > (offset <
> > > 0) check in update_msr_sum() resulting in the timer callback for
> > > updating the stat in the background when long durations are used to
> > > not
> > > happen.
> > > 
> > > For short durations it still works fine since the background update
> > > isn't used.
> > > 
> > Ah, got it, nice catch. How about an incremental patch based on Bas'
> > one
> > to fix this 'overflow' issue? Would converting offset_to_idx(),
> > idx_to_offset() and
> > update_msr_sum() to use off_t instead of int be enough? Do you or
> > Terry have interest
> > to cook that patch? For Terry's version, I'm not sure if spliting
> > the code into different CPU vendor would benefit in the future,
> > except
> > that we would have plenty of new MSRs to be introduced in the future.
> 
> Yes, I believe updating the offset_to_idx(), idx_to_offset(), and
> update_msr_sum() functions is sufficient. I can do the incremental
> patch for that this evening if nobody beats me to it :)
>
Calvin, could you please take a look at the following version if it is suitible?

From b2e63fe4f02e17289414b4f61237da822df115fb Mon Sep 17 00:00:00 2001
From: Calvin Walton <calvin.walton@kepstin.ca>
Date: Fri, 23 Apr 2021 17:32:13 +0800
Subject: [PATCH 3/5] tools/power turbostat: Fix offset overflow issue in index
 converting

The idx_to_offset() function returns type int (32-bit signed), but
MSR_PKG_ENERGY_STAT is greater than INT_MAX (or rather, would be
interpreted as a negative number). The end result is that it hits
the if (offset < 0) check in update_msr_sum() resulting in the timer
callback for updating the stat in the background when long durations
are used to not happen. The similar issue exists in offset_to_idx()
and update_msr_sum().

This patch fixes this issue by converting the 'int' type to 'off_t'
accordingly.

Fixes: 9972d5d84d76 ("tools/power turbostat: Enable accumulate RAPL display")
Signed-off-by: Chen Yu <yu.c.chen@intel.com>
---
 tools/power/x86/turbostat/turbostat.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/tools/power/x86/turbostat/turbostat.c b/tools/power/x86/turbostat/turbostat.c
index a211264b57fd..77557122b292 100644
--- a/tools/power/x86/turbostat/turbostat.c
+++ b/tools/power/x86/turbostat/turbostat.c
@@ -296,9 +296,9 @@ struct msr_sum_array {
 /* The percpu MSR sum array.*/
 struct msr_sum_array *per_cpu_msr_sum;
 
-int idx_to_offset(int idx)
+off_t idx_to_offset(int idx)
 {
-	int offset;
+	off_t offset;
 
 	switch (idx) {
 	case IDX_PKG_ENERGY:
@@ -328,7 +328,7 @@ int idx_to_offset(int idx)
 	return offset;
 }
 
-int offset_to_idx(int offset)
+int offset_to_idx(off_t offset)
 {
 	int idx;
 
@@ -3338,7 +3338,7 @@ static int update_msr_sum(struct thread_data *t, struct core_data *c, struct pkg
 
 	for (i = IDX_PKG_ENERGY; i < IDX_COUNT; i++) {
 		unsigned long long msr_cur, msr_last;
-		int offset;
+		off_t offset;
 
 		if (!idx_valid(i))
 			continue;
@@ -3347,7 +3347,7 @@ static int update_msr_sum(struct thread_data *t, struct core_data *c, struct pkg
 			continue;
 		ret = get_msr(cpu, offset, &msr_cur);
 		if (ret) {
-			fprintf(outf, "Can not update msr(0x%x)\n", offset);
+			fprintf(outf, "Can not update msr(0x%llx)\n", (long long int)offset);
 			continue;
 		}

thanks,
Chenyu 
-- 
2.25.1

 
> -- 
> Calvin Walton <calvin.walton@kepstin.ca>
> 

  reply	other threads:[~2021-04-23 12:12 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-19 19:58 [PATCH v2] tools/power turbostat: Fix RAPL summary collection on AMD processors Terry Bowman
2021-04-19 23:52 ` calvin.walton
2021-04-20  2:03 ` Chen Yu
2021-04-20  8:07   ` Borislav Petkov
2021-04-20 13:15     ` Chen Yu
2021-04-20 13:28       ` Calvin Walton
2021-04-20 14:37         ` Chen Yu
2021-04-20 14:42           ` Calvin Walton
2021-04-23 12:16             ` Chen Yu [this message]
2021-04-23 12:19               ` Borislav Petkov
2021-04-23 13:34                 ` Chen Yu
2021-04-23 14:32                   ` Borislav Petkov
2021-04-24  1:14                     ` Chen Yu
2021-04-23 14:00                 ` Calvin Walton
2021-04-23 14:29                   ` Borislav Petkov
2021-04-24  1:34                   ` Chen Yu
2021-04-23 14:04               ` Calvin Walton
2021-04-23 14:27                 ` Chen Yu
2021-04-23 15:17                   ` Calvin Walton
2021-04-20 14:06       ` Artem S. Tashkinov
2021-04-20 15:25       ` Borislav Petkov
2021-04-23 12:18         ` Chen Yu
2021-04-20 13:32 ` Calvin Walton

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=20210423121607.GA426003@chenyu-desktop \
    --to=yu.c.chen@intel.com \
    --cc=aros@gmx.com \
    --cc=bp@suse.de \
    --cc=calvin.walton@kepstin.ca \
    --cc=lenb@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=rui.zhang@intel.com \
    --cc=terry.bowman@amd.com \
    --cc=wei.huang2@amd.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.