vmx-io-events.patch
PATCH 1/1 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 <[email protected]>
Signed-off-by Kevin Tian <[email protected]>
Signed-off-by Arun Sharma <[email protected]>
xen/arch/x86/vmx_io.c +8 -2
@@ -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 ); }