From: Juergen Gross Date: Mon, 8 Jun 2026 05:17:37 +0000 (+0200) Subject: x86/msr: Don't use rdmsr_safe_on_cpu() in rdmsrq_safe_on_cpu() X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=dfaf45fba11642893ed3d28c1aa9f516330147f1;p=thirdparty%2Fkernel%2Flinux.git 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 Signed-off-by: Juergen Gross Signed-off-by: Ingo Molnar Reviewed-by: Dave Hansen Cc: H. Peter Anvin Link: https://patch.msgid.link/20260608051741.3207435-8-jgross@suse.com --- 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; }