ChangeSet 1.1695, 2005/06/08 09:40:39+01:00, arun.sharma@xxxxxxxxx
[PATCH] vmx-io-events.patch
- Handle the case where the VMX domains get events from ports other than
IOPACKET_PORT (because of paravirtualized drivers)
- Use clear_bit() to operate on evtchn_upcall_pending
Signed-off-by: Xiaofeng Ling <xiaofeng.ling@xxxxxxxxx>
Signed-off-by: Kevin Tian <kevin.tian@xxxxxxxxx>
Signed-off-by: Arun Sharma <arun.sharma@xxxxxxxxx>
vmx_io.c | 10 ++++++++--
1 files changed, 8 insertions(+), 2 deletions(-)
diff -Nru a/xen/arch/x86/vmx_io.c b/xen/arch/x86/vmx_io.c
--- a/xen/arch/x86/vmx_io.c 2005-06-08 06:03:12 -04:00
+++ b/xen/arch/x86/vmx_io.c 2005-06-08 06:03:12 -04:00
@@ -283,7 +283,7 @@
/* Note: VMX domains may need upcalls as well */
if (!v->vcpu_info->evtchn_pending_sel)
- v->vcpu_info->evtchn_upcall_pending = 0;
+ clear_bit(0, &v->vcpu_info->evtchn_upcall_pending);
/* clear the pending bit for IOPACKET_PORT */
return test_and_clear_bit(IOPACKET_PORT,
@@ -311,10 +311,16 @@
extern void do_block();
do {
- do_block();
+ if(!test_bit(IOPACKET_PORT,
+ ¤t->domain->shared_info->evtchn_pending[0]))
+ do_block();
vmx_check_events(current);
if (!test_bit(ARCH_VMX_IO_WAIT, ¤t->arch.arch_vmx.flags))
break;
+ /* Events other than IOPACKET_PORT might have woken us up. In that
+ case, safely go back to sleep. */
+ clear_bit(IOPACKET_PORT>>5, ¤t->vcpu_info->evtchn_pending_sel);
+ clear_bit(0, ¤t->vcpu_info->evtchn_upcall_pending);
} while(1);
}
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|