Abstract the calls to kvm_vgic_vcpu_({sync,flush}_hwstate) via the irqchip_flow structure. No functional change. Signed-off-by: Marc Zyngier <maz@xxxxxxxxxx> --- arch/arm64/include/asm/kvm_irq.h | 8 ++++++++ arch/arm64/kvm/arm.c | 6 +++--- arch/arm64/kvm/vgic/vgic-init.c | 2 ++ include/kvm/arm_vgic.h | 2 -- 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/arch/arm64/include/asm/kvm_irq.h b/arch/arm64/include/asm/kvm_irq.h index 7d888f10aabe..92aaec05ee75 100644 --- a/arch/arm64/include/asm/kvm_irq.h +++ b/arch/arm64/include/asm/kvm_irq.h @@ -26,6 +26,8 @@ struct kvm_irqchip_flow { void (*irqchip_vcpu_put)(struct kvm_vcpu *); int (*irqchip_vcpu_pending_irq)(struct kvm_vcpu *); int (*irqchip_vcpu_first_run)(struct kvm_vcpu *); + void (*irqchip_vcpu_flush_hwstate)(struct kvm_vcpu *); + void (*irqchip_vcpu_sync_hwstate)(struct kvm_vcpu *); }; /* @@ -78,4 +80,10 @@ struct kvm_irqchip_flow { #define kvm_irqchip_vcpu_first_run(v) \ __vcpu_irqchip_action_ret((v), vcpu_first_run, (v)) +#define kvm_irqchip_vcpu_flush_hwstate(v) \ + __vcpu_irqchip_action((v), vcpu_flush_hwstate, (v)) + +#define kvm_irqchip_vcpu_sync_hwstate(v) \ + __vcpu_irqchip_action((v), vcpu_sync_hwstate, (v)) + #endif diff --git a/arch/arm64/kvm/arm.c b/arch/arm64/kvm/arm.c index 0db71d2a38a4..875e68514661 100644 --- a/arch/arm64/kvm/arm.c +++ b/arch/arm64/kvm/arm.c @@ -661,7 +661,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu) local_irq_disable(); - kvm_vgic_flush_hwstate(vcpu); + kvm_irqchip_vcpu_flush_hwstate(vcpu); /* * Exit if we have a signal pending so that we can deliver the @@ -702,7 +702,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu) kvm_pmu_sync_hwstate(vcpu); if (static_branch_unlikely(&userspace_irqchip_in_use)) kvm_timer_sync_user(vcpu); - kvm_vgic_sync_hwstate(vcpu); + kvm_irqchip_vcpu_sync_hwstate(vcpu); local_irq_enable(); preempt_enable(); continue; @@ -738,7 +738,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu) * the timer code needs to know if the virtual timer * interrupts are active. */ - kvm_vgic_sync_hwstate(vcpu); + kvm_irqchip_vcpu_sync_hwstate(vcpu); /* * Sync the timer hardware state before enabling interrupts as diff --git a/arch/arm64/kvm/vgic/vgic-init.c b/arch/arm64/kvm/vgic/vgic-init.c index 8ec8064467a7..53fadbf4ca89 100644 --- a/arch/arm64/kvm/vgic/vgic-init.c +++ b/arch/arm64/kvm/vgic/vgic-init.c @@ -25,6 +25,8 @@ static struct kvm_irqchip_flow vgic_irqchip_flow = { .irqchip_vcpu_put = kvm_vgic_put, .irqchip_vcpu_pending_irq = kvm_vgic_vcpu_pending_irq, .irqchip_vcpu_first_run = kvm_vgic_vcpu_first_run, + .irqchip_vcpu_flush_hwstate = kvm_vgic_flush_hwstate, + .irqchip_vcpu_sync_hwstate = kvm_vgic_sync_hwstate, }; /* diff --git a/include/kvm/arm_vgic.h b/include/kvm/arm_vgic.h index fad523007e2b..4b3a334185fa 100644 --- a/include/kvm/arm_vgic.h +++ b/include/kvm/arm_vgic.h @@ -350,8 +350,6 @@ bool kvm_vgic_map_is_active(struct kvm_vcpu *vcpu, unsigned int vintid); #define vgic_valid_spi(k, i) (((i) >= VGIC_NR_PRIVATE_IRQS) && \ ((i) < (k)->arch.vgic.nr_spis + VGIC_NR_PRIVATE_IRQS)) -void kvm_vgic_sync_hwstate(struct kvm_vcpu *vcpu); -void kvm_vgic_flush_hwstate(struct kvm_vcpu *vcpu); void kvm_vgic_reset_mapped_irq(struct kvm_vcpu *vcpu, u32 vintid); void vgic_v3_dispatch_sgi(struct kvm_vcpu *vcpu, u64 reg, bool allow_group1); -- 2.27.0