Marcelo Tosatti wrote:
The PIC code makes little effort to avoid kvm_vcpu_kick(), resulting in
unnecessary guest exits in some conditions.

For example, if the timer interrupt is routed through the IOAPIC, IRR
for IRQ 0 will get set but not cleared, since the APIC is handling the
acks.

This means that everytime an interrupt < 16 is triggered, the priority
logic will find IRQ0 pending and send an IPI to vcpu0 (in case IRQ0 is
not masked, which is Linux's case).

Introduce a new variable isr_ack to represent the IRQ's for which the
guest has been signalled / cleared the ISR. Use it to avoid more than
one IPI per trigger-ack cycle, in addition to the avoidance when ISR is
set in get_priority().


Looks good.

                                        s->isr &= ~(1 << irq);
+                                       s->isr_ack |= (1 << irq);

                                s->isr &= ~(1 << irq);
+                               s->isr_ack |= (1 << irq);

                                s->isr &= ~(1 << irq);
+                               s->isr_ack |= (1 << irq);

                        s->pics_state->pics[0].isr &= ~(1 << 2);
+                       s->pics_state->pics[0].isr_ack |= (1 << 2);

                s->isr &= ~(1 << ret);
+               s->isr_ack |= (1 << ret);

I already have a patch which consolidates isr clearing into a function, so I've queued it up and will push once it passes regression testing. Please rebase your patch on top of that.

--
error compiling committee.c: too many arguments to function

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to