[PATCH v3 00/13] x86/msr: Drop 32-bit MSR interfaces

Juergen Gross jgross at suse.com
Mon Sep 21 08:23:41 PDT 2026


Ingo,

On 11.09.26 09:45, Juergen Gross wrote:
> For accessing the MSR registers on the local CPU, there are 2 types of
> interfaces: the "modern" 64-bit ones (rdmsrq() etc.) and the 32-bit
> ones (rdmsr() etc.) which are using the upper and lower 32-bit halves
> of the 64-bit wide MSR register values.
> 
> The 32-bit interfaces are not optimal for 3 reasons:
> 
> - They are based on primitives using 64-bit sized values anyway.
> 
> - Modern x86 CPUs have added support for MSR access instructions using
>    an immediate value instead of a register for addressing the MSR,
>    while the value is in a 64-bit register.
> 
> - rdmsr() is a macro storing the upper and lower 32-bit halves in
>    variables specified as macro parameters. This is obscuring variable
>    assignment through a macro. Additionally rdmsrq() is mimicking this
>    pattern by being a macro, too, with the target variable specified as
>    a parameter as well.
> 
> For those reasons drop the 32-bit interfaces for accessing the x86 MSR
> registers completely and only use the 64-bit variants.
> 
> This allows to switch all "high-level" MSR access macros to inline
> functions in the end.
> 
> This series will be used as the base for further reorganisation of the
> MSR access functions, especially for completely inlining the MSR
> access instructions even with paravirtualization being active.
> 
> Based on kernel 7.3 as of 2026-09-11.
> 
> Changes in V2:
> - dropped already applied patches
> - added patch 1
> - rebased
> 
> Changes in V3:
> - small fixes in patches 4 and 13
> - rebased
> 
> Juergen Gross (13):
>    x86/cpu: Fix coding style violation
>    x86/msr: Remove wrmsr_safe()
>    x86/msr: Remove rdmsr_safe()
>    drivers/ata: Stop using 32-bit MSR interfaces
>    agp/nvidia: Stop using 32-bit MSR interfaces
>    fbdev/geode: Stop using 32-bit MSR interfaces
>    hw_random/via-rng: Stop using 32-bit MSR interfaces
>    drivers/gpio: Stop using 32-bit MSR interfaces
>    drivers/misc: Stop using 32-bit MSR interfaces
>    x86/msr: Remove wrmsr()
>    x86/msr: Remove rdmsr()
>    treewide: convert rdmsrq() from a macro to an inline function
>    x86/msr: Simplify some rdmsrq() use cases
> 
>   arch/x86/coco/sev/core.c                      |  2 +-
>   arch/x86/events/amd/brs.c                     |  4 +-
>   arch/x86/events/amd/core.c                    |  8 +--
>   arch/x86/events/amd/ibs.c                     | 18 +++----
>   arch/x86/events/amd/lbr.c                     | 16 ++----
>   arch/x86/events/amd/power.c                   |  8 +--
>   arch/x86/events/amd/uncore.c                  |  4 +-
>   arch/x86/events/core.c                        | 20 ++++----
>   arch/x86/events/intel/core.c                  | 15 ++----
>   arch/x86/events/intel/cstate.c                |  5 +-
>   arch/x86/events/intel/ds.c                    |  2 +-
>   arch/x86/events/intel/knc.c                   | 10 ++--
>   arch/x86/events/intel/lbr.c                   | 25 +++-------
>   arch/x86/events/intel/p4.c                    |  6 +--
>   arch/x86/events/intel/p6.c                    |  4 +-
>   arch/x86/events/intel/pt.c                    | 12 ++---
>   arch/x86/events/intel/uncore.c                |  6 +--
>   arch/x86/events/intel/uncore_nhmex.c          |  4 +-
>   arch/x86/events/intel/uncore_snb.c            |  2 +-
>   arch/x86/events/intel/uncore_snbep.c          |  6 +--
>   arch/x86/events/msr.c                         |  2 +-
>   arch/x86/events/perf_event.h                  |  6 +--
>   arch/x86/events/rapl.c                        |  6 +--
>   arch/x86/events/zhaoxin/core.c                | 10 ++--
>   arch/x86/hyperv/hv_apic.c                     |  9 ++--
>   arch/x86/hyperv/hv_init.c                     | 26 +++++-----
>   arch/x86/hyperv/hv_spinlock.c                 |  2 +-
>   arch/x86/include/asm/apic.h                   |  7 +--
>   arch/x86/include/asm/debugreg.h               |  6 +--
>   arch/x86/include/asm/fsgsbase.h               |  2 +-
>   arch/x86/include/asm/kvm_host.h               | 10 ----
>   arch/x86/include/asm/msr.h                    | 39 ++-------------
>   arch/x86/include/asm/paravirt.h               | 26 +---------
>   arch/x86/kernel/apic/apic.c                   | 14 +++---
>   arch/x86/kernel/apic/apic_numachip.c          |  6 +--
>   arch/x86/kernel/cet.c                         |  2 +-
>   arch/x86/kernel/cpu/amd.c                     | 14 +++---
>   arch/x86/kernel/cpu/aperfmperf.c              |  8 +--
>   arch/x86/kernel/cpu/bugs.c                    | 12 ++---
>   arch/x86/kernel/cpu/bus_lock.c                |  8 +--
>   arch/x86/kernel/cpu/centaur.c                 |  8 +--
>   arch/x86/kernel/cpu/common.c                  | 12 ++---
>   arch/x86/kernel/cpu/feat_ctl.c                |  4 +-
>   arch/x86/kernel/cpu/hygon.c                   |  4 +-
>   arch/x86/kernel/cpu/intel.c                   |  6 +--
>   arch/x86/kernel/cpu/intel_epb.c               |  4 +-
>   arch/x86/kernel/cpu/mce/amd.c                 |  4 +-
>   arch/x86/kernel/cpu/mce/core.c                |  8 +--
>   arch/x86/kernel/cpu/mce/inject.c              |  2 +-
>   arch/x86/kernel/cpu/mce/intel.c               | 18 +++----
>   arch/x86/kernel/cpu/mce/p5.c                  |  8 +--
>   arch/x86/kernel/cpu/mce/winchip.c             |  2 +-
>   arch/x86/kernel/cpu/microcode/intel.c         |  2 +-
>   arch/x86/kernel/cpu/mshyperv.c                |  6 +--
>   arch/x86/kernel/cpu/mtrr/amd.c                |  4 +-
>   arch/x86/kernel/cpu/mtrr/cleanup.c            |  4 +-
>   arch/x86/kernel/cpu/mtrr/generic.c            | 32 ++++++------
>   arch/x86/kernel/cpu/mtrr/mtrr.c               |  2 +-
>   arch/x86/kernel/cpu/resctrl/core.c            |  2 +-
>   arch/x86/kernel/cpu/resctrl/monitor.c         |  4 +-
>   arch/x86/kernel/cpu/resctrl/pseudo_lock.c     |  4 +-
>   arch/x86/kernel/cpu/resctrl/rdtgroup.c        |  2 +-
>   arch/x86/kernel/cpu/topology.c                |  2 +-
>   arch/x86/kernel/cpu/topology_amd.c            |  4 +-
>   arch/x86/kernel/cpu/transmeta.c               |  8 +--
>   arch/x86/kernel/cpu/tsx.c                     | 10 ++--
>   arch/x86/kernel/cpu/umwait.c                  |  2 +-
>   arch/x86/kernel/cpu/zhaoxin.c                 |  4 +-
>   arch/x86/kernel/fpu/core.c                    |  2 +-
>   arch/x86/kernel/hpet.c                        |  2 +-
>   arch/x86/kernel/kvm.c                         |  2 +-
>   arch/x86/kernel/mmconf-fam10h_64.c            |  6 +--
>   arch/x86/kernel/process.c                     |  4 +-
>   arch/x86/kernel/process_64.c                  | 14 +++---
>   arch/x86/kernel/shstk.c                       |  8 +--
>   arch/x86/kernel/traps.c                       |  4 +-
>   arch/x86/kernel/tsc.c                         |  2 +-
>   arch/x86/kernel/tsc_msr.c                     |  6 +--
>   arch/x86/kernel/tsc_sync.c                    |  6 +--
>   arch/x86/kvm/msrs.c                           |  2 +-
>   arch/x86/kvm/svm/pmu.c                        |  4 +-
>   arch/x86/kvm/svm/svm.c                        |  4 +-
>   arch/x86/kvm/vmx/nested.c                     |  4 +-
>   arch/x86/kvm/vmx/pmu_intel.c                  |  8 +--
>   arch/x86/kvm/vmx/sgx.c                        |  6 +--
>   arch/x86/kvm/vmx/tdx.c                        |  2 +-
>   arch/x86/kvm/vmx/vmx.c                        | 42 ++++++++--------
>   arch/x86/kvm/x86.c                            |  6 +--
>   arch/x86/lib/insn-eval.c                      |  6 +--
>   arch/x86/lib/msr-smp.c                        |  2 +-
>   arch/x86/mm/pat/memtype.c                     |  2 +-
>   arch/x86/pci/amd_bus.c                        |  8 +--
>   arch/x86/platform/olpc/olpc-xo1-rtc.c         |  6 +--
>   arch/x86/platform/olpc/olpc-xo1-sci.c         |  2 +-
>   arch/x86/power/cpu.c                          | 10 ++--
>   arch/x86/realmode/init.c                      |  2 +-
>   arch/x86/virt/hw.c                            |  8 +--
>   arch/x86/virt/svm/sev.c                       | 18 +++----
>   arch/x86/virt/vmx/tdx/tdx.c                   |  2 +-
>   arch/x86/xen/suspend.c                        |  2 +-
>   drivers/acpi/processor_perflib.c              |  2 +-
>   drivers/ata/pata_cs5535.c                     | 24 ++++-----
>   drivers/ata/pata_cs5536.c                     | 17 +++----
>   drivers/char/agp/nvidia-agp.c                 | 32 ++++++------
>   drivers/char/hw_random/via-rng.c              | 29 +++++------
>   drivers/cpufreq/acpi-cpufreq.c                |  8 +--
>   drivers/cpufreq/amd-pstate.c                  |  4 +-
>   drivers/cpufreq/e_powersaver.c                | 20 ++++----
>   drivers/cpufreq/intel_pstate.c                | 28 +++++------
>   drivers/cpufreq/longhaul.c                    | 12 ++---
>   drivers/cpufreq/longrun.c                     | 16 +++---
>   drivers/cpufreq/powernow-k7.c                 | 10 ++--
>   drivers/cpufreq/powernow-k8.c                 |  8 +--
>   drivers/cpufreq/speedstep-centrino.c          |  4 +-
>   drivers/cpufreq/speedstep-lib.c               | 14 +++---
>   drivers/edac/amd64_edac.c                     |  6 +--
>   drivers/gpio/gpio-cs5535.c                    | 10 ++--
>   drivers/hv/mshv_vtl_main.c                    |  2 +-
>   drivers/hwmon/hwmon-vid.c                     |  4 +-
>   drivers/idle/intel_idle.c                     | 26 +++++-----
>   drivers/misc/cs5535-mfgpt.c                   | 33 ++++++------
>   drivers/mtd/nand/raw/cs553x_nand.c            |  6 +--
>   drivers/platform/x86/intel/ifs/load.c         | 10 ++--
>   drivers/platform/x86/intel/ifs/runtest.c      |  8 +--
>   drivers/platform/x86/intel/pmc/cnp.c          |  2 +-
>   .../intel/speed_select_if/isst_if_mbox_msr.c  |  6 +--
>   .../intel/speed_select_if/isst_tpmi_core.c    |  2 +-
>   drivers/platform/x86/intel_ips.c              | 20 ++++----
>   drivers/powercap/intel_rapl_msr.c             |  2 +-
>   drivers/thermal/intel/intel_hfi.c             |  8 +--
>   drivers/thermal/intel/therm_throt.c           | 22 ++++----
>   drivers/thermal/intel/x86_pkg_temp_thermal.c  |  6 +--
>   drivers/video/fbdev/geode/display_gx.c        |  8 +--
>   drivers/video/fbdev/geode/gxfb_core.c         |  2 +-
>   drivers/video/fbdev/geode/lxfb_ops.c          | 50 +++++++++----------
>   drivers/video/fbdev/geode/suspend_gx.c        | 24 +++++----
>   drivers/video/fbdev/geode/video_gx.c          |  8 +--
>   include/linux/cs5535.h                        | 10 ++--
>   138 files changed, 575 insertions(+), 694 deletions(-)
> 

anything you need from me to get this series into 7.4?


Juergen
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_0xB0DE9DD628BF132F.asc
Type: application/pgp-keys
Size: 3683 bytes
Desc: OpenPGP public key
URL: <http://lists.infradead.org/pipermail/linux-mtd/attachments/20260921/0406f041/attachment-0001.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature.asc
Type: application/pgp-signature
Size: 495 bytes
Desc: OpenPGP digital signature
URL: <http://lists.infradead.org/pipermail/linux-mtd/attachments/20260921/0406f041/attachment-0001.sig>


More information about the linux-mtd mailing list