[PATCH v2 2/2] LoongArch: KVM: Remove duplicated checking with DMSI irq injection

From: Bibo Mao

Date: Tue Sep 22 2026 - 21:26:32 EST


There are some duplicated error checking in DMSI interrupt injection
function, also vcpu::arch::dmsintc_state is structure rather than pointer,
NULL pointer checking with dmsintc_state is not necessary, here remove
these unnecessary checking.

Signed-off-by: Bibo Mao <maobibo@xxxxxxxxxxx>
Reviewed-by: Tao Cui <cuitao@xxxxxxxxxx>
---
arch/loongarch/kvm/intc/dmsintc.c | 32 +++++++------------------------
1 file changed, 7 insertions(+), 25 deletions(-)

diff --git a/arch/loongarch/kvm/intc/dmsintc.c b/arch/loongarch/kvm/intc/dmsintc.c
index 79e56e330aeb..6fe52471007c 100644
--- a/arch/loongarch/kvm/intc/dmsintc.c
+++ b/arch/loongarch/kvm/intc/dmsintc.c
@@ -14,9 +14,6 @@ void dmsintc_inject_irq(struct kvm_vcpu *vcpu)
unsigned long vector[4], old;
struct dmsintc_state *ds = &vcpu->arch.dmsintc_state;

- if (!ds)
- return;
-
for (i = 0; i < 4; i++) {
old = atomic64_read(&(ds->vector_map[i]));
vector[i] = old ? atomic64_xchg(&(ds->vector_map[i]), 0) : 0;
@@ -43,25 +40,6 @@ void dmsintc_inject_irq(struct kvm_vcpu *vcpu)
}
}

-static int dmsintc_deliver_msi_to_vcpu(struct kvm_vcpu *vcpu, u32 vector)
-{
- struct dmsintc_state *ds = &vcpu->arch.dmsintc_state;
-
- if (!vcpu || vector >= 256)
- return -EINVAL;
- if (!ds)
- return -ENODEV;
-
- if (!kvm_guest_has_msgint(&vcpu->arch))
- return -EINVAL;
-
- set_bit(vector, (unsigned long *)&ds->vector_map);
- kvm_queue_irq(vcpu, INT_AVEC);
- kvm_vcpu_kick(vcpu);
-
- return 0;
-}
-
int dmsintc_set_irq(struct kvm *kvm, u64 addr, int data)
{
unsigned int irq, cpu;
@@ -69,13 +47,17 @@ int dmsintc_set_irq(struct kvm *kvm, u64 addr, int data)

irq = (addr >> AVEC_IRQ_SHIFT) & AVEC_IRQ_MASK;
cpu = (addr >> AVEC_CPU_SHIFT) & kvm->arch.dmsintc->cpu_mask;
- if (cpu >= KVM_MAX_VCPUS)
- return -EINVAL;
vcpu = kvm_get_vcpu_by_cpuid(kvm, cpu);
if (!vcpu)
return -EINVAL;

- return dmsintc_deliver_msi_to_vcpu(vcpu, irq);
+ if (!kvm_guest_has_msgint(&vcpu->arch))
+ return -EINVAL;
+
+ set_bit(irq, (unsigned long *)&vcpu->arch.dmsintc_state.vector_map);
+ kvm_queue_irq(vcpu, INT_AVEC);
+ kvm_vcpu_kick(vcpu);
+ return 0;
}

static int kvm_dmsintc_ctrl_access(struct kvm_device *dev,
--
2.39.3