From: Borislav Petkov <petkovbb@googlemail.com>
To: "H. Peter Anvin" <hpa@zytor.com>
Cc: Ingo Molnar <mingo@elte.hu>,
mingo@redhat.com, linux-kernel@vger.kernel.org,
kjwinchester@gmail.com, tglx@linutronix.de,
borislav.petkov@amd.com, linux-tip-commits@vger.kernel.org
Subject: Re: [tip:x86/urgent] x86, AMD: Disable wrongly set X86_FEATURE_LAHF_LM CPUID bit
Date: Sat, 22 Aug 2009 18:37:50 +0200 [thread overview]
Message-ID: <20090822163750.GA31631@liondog.tnic> (raw)
In-Reply-To: <4A8EDC02.8000508@zytor.com>
On Fri, Aug 21, 2009 at 10:40:18AM -0700, H. Peter Anvin wrote:
> If we're going to modify the paravirt_crap for yet another MSR
> operation, then let's at least make it something like "write_msr_edi"
> and have it take a parameter for the EDI value. Perhaps we should let
> it set EBX and ESI as well (and the same for the read operation, even
> though it already exists.)
Ok, how about making all rdmsr* variants indirectly call into a
native_read_msr_safe_reg() helper which takes esi and edi as additional
arguments. There was no room for ebx since paravirt has a PVOP_CALL4
macro which takes the largest number of args - 4 and I am lazy, of
course, to implement a PVOP_CALL5 thing :o)
The wrmsr variants could be done similarly.
Suggestions, comments?
--
diff --git a/arch/x86/include/asm/msr.h b/arch/x86/include/asm/msr.h
index 48ad9d2..2fec363 100644
--- a/arch/x86/include/asm/msr.h
+++ b/arch/x86/include/asm/msr.h
@@ -55,8 +55,10 @@ static inline unsigned long long native_read_msr(unsigned int msr)
return EAX_EDX_VAL(val, low, high);
}
-static inline unsigned long long native_read_msr_safe(unsigned int msr,
- int *err)
+static inline unsigned long long native_read_msr_safe_reg(unsigned int msr,
+ int *err,
+ unsigned int edi,
+ unsigned int esi)
{
DECLARE_ARGS(val, low, high);
@@ -67,24 +69,15 @@ static inline unsigned long long native_read_msr_safe(unsigned int msr,
".previous\n\t"
_ASM_EXTABLE(2b, 3b)
: [err] "=r" (*err), EAX_EDX_RET(val, low, high)
- : "c" (msr), [fault] "i" (-EFAULT));
+ : "c" (msr), [fault] "i" (-EFAULT), "D" (edi), "S" (esi));
+
return EAX_EDX_VAL(val, low, high);
}
-static inline unsigned long long native_read_msr_amd_safe(unsigned int msr,
+static inline unsigned long long native_read_msr_safe(unsigned int msr,
int *err)
{
- DECLARE_ARGS(val, low, high);
-
- asm volatile("2: rdmsr ; xor %0,%0\n"
- "1:\n\t"
- ".section .fixup,\"ax\"\n\t"
- "3: mov %3,%0 ; jmp 1b\n\t"
- ".previous\n\t"
- _ASM_EXTABLE(2b, 3b)
- : "=r" (*err), EAX_EDX_RET(val, low, high)
- : "c" (msr), "D" (0x9c5a203a), "i" (-EFAULT));
- return EAX_EDX_VAL(val, low, high);
+ return native_read_msr_safe_reg(msr, err, 0, 0);
}
static inline void native_write_msr(unsigned int msr,
@@ -181,11 +174,12 @@ static inline int rdmsrl_safe(unsigned msr, unsigned long long *p)
*p = native_read_msr_safe(msr, &err);
return err;
}
+
static inline int rdmsrl_amd_safe(unsigned msr, unsigned long long *p)
{
int err;
- *p = native_read_msr_amd_safe(msr, &err);
+ *p = native_read_msr_safe_reg(msr, &err, 0x9c5a203a, 0);
return err;
}
diff --git a/arch/x86/include/asm/paravirt.h b/arch/x86/include/asm/paravirt.h
index 4fb37c8..d49e1ee 100644
--- a/arch/x86/include/asm/paravirt.h
+++ b/arch/x86/include/asm/paravirt.h
@@ -166,8 +166,9 @@ struct pv_cpu_ops {
/* MSR, PMC and TSR operations.
err = 0/-EFAULT. wrmsr returns 0/-EFAULT. */
- u64 (*read_msr_amd)(unsigned int msr, int *err);
u64 (*read_msr)(unsigned int msr, int *err);
+ u64 (*read_msr_reg)(unsigned int msr, int *err, unsigned edi,
+ unsigned esi);
int (*write_msr)(unsigned int msr, unsigned low, unsigned high);
u64 (*read_tsc)(void);
@@ -820,9 +821,10 @@ static inline u64 paravirt_read_msr(unsigned msr, int *err)
{
return PVOP_CALL2(u64, pv_cpu_ops.read_msr, msr, err);
}
-static inline u64 paravirt_read_msr_amd(unsigned msr, int *err)
+static inline u64 paravirt_read_msr_reg(unsigned msr, int *err, unsigned edi,
+ unsigned esi)
{
- return PVOP_CALL2(u64, pv_cpu_ops.read_msr_amd, msr, err);
+ return PVOP_CALL4(u64, pv_cpu_ops.read_msr_reg, msr, err, edi, esi);
}
static inline int paravirt_write_msr(unsigned msr, unsigned low, unsigned high)
{
@@ -873,7 +875,7 @@ static inline int rdmsrl_amd_safe(unsigned msr, unsigned long long *p)
{
int err;
- *p = paravirt_read_msr_amd(msr, &err);
+ *p = paravirt_read_msr_reg(msr, &err, 0x9c5a203a, 0);
return err;
}
diff --git a/arch/x86/kernel/paravirt.c b/arch/x86/kernel/paravirt.c
index 70ec9b9..ecac58d 100644
--- a/arch/x86/kernel/paravirt.c
+++ b/arch/x86/kernel/paravirt.c
@@ -362,7 +362,7 @@ struct pv_cpu_ops pv_cpu_ops = {
#endif
.wbinvd = native_wbinvd,
.read_msr = native_read_msr_safe,
- .read_msr_amd = native_read_msr_amd_safe,
+ .read_msr_reg = native_read_msr_safe_reg,
.write_msr = native_write_msr_safe,
.read_tsc = native_read_tsc,
.read_pmc = native_read_pmc,
--
Regards/Gruss,
Boris.
next prev parent reply other threads:[~2009-08-22 16:37 UTC|newest]
Thread overview: 80+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-08-08 11:53 [PATCH] x86: clear incorrectly forced X86_FEATURE_LAHF_LM flag Kevin Winchester
2009-08-08 15:20 ` Borislav Petkov
2009-08-08 15:42 ` Ingo Molnar
2009-08-08 16:15 ` Ingo Molnar
2009-08-08 22:06 ` Kevin Winchester
2009-08-08 23:17 ` [PATCH v2] " Kevin Winchester
2009-08-10 13:12 ` Borislav Petkov
2009-08-10 22:56 ` [PATCH v3] " Kevin Winchester
2009-08-11 9:44 ` Borislav Petkov
2009-08-11 11:36 ` [tip:x86/urgent] x86: Clear " tip-bot for Kevin Winchester
2009-08-11 14:37 ` [PATCH v3] x86: clear " Mikael Pettersson
2009-08-11 14:56 ` Kevin Winchester
2009-08-11 15:51 ` Borislav Petkov
2009-08-11 15:55 ` Kevin Winchester
2009-08-11 16:01 ` Borislav Petkov
2009-08-12 0:15 ` Kevin Winchester
2009-08-12 11:40 ` Borislav Petkov
2009-08-12 23:02 ` Kevin Winchester
2009-08-13 12:23 ` Borislav Petkov
2009-08-13 12:31 ` [PATCH 1/2] x86, msr: Add an AMD wrmsr with exception handling Borislav Petkov
2009-08-13 12:31 ` [PATCH 2/2] x86: Clear incorrectly forced X86_FEATURE_LAHF_LM flag Borislav Petkov
2009-08-13 14:21 ` Brian Gerst
2009-08-13 14:54 ` Kevin Winchester
2009-08-13 15:55 ` Brian Gerst
2009-08-13 16:18 ` Borislav Petkov
2009-08-13 22:45 ` Kevin Winchester
2009-08-13 15:54 ` Borislav Petkov
2009-08-13 14:57 ` [PATCH v3] x86: clear " Kevin Winchester
2009-08-13 23:24 ` Kevin Winchester
2009-08-14 12:00 ` Borislav Petkov
2009-08-14 12:06 ` [PATCH 1/2] x86, msr: Add a AMD wrmsr with exception handling Borislav Petkov
2009-08-15 17:06 ` [tip:x86/urgent] " tip-bot for Borislav Petkov
2009-08-14 12:06 ` [PATCH 2/2] x86, AMD: Disable wrongly set X86_FEATURE_LAHF_LM CPUID bit Borislav Petkov
2009-08-15 17:06 ` [tip:x86/urgent] " tip-bot for Borislav Petkov
2009-08-16 6:41 ` Ingo Molnar
2009-08-16 20:10 ` Kevin Winchester
2009-08-16 20:51 ` Ingo Molnar
2009-08-16 21:49 ` Borislav Petkov
2009-08-21 17:40 ` H. Peter Anvin
2009-08-22 16:37 ` Borislav Petkov [this message]
2009-08-24 20:34 ` H. Peter Anvin
2009-08-25 5:52 ` Borislav Petkov
2009-08-25 6:44 ` H. Peter Anvin
2009-08-30 11:43 ` Borislav Petkov
2009-08-30 11:50 ` [PATCH 1/3] x86, msr: add rd/wrmsr interfaces with preset registers Borislav Petkov
2009-08-30 11:50 ` [PATCH 2/3] x86, msr: rewrite AMD rd/wrmsr variants Borislav Petkov
2009-08-30 20:03 ` H. Peter Anvin
2009-08-30 20:46 ` Borislav Petkov
2009-08-30 20:04 ` H. Peter Anvin
2009-08-30 11:50 ` [PATCH 3/3] x86, AMD: Disable wrongly set X86_FEATURE_LAHF_LM CPUID bit Borislav Petkov
2009-08-30 19:22 ` H. Peter Anvin
2009-08-30 19:30 ` Borislav Petkov
2009-08-30 20:02 ` H. Peter Anvin
2009-08-30 20:29 ` Borislav Petkov
2009-08-30 20:48 ` H. Peter Anvin
2009-08-31 7:34 ` Borislav Petkov
2009-08-31 7:50 ` [PATCH 1/3] x86, msr: add rd/wrmsr interfaces with preset registers Borislav Petkov
2009-08-31 23:37 ` [tip:x86/cpu] x86, msr: Add " tip-bot for Borislav Petkov
2009-09-01 11:05 ` Ingo Molnar
2009-09-01 13:06 ` Borislav Petkov
2009-09-04 14:08 ` Ingo Molnar
2009-09-04 16:26 ` H. Peter Anvin
2009-09-04 17:06 ` [tip:x86/cpu] x86, msr: change msr-reg.o to obj-y, and export its symbols tip-bot for H. Peter Anvin
2009-09-05 9:57 ` Borislav Petkov
2009-09-06 4:41 ` H. Peter Anvin
2009-08-31 23:38 ` [tip:x86/cpu] x86, msr: CFI annotations, cleanups for msr-reg.S tip-bot for H. Peter Anvin
2009-09-03 22:55 ` [PATCH 1/3] x86, msr: add rd/wrmsr interfaces with preset registers Andrew Morton
2009-09-03 22:57 ` H. Peter Anvin
2009-09-03 23:14 ` Andrew Morton
2009-09-03 23:22 ` H. Peter Anvin
2009-09-04 6:39 ` Ingo Molnar
2009-09-04 8:27 ` Borislav Petkov
2009-08-31 7:50 ` [PATCH 2/3] x86, msr: rewrite AMD rd/wrmsr variants Borislav Petkov
2009-08-31 23:37 ` [tip:x86/cpu] x86, msr: Rewrite " tip-bot for Borislav Petkov
2009-08-31 7:50 ` [PATCH 3/3] x86, AMD: Disable wrongly set X86_FEATURE_LAHF_LM CPUID bit Borislav Petkov
2009-08-31 23:37 ` [tip:x86/cpu] " tip-bot for Borislav Petkov
2009-08-31 8:14 ` [PATCH 3/3] " Borislav Petkov
2009-08-31 18:03 ` H. Peter Anvin
2009-08-30 17:07 ` [tip:x86/urgent] " H. Peter Anvin
2009-08-30 19:17 ` Borislav Petkov
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=20090822163750.GA31631@liondog.tnic \
--to=petkovbb@googlemail.com \
--cc=borislav.petkov@amd.com \
--cc=hpa@zytor.com \
--cc=kjwinchester@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tip-commits@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=mingo@redhat.com \
--cc=tglx@linutronix.de \
/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
all inboxes | Powered by JetHome®