>From: Magenheimer, Dan (HP Labs Fort Collins) [mailto:dan.magenheimer@xxxxxx]
>Sent: 2005年9月20日 3:00
>
>> 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?
Yes. Last night I just pushed for a quick test, and so may not use the most
appropriate interface here.
>
>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?
Ideally your suggestion is also what I did in the start. But since I saw nested
event injection when "xend start", I then adopted relative conservative
approach to try whether solving the issue. But still not work yet. ;-(
Thanks,
Kevin
_______________________________________________
Xen-ia64-devel mailing list
Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-ia64-devel
|