From: wanghaibin <wanghaibin.wang@huawei.com> Abstract the calls to kvm_vgic_vcpu_({sync,flush}_hwstate) via the irqchip_flow structure. No functional change. Signed-off-by: Marc Zyngier <maz@kernel.org> Signed-off-by: wanghaibin <wanghaibin.wang@huawei.com> --- 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 460e32d89d0f..be9c4b1fd2a1 100644 --- a/arch/arm64/include/asm/kvm_irq.h +++ b/arch/arm64/include/asm/kvm_irq.h @@ -27,6 +27,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 *); }; /* @@ -83,4 +85,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 cfd0c5034c04..5fc108f28bc2 100644 --- a/arch/arm64/kvm/arm.c +++ b/arch/arm64/kvm/arm.c @@ -1307,7 +1307,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); kvm_pmu_update_vcpu_events(vcpu); @@ -1325,7 +1325,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu) kvm_pmu_sync_hwstate(vcpu); if (unlikely(!irqchip_in_kernel(vcpu->kvm))) kvm_timer_sync_user(vcpu); - kvm_vgic_sync_hwstate(vcpu); + kvm_irqchip_vcpu_sync_hwstate(vcpu); local_irq_enable(); preempt_enable(); continue; @@ -1367,7 +1367,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 a58855f485ae..3e90db585038 100644 --- a/arch/arm64/kvm/vgic/vgic-init.c +++ b/arch/arm64/kvm/vgic/vgic-init.c @@ -33,6 +33,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 b260f4064aab..158c45df5422 100644 --- a/include/kvm/arm_vgic.h +++ b/include/kvm/arm_vgic.h @@ -458,8 +458,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.33.0