Commit 6debfff7 authored by Bibo Mao's avatar Bibo Mao Committed by Huacai Chen
Browse files

LoongArch: KVM: Move AVEC interrupt injection into switch loop



When AVEC interrupt controller is emulated in user space, AVEC interrupt
is injected by software like SIP0/SIP1/TI/IPI interrupts. Here also move
the AVEC interrupt injection in switch loop.

Cc: stable@vger.kernel.org
Signed-off-by: default avatarBibo Mao <maobibo@loongson.cn>
Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
parent 81e18777
Loading
Loading
Loading
Loading
+9 −11
Original line number Diff line number Diff line
@@ -33,13 +33,12 @@ static int kvm_irq_deliver(struct kvm_vcpu *vcpu, unsigned int priority)
	if (priority < EXCCODE_INT_NUM)
		irq = priority_to_irq[priority];

	if (kvm_guest_has_msgint(&vcpu->arch) && (priority == INT_AVEC)) {
		dmsintc_inject_irq(vcpu);
		set_gcsr_estat(irq);
		return 1;
	}

	switch (priority) {
	case INT_AVEC:
		if (!kvm_guest_has_msgint(&vcpu->arch))
			break;
		dmsintc_inject_irq(vcpu);
		fallthrough;
	case INT_TI:
	case INT_IPI:
	case INT_SWI0:
@@ -66,12 +65,11 @@ static int kvm_irq_clear(struct kvm_vcpu *vcpu, unsigned int priority)
	if (priority < EXCCODE_INT_NUM)
		irq = priority_to_irq[priority];

	if (kvm_guest_has_msgint(&vcpu->arch) && (priority == INT_AVEC)) {
		clear_gcsr_estat(irq);
		return 1;
	}

	switch (priority) {
	case INT_AVEC:
		if (!kvm_guest_has_msgint(&vcpu->arch))
			break;
		fallthrough;
	case INT_TI:
	case INT_IPI:
	case INT_SWI0: