From: "H. Peter Anvin" <hpa@zytor.com>
To: Borislav Petkov <bp@amd64.org>
Cc: Ingo Molnar <mingo@elte.hu>, Thomas Gleixner <tglx@linutronix.de>,
Borislav Petkov <bp@alien8.de>,
Alok Kataria <akataria@vmware.com>,
the arch/x86 maintainers <x86@kernel.org>,
Greg KH <gregkh@suse.de>, "greg@kroah.com" <greg@kroah.com>,
"ksrinivasan@novell.com" <ksrinivasan@novell.com>,
LKML <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] x86, tsc: Limit CPU frequency calibration on AMD
Date: Wed, 18 Aug 2010 09:23:08 -0700 [thread overview]
Message-ID: <4C6C08EC.2080404@zytor.com> (raw)
In-Reply-To: <20100818161639.GF9880@aftab>
On 08/18/2010 09:16 AM, Borislav Petkov wrote:
> 6b37f5a20c0e5c334c010a587058354215433e92 introduced the CPU frequency
> calibration code for AMD CPUs whose TSCs didn't increment with the
> core's P0 frequency. From F10h, revB onward, the TSC increment rate is
> denoted by MSRC001_0015[24] and when this bit is set (which is normally
> done by the BIOS,) the TSC increments with the P0 frequency so the
> calibration is not needed and booting can be a couple of mcecs faster on
> those machines.
>
> Signed-off-by: Borislav Petkov <borislav.petkov@amd.com>
> ---
> arch/x86/kernel/tsc.c | 14 ++++++++++++--
> 1 files changed, 12 insertions(+), 2 deletions(-)
>
> diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c
> index ce8e502..41b2b8b 100644
> --- a/arch/x86/kernel/tsc.c
> +++ b/arch/x86/kernel/tsc.c
> @@ -927,8 +927,18 @@ void __init tsc_init(void)
> }
>
> if (cpu_has(&boot_cpu_data, X86_FEATURE_CONSTANT_TSC) &&
> - (boot_cpu_data.x86_vendor == X86_VENDOR_AMD))
> - cpu_khz = calibrate_cpu();
> + (boot_cpu_data.x86_vendor == X86_VENDOR_AMD)) {
> +
> + if (boot_cpu_data.x86 > 0x10 ||
> + (boot_cpu_data.x86 == 0x10 &&
> + boot_cpu_data.x86_model >= 0x2)) {
> + u64 val;
> +
> + rdmsrl(MSR_K7_HWCR, val);
> + if (!(val & BIT(24)))
> + cpu_khz = calibrate_cpu();
> + }
> + }
>
> printk("Detected %lu.%03lu MHz processor.\n",
> (unsigned long)cpu_khz / 1000,
Yuck! There are a number of problems with this code, quite a few of
which are, of course, pre-existing, but this makes it worse.
calibrate_cpu() is AMD-specific, despite the generic name. (It is also,
strangely enough, only compiled on 64 bits for some reason???) Either
which way, it is definitely not okay for the test for when the code
applies to be this distant from the code itself.
The easy way to fix this is to rename it amd_calibrate_cpu() and move
the applicability test into the routine itself. That is probably okay
as long as there are no other users. However, if there are other users,
then this really should move into x86_init and have a function pointer
associated with it.
-hpa
--
H. Peter Anvin, Intel Open Source Technology Center
I work for Intel. I don't speak on their behalf.
next prev parent reply other threads:[~2010-08-18 16:24 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-08-16 19:25 [Patch] Skip cpu_calibrate for kernel running under hypervisors Alok Kataria
2010-08-16 23:56 ` H. Peter Anvin
2010-08-17 5:51 ` Alok Kataria
2010-08-17 6:30 ` H. Peter Anvin
2010-08-17 7:05 ` Borislav Petkov
2010-08-17 16:45 ` Alok Kataria
2010-08-17 18:56 ` Borislav Petkov
2010-08-18 16:16 ` [PATCH] x86, tsc: Limit CPU frequency calibration on AMD Borislav Petkov
2010-08-18 16:23 ` H. Peter Anvin [this message]
2010-08-18 17:34 ` Borislav Petkov
2010-08-18 17:44 ` H. Peter Anvin
2010-08-18 17:51 ` Alok Kataria
2010-08-18 18:45 ` Borislav Petkov
2010-08-24 15:53 ` [PATCH -v2] " Borislav Petkov
2010-08-24 17:51 ` Alok Kataria
2010-08-24 22:33 ` H. Peter Anvin
2010-08-25 7:06 ` Borislav Petkov
2010-08-25 13:04 ` Andreas Herrmann
2010-08-25 13:39 ` Andreas Herrmann
2010-08-25 16:28 ` [PATCH -v3] x86, tsc: Remove " Borislav Petkov
2010-08-25 21:36 ` [tip:x86/cpu] " tip-bot for Borislav Petkov
2010-08-25 22:33 ` [PATCH -v3] " Alok Kataria
2010-08-26 7:19 ` Borislav Petkov
2010-08-19 18:47 ` [PATCH] x86, tsc: Limit " john stultz
2010-08-19 20:29 ` Borislav Petkov
2010-08-19 20:52 ` john stultz
2010-08-17 16:48 ` [Patch] Skip cpu_calibrate for kernel running under hypervisors Alok Kataria
2010-08-17 16:49 ` H. Peter Anvin
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=4C6C08EC.2080404@zytor.com \
--to=hpa@zytor.com \
--cc=akataria@vmware.com \
--cc=bp@alien8.de \
--cc=bp@amd64.org \
--cc=greg@kroah.com \
--cc=gregkh@suse.de \
--cc=ksrinivasan@novell.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=tglx@linutronix.de \
--cc=x86@kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox