From: Neeraj Upadhyay Date: Wed, 9 Jul 2025 03:32:18 +0000 (+0530) Subject: x86/apic: KVM: Move lapic get/set helpers to common code X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3d3a9083da1e7f5f933455411c1e96b37ae37772;p=thirdparty%2Flinux.git x86/apic: KVM: Move lapic get/set helpers to common code Move the apic_get_reg(), apic_set_reg(), apic_get_reg64() and apic_set_reg64() helper functions to apic.h in order to reuse them in the Secure AVIC guest APIC driver in later patches to read/write registers from/to the APIC backing page. No functional change intended. Signed-off-by: Neeraj Upadhyay Acked-by: Sean Christopherson Link: https://lore.kernel.org/r/20250709033242.267892-12-Neeraj.Upadhyay@amd.com Signed-off-by: Sean Christopherson --- diff --git a/arch/x86/include/asm/apic.h b/arch/x86/include/asm/apic.h index c7355bcbfd603..b8b5fe875bdeb 100644 --- a/arch/x86/include/asm/apic.h +++ b/arch/x86/include/asm/apic.h @@ -525,6 +525,28 @@ static inline int apic_find_highest_vector(void *bitmap) return -1; } +static inline u32 apic_get_reg(void *regs, int reg_off) +{ + return *((u32 *) (regs + reg_off)); +} + +static inline void apic_set_reg(void *regs, int reg_off, u32 val) +{ + *((u32 *) (regs + reg_off)) = val; +} + +static __always_inline u64 apic_get_reg64(void *regs, int reg) +{ + BUILD_BUG_ON(reg != APIC_ICR); + return *((u64 *) (regs + reg)); +} + +static __always_inline void apic_set_reg64(void *regs, int reg, u64 val) +{ + BUILD_BUG_ON(reg != APIC_ICR); + *((u64 *) (regs + reg)) = val; +} + /* * Warm reset vector position: */ diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c index ace2530b24b81..a065db3db02de 100644 --- a/arch/x86/kvm/lapic.c +++ b/arch/x86/kvm/lapic.c @@ -77,33 +77,16 @@ module_param(lapic_timer_advance, bool, 0444); static int kvm_lapic_msr_read(struct kvm_lapic *apic, u32 reg, u64 *data); static int kvm_lapic_msr_write(struct kvm_lapic *apic, u32 reg, u64 data); -static inline void apic_set_reg(void *regs, int reg_off, u32 val) -{ - *((u32 *) (regs + reg_off)) = val; -} - static inline void kvm_lapic_set_reg(struct kvm_lapic *apic, int reg_off, u32 val) { apic_set_reg(apic->regs, reg_off, val); } -static __always_inline u64 apic_get_reg64(void *regs, int reg) -{ - BUILD_BUG_ON(reg != APIC_ICR); - return *((u64 *) (regs + reg)); -} - static __always_inline u64 kvm_lapic_get_reg64(struct kvm_lapic *apic, int reg) { return apic_get_reg64(apic->regs, reg); } -static __always_inline void apic_set_reg64(void *regs, int reg, u64 val) -{ - BUILD_BUG_ON(reg != APIC_ICR); - *((u64 *) (regs + reg)) = val; -} - static __always_inline void kvm_lapic_set_reg64(struct kvm_lapic *apic, int reg, u64 val) { diff --git a/arch/x86/kvm/lapic.h b/arch/x86/kvm/lapic.h index c7babae8af83f..174df69964048 100644 --- a/arch/x86/kvm/lapic.h +++ b/arch/x86/kvm/lapic.h @@ -4,6 +4,8 @@ #include +#include + #include #include "hyperv.h" @@ -165,11 +167,6 @@ static inline void kvm_lapic_set_irr(int vec, struct kvm_lapic *apic) apic->irr_pending = true; } -static inline u32 apic_get_reg(void *regs, int reg_off) -{ - return *((u32 *) (regs + reg_off)); -} - static inline u32 kvm_lapic_get_reg(struct kvm_lapic *apic, int reg_off) { return apic_get_reg(apic->regs, reg_off);