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

Attachment: OpenPGP_0xB0DE9DD628BF132F.asc
Description: OpenPGP public key

Attachment: OpenPGP_signature.asc
Description: OpenPGP digital signature

Reply via email to