diff options
| author | Juergen Gross <jgross@suse.com> | 2026-06-08 07:17:37 +0200 |
|---|---|---|
| committer | Ingo Molnar <mingo@kernel.org> | 2026-06-08 10:01:49 +0200 |
| commit | dfaf45fba11642893ed3d28c1aa9f516330147f1 (patch) | |
| tree | 40341fadd887cbf3703d69f0c7756bc3e676174b | |
| parent | 97a6561aca552a942298429b9904825c2c862285 (diff) | |
| download | linux-stable-dfaf45fba11642893ed3d28c1aa9f516330147f1.tar.gz linux-stable-dfaf45fba11642893ed3d28c1aa9f516330147f1.zip | |
x86/msr: Don't use rdmsr_safe_on_cpu() in rdmsrq_safe_on_cpu()
In order to prepare removal of rdmsr_safe_on_cpu(), don't use it in
rdmsrq_safe_on_cpu(), but replace it with open coding it.
This will create a nearly verbatim copy of the same code, but this is
only temporary until rdmsr_safe_on_cpu() is removed.
Tested-by: K Prateek Nayak <kprateek.nayak@amd.com>
Signed-off-by: Juergen Gross <jgross@suse.com>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Reviewed-by: Dave Hansen <dave.hansen@linux.intel.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Link: https://patch.msgid.link/20260608051741.3207435-8-jgross@suse.com
| -rw-r--r-- | arch/x86/lib/msr-smp.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/arch/x86/lib/msr-smp.c b/arch/x86/lib/msr-smp.c index a434c80408a0..f3c75b681603 100644 --- a/arch/x86/lib/msr-smp.c +++ b/arch/x86/lib/msr-smp.c @@ -190,11 +190,22 @@ EXPORT_SYMBOL(wrmsrq_safe_on_cpu); int rdmsrq_safe_on_cpu(unsigned int cpu, u32 msr_no, u64 *q) { - u32 low, high; + struct msr_info_completion rv; + call_single_data_t csd; int err; - err = rdmsr_safe_on_cpu(cpu, msr_no, &low, &high); - *q = (u64)high << 32 | low; + INIT_CSD(&csd, __rdmsr_safe_on_cpu, &rv); + + memset(&rv, 0, sizeof(rv)); + init_completion(&rv.done); + rv.msr.msr_no = msr_no; + + err = smp_call_function_single_async(cpu, &csd); + if (!err) { + wait_for_completion(&rv.done); + err = rv.msr.err; + } + *q = rv.msr.reg.q; return err; } |
