> diff -r 55bc6698c889 xen/arch/ia64/xen/vcpu.c
> @@ -631,6 +632,16 @@
> {
> UINT64 *p, *q, *r, bits, bitnum, mask, i, vector;
>
> + /* Always check pending event, since guest may just ack the
> + * event injection without handle. Later guest may throw out
> + * the event itself.
> + */
> + if (event_pending(vcpu) &&
> + !test_bit(vcpu->vcpu_info->arch.evtchn_vector,
> + &PSCBX(vcpu, insvc[0])))
> + test_and_set_bit(vcpu->vcpu_info->arch.evtchn_vector,
> + &PSCBX(vcpu, irr[0]));
> +
> p = &PSCBX(vcpu,irr[3]);
> /* q = &PSCB(vcpu,delivery_mask[3]); */
> r = &PSCBX(vcpu,insvc[3]);
Why is the line that sets the irr bit calling
test_and_set_bit() rather than just set_bit()?
Even better, why not call vcpu_pend_interrupt()
which also sets the pending_interruption flag?
Also, why does the irr bit get set only if insvc is
not set? Isn't it possible to pend one interrupt
while another is in-service?
Thanks,
Dan
_______________________________________________
Xen-ia64-devel mailing list
Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-ia64-devel
|