Re: RFC: PIC: enhance IPI avoidance

Avi Kivity
2008-07-13T16:00:44Z

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