]> Pileus Git - ~andy/linux/blobdiff - virt/kvm/ioapic.c
KVM: x86: drop parameter validation in ioapic/pic
[~andy/linux] / virt / kvm / ioapic.c
index ef61d529a6c48b033cdca2dd249a3dbe8c6356ec..cfb7e4d52dc26d1c832eb2a554d8a8ed1d9d23c3 100644 (file)
@@ -197,28 +197,29 @@ int kvm_ioapic_set_irq(struct kvm_ioapic *ioapic, int irq, int irq_source_id,
        u32 old_irr;
        u32 mask = 1 << irq;
        union kvm_ioapic_redirect_entry entry;
-       int ret = 1;
+       int ret, irq_level;
+
+       BUG_ON(irq < 0 || irq >= IOAPIC_NUM_PINS);
 
        spin_lock(&ioapic->lock);
        old_irr = ioapic->irr;
-       if (irq >= 0 && irq < IOAPIC_NUM_PINS) {
-               int irq_level = __kvm_irq_line_state(&ioapic->irq_states[irq],
-                                                    irq_source_id, level);
-               entry = ioapic->redirtbl[irq];
-               irq_level ^= entry.fields.polarity;
-               if (!irq_level)
-                       ioapic->irr &= ~mask;
-               else {
-                       int edge = (entry.fields.trig_mode == IOAPIC_EDGE_TRIG);
-                       ioapic->irr |= mask;
-                       if ((edge && old_irr != ioapic->irr) ||
-                           (!edge && !entry.fields.remote_irr))
-                               ret = ioapic_service(ioapic, irq);
-                       else
-                               ret = 0; /* report coalesced interrupt */
-               }
-               trace_kvm_ioapic_set_irq(entry.bits, irq, ret == 0);
+       irq_level = __kvm_irq_line_state(&ioapic->irq_states[irq],
+                                        irq_source_id, level);
+       entry = ioapic->redirtbl[irq];
+       irq_level ^= entry.fields.polarity;
+       if (!irq_level) {
+               ioapic->irr &= ~mask;
+               ret = 1;
+       } else {
+               int edge = (entry.fields.trig_mode == IOAPIC_EDGE_TRIG);
+               ioapic->irr |= mask;
+               if ((edge && old_irr != ioapic->irr) ||
+                   (!edge && !entry.fields.remote_irr))
+                       ret = ioapic_service(ioapic, irq);
+               else
+                       ret = 0; /* report coalesced interrupt */
        }
+       trace_kvm_ioapic_set_irq(entry.bits, irq, ret == 0);
        spin_unlock(&ioapic->lock);
 
        return ret;