This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
Home Products Support Community News


[Xen-devel] Re: [PATCH][RESEND] vmx-io-events.patch

To: Arun Sharma <arun.sharma@xxxxxxxxx>
Subject: [Xen-devel] Re: [PATCH][RESEND] vmx-io-events.patch
From: Keir Fraser <Keir.Fraser@xxxxxxxxxxxx>
Date: Tue, 7 Jun 2005 07:55:03 +0100
Cc: xen-devel@xxxxxxxxxxxxxxxxxxx, Ian Pratt <Ian.Pratt@xxxxxxxxxxxx>
Delivery-date: Tue, 07 Jun 2005 06:57:52 +0000
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <20050607001336.GA312@xxxxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <20050607001336.GA312@xxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx

This patch doesn't apply cleanly.

 -- Keir

On 7 Jun 2005, at 01:13, Arun Sharma wrote:

- 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>

--- trunk/xen/arch/x86/vmx_io.c (revision 1179)
+++ trunk/xen/arch/x86/vmx_io.c (working copy)
@@ -282,7 +282,7 @@

     /* Note: VMX domains may need upcalls as well */
     if (!ed->vcpu_info->evtchn_pending_sel)
-        ed->vcpu_info->evtchn_upcall_pending = 0;
+        clear_bit(0, &ed->vcpu_info->evtchn_upcall_pending);

     /* clear the pending bit for IOPACKET_PORT */
     return test_and_clear_bit(IOPACKET_PORT,
@@ -310,10 +310,16 @@
     extern void do_block();

     do {
-        do_block();
+        if(!test_bit(IOPACKET_PORT,
+            &current->domain->shared_info->evtchn_pending[0]))
+            do_block();
if (!test_bit(ARCH_VMX_IO_WAIT, &current->arch.arch_vmx.flags))
+ /* Events other than IOPACKET_PORT might have woken us up. In that
+           case, safely go back to sleep. */
+ clear_bit(IOPACKET_PORT>>5, &current->vcpu_info->evtchn_pending_sel);
+        clear_bit(0, &current->vcpu_info->evtchn_upcall_pending);
     } while(1);

Xen-devel mailing list

<Prev in Thread] Current Thread [Next in Thread>