Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1395591 > unrolled thread

[PATCH] x86, tsc: Fix tsc ratio calibration to avoid broken mdelay

Started byyu.c.chen@intel.com
First post2016-05-06 05:30 +0200
Last post2016-05-06 12:00 +0200
Articles 5 — 4 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH] x86, tsc: Fix tsc ratio calibration to avoid broken mdelay yu.c.chen@intel.com - 2016-05-06 05:30 +0200
    Re: [PATCH] x86, tsc: Fix tsc ratio calibration to avoid broken  mdelay Thomas Gleixner <tglx@linutronix.de> - 2016-05-06 11:50 +0200
      Re: [PATCH] x86, tsc: Fix tsc ratio calibration to avoid broken  mdelay Thomas Gleixner <tglx@linutronix.de> - 2016-05-06 12:00 +0200
        RE: [PATCH] x86, tsc: Fix tsc ratio calibration to avoid broken  mdelay "Chen, Yu C" <yu.c.chen@intel.com> - 2016-05-06 14:50 +0200
    [tip:x86/urgent] x86/tsc: Read all ratio bits from  MSR_PLATFORM_INFO tip-bot for Chen Yu <tipbot@zytor.com> - 2016-05-06 12:00 +0200

#1395591 — [PATCH] x86, tsc: Fix tsc ratio calibration to avoid broken mdelay

Fromyu.c.chen@intel.com
Date2016-05-06 05:30 +0200
Subject[PATCH] x86, tsc: Fix tsc ratio calibration to avoid broken mdelay
Message-ID<rvECK-5qY-7@gated-at.bofh.it>
From: Chen Yu <yu.c.chen@intel.com>

Currently we fetch the tsc radio by:
ratio = (lo >> 8) & 0x1f;
thus get bit8~bit12 of the MSR_PLATFORM_INFO, however according
to Intel 64 and IA-32 Architectures Software Developer Manual 35.5,
the ratio bit should be bit8~bit15, otherwise we might get incorrect
tsc ratio and cause system hang later(mdelay corrupted).

Fix this problem by masking 0xff instead.

Cc: 3.14+ <stable@vger.kernel.org> # 3.14+
Signed-off-by: Chen Yu <yu.c.chen@intel.com>
---
 arch/x86/kernel/tsc_msr.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/x86/kernel/tsc_msr.c b/arch/x86/kernel/tsc_msr.c
index 92ae6ac..6aa0f4d 100644
--- a/arch/x86/kernel/tsc_msr.c
+++ b/arch/x86/kernel/tsc_msr.c
@@ -92,7 +92,7 @@ unsigned long try_msr_calibrate_tsc(void)
 
 	if (freq_desc_tables[cpu_index].msr_plat) {
 		rdmsr(MSR_PLATFORM_INFO, lo, hi);
-		ratio = (lo >> 8) & 0x1f;
+		ratio = (lo >> 8) & 0xff;
 	} else {
 		rdmsr(MSR_IA32_PERF_STATUS, lo, hi);
 		ratio = (hi >> 8) & 0x1f;
-- 
2.7.4

[toc] | [next] | [standalone]


#1395742 — Re: [PATCH] x86, tsc: Fix tsc ratio calibration to avoid broken mdelay

FromThomas Gleixner <tglx@linutronix.de>
Date2016-05-06 11:50 +0200
SubjectRe: [PATCH] x86, tsc: Fix tsc ratio calibration to avoid broken mdelay
Message-ID<rvKyt-2xM-5@gated-at.bofh.it>
In reply to#1395591
On Fri, 6 May 2016, yu.c.chen@intel.com wrote:
> From: Chen Yu <yu.c.chen@intel.com>
> 
> Currently we fetch the tsc radio by:
> ratio = (lo >> 8) & 0x1f;
> thus get bit8~bit12 of the MSR_PLATFORM_INFO, however according
> to Intel 64 and IA-32 Architectures Software Developer Manual 35.5,
> the ratio bit should be bit8~bit15, otherwise we might get incorrect
> tsc ratio and cause system hang later(mdelay corrupted).

The resulting issue is that both TSC frequency, which is used for udelay, and
the lapic timer frequency are wrong. mdelay is just the visible damage caused
by that.
 
Thanks,

	tglx

[toc] | [prev] | [next] | [standalone]


#1395752 — Re: [PATCH] x86, tsc: Fix tsc ratio calibration to avoid broken mdelay

FromThomas Gleixner <tglx@linutronix.de>
Date2016-05-06 12:00 +0200
SubjectRe: [PATCH] x86, tsc: Fix tsc ratio calibration to avoid broken mdelay
Message-ID<rvKI9-2Dh-7@gated-at.bofh.it>
In reply to#1395742
On Fri, 6 May 2016, Thomas Gleixner wrote:
> On Fri, 6 May 2016, yu.c.chen@intel.com wrote:
> > From: Chen Yu <yu.c.chen@intel.com>
> > 
> > Currently we fetch the tsc radio by:
> > ratio = (lo >> 8) & 0x1f;
> > thus get bit8~bit12 of the MSR_PLATFORM_INFO, however according
> > to Intel 64 and IA-32 Architectures Software Developer Manual 35.5,
> > the ratio bit should be bit8~bit15, otherwise we might get incorrect
> > tsc ratio and cause system hang later(mdelay corrupted).
> 
> The resulting issue is that both TSC frequency, which is used for udelay, and
> the lapic timer frequency are wrong. mdelay is just the visible damage caused
> by that.

Aside of that:

> Cc: 3.14+ <stable@vger.kernel.org> # 3.14+

Please use:

Fixes: commit '....'

next time, which identifies the kernel version to which this needs to be
backported and gives a reference to the commit which caused the issue.

Thanks,

	tglx

[toc] | [prev] | [next] | [standalone]


#1395833 — RE: [PATCH] x86, tsc: Fix tsc ratio calibration to avoid broken mdelay

From"Chen, Yu C" <yu.c.chen@intel.com>
Date2016-05-06 14:50 +0200
SubjectRE: [PATCH] x86, tsc: Fix tsc ratio calibration to avoid broken mdelay
Message-ID<rvNmG-5ee-1@gated-at.bofh.it>
In reply to#1395752

> -----Original Message-----
> From: Thomas Gleixner [mailto:tglx@linutronix.de]
> Sent: Friday, May 06, 2016 5:53 PM
> To: Chen, Yu C
> Cc: x86@kernel.org; linux-kernel@vger.kernel.org; Ingo Molnar; H. Peter Anvin;
> Gao, Bin; Len Brown; Rafael J. Wysocki; 3 . 14+ # 3 . 14+
> Subject: Re: [PATCH] x86, tsc: Fix tsc ratio calibration to avoid broken mdelay
> 
> 
> On Fri, 6 May 2016, Thomas Gleixner wrote:
> > On Fri, 6 May 2016, yu.c.chen@intel.com wrote:
> > > From: Chen Yu <yu.c.chen@intel.com>
> > >
> > > Currently we fetch the tsc radio by:
> > > ratio = (lo >> 8) & 0x1f;
> > > thus get bit8~bit12 of the MSR_PLATFORM_INFO, however according to
> > > Intel 64 and IA-32 Architectures Software Developer Manual 35.5, the
> > > ratio bit should be bit8~bit15, otherwise we might get incorrect tsc
> > > ratio and cause system hang later(mdelay corrupted).
> >
> > The resulting issue is that both TSC frequency, which is used for
> > udelay, and the lapic timer frequency are wrong. mdelay is just the
> > visible damage caused by that.
> 
> Aside of that:
> 
> > Cc: 3.14+ <stable@vger.kernel.org> # 3.14+
> 
> Please use:
> 
> Fixes: commit '....'
> 
> next time, which identifies the kernel version to which this needs to be
> backported and gives a reference to the commit which caused the issue.
> 
OK, thanks!

[toc] | [prev] | [next] | [standalone]


#1395750 — [tip:x86/urgent] x86/tsc: Read all ratio bits from MSR_PLATFORM_INFO

Fromtip-bot for Chen Yu <tipbot@zytor.com>
Date2016-05-06 12:00 +0200
Subject[tip:x86/urgent] x86/tsc: Read all ratio bits from MSR_PLATFORM_INFO
Message-ID<rvKI9-2Dh-9@gated-at.bofh.it>
In reply to#1395591
Commit-ID:  886123fb3a8656699dff40afa0573df359abeb18
Gitweb:     http://git.kernel.org/tip/886123fb3a8656699dff40afa0573df359abeb18
Author:     Chen Yu <yu.c.chen@intel.com>
AuthorDate: Fri, 6 May 2016 11:33:39 +0800
Committer:  Thomas Gleixner <tglx@linutronix.de>
CommitDate: Fri, 6 May 2016 11:50:50 +0200

x86/tsc: Read all ratio bits from MSR_PLATFORM_INFO

Currently we read the tsc radio: ratio = (MSR_PLATFORM_INFO >> 8) & 0x1f;

Thus we get bit 8-12 of MSR_PLATFORM_INFO, however according to the SDM
(35.5), the ratio bits are bit 8-15.

Ignoring the upper bits can result in an incorrect tsc ratio, which causes the
TSC calibration and the Local APIC timer frequency to be incorrect.

Fix this problem by masking 0xff instead.

[ tglx: Massaged changelog ]

Fixes: 7da7c1561366 "x86, tsc: Add static (MSR) TSC calibration on Intel Atom SoCs"
Signed-off-by: Chen Yu <yu.c.chen@intel.com>
Cc: "Rafael J. Wysocki" <rafael@kernel.org>
Cc: stable@vger.kernel.org
Cc: Bin Gao <bin.gao@intel.com>
Cc: Len Brown <lenb@kernel.org>
Link: http://lkml.kernel.org/r/1462505619-5516-1-git-send-email-yu.c.chen@intel.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>

---
 arch/x86/kernel/tsc_msr.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/x86/kernel/tsc_msr.c b/arch/x86/kernel/tsc_msr.c
index 92ae6ac..6aa0f4d 100644
--- a/arch/x86/kernel/tsc_msr.c
+++ b/arch/x86/kernel/tsc_msr.c
@@ -92,7 +92,7 @@ unsigned long try_msr_calibrate_tsc(void)
 
 	if (freq_desc_tables[cpu_index].msr_plat) {
 		rdmsr(MSR_PLATFORM_INFO, lo, hi);
-		ratio = (lo >> 8) & 0x1f;
+		ratio = (lo >> 8) & 0xff;
 	} else {
 		rdmsr(MSR_IA32_PERF_STATUS, lo, hi);
 		ratio = (hi >> 8) & 0x1f;

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web