WARNING - OLD ARCHIVES

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/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] Cleanups to map_vcpu_info.

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] Cleanups to map_vcpu_info.
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Mon, 04 Jun 2007 03:15:33 -0700
Delivery-date: Mon, 04 Jun 2007 03:16:50 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User kfraser@xxxxxxxxxxxxxxxxxxxxx
# Date 1180010536 -3600
# Node ID 36959baf05c00329c2a270ff4de7edf0bc0ec3eb
# Parent  1e418f7e0212f274b5042e2113ecdb50b3cc6af9
Cleanups to map_vcpu_info.
Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>
---
 xen/arch/x86/domain.c     |   26 ++++++++++++++++----------
 xen/include/public/vcpu.h |    5 +++--
 2 files changed, 19 insertions(+), 12 deletions(-)

diff -r 1e418f7e0212 -r 36959baf05c0 xen/arch/x86/domain.c
--- a/xen/arch/x86/domain.c     Thu May 24 13:34:19 2007 +0100
+++ b/xen/arch/x86/domain.c     Thu May 24 13:42:16 2007 +0100
@@ -489,7 +489,7 @@ void arch_domain_destroy(struct domain *
 {
     struct vcpu *v;
 
-    for_each_vcpu( d, v )
+    for_each_vcpu ( d, v )
         unmap_vcpu_info(v);
 
     if ( is_hvm_domain(d) )
@@ -754,7 +754,7 @@ unmap_vcpu_info(struct vcpu *v)
         return;
 
     mfn = v->vcpu_info_mfn;
-    unmap_domain_page_global( v->vcpu_info );
+    unmap_domain_page_global(v->vcpu_info);
 
     v->vcpu_info = shared_info_addr(d, vcpu_info[v->vcpu_id]);
     v->vcpu_info_mfn = INVALID_MFN;
@@ -779,8 +779,11 @@ map_vcpu_info(struct vcpu *v, unsigned l
     if ( offset > (PAGE_SIZE - sizeof(vcpu_info_t)) )
         return -EINVAL;
 
-    if ( mfn == INVALID_MFN ||
-         v->vcpu_info_mfn != INVALID_MFN )
+    if ( v->vcpu_info_mfn != INVALID_MFN )
+        return -EINVAL;
+
+    /* Run this command on yourself or on other offline VCPUS. */
+    if ( (v != current) && !test_bit(_VPF_down, &v->pause_flags) )
         return -EINVAL;
 
     mfn = gmfn_to_mfn(d, mfn);
@@ -802,19 +805,22 @@ map_vcpu_info(struct vcpu *v, unsigned l
     v->vcpu_info = new_info;
     v->vcpu_info_mfn = mfn;
 
-    /* make sure all the pointers are uptodate before setting pending */
+    /* Set new vcpu_info pointer /before/ setting pending flags. */
     wmb();
 
-    /* Mark everything as being pending just to make sure nothing gets
-       lost.  The domain will get a spurious event, but it can
-       cope. */
+    /*
+     * Mark everything as being pending just to make sure nothing gets
+     * lost.  The domain will get a spurious event, but it can cope.
+     */
     vcpu_info(v, evtchn_upcall_pending) = 1;
     for ( i = 0; i < BITS_PER_GUEST_LONG(d); i++ )
         set_bit(i, vcpu_info_addr(v, evtchn_pending_sel));
 
-    /* Only bother to update time for the current vcpu.  If we're
+    /*
+     * Only bother to update time for the current vcpu.  If we're
      * operating on another vcpu, then it had better not be running at
-     * the time. */
+     * the time.
+     */
     if ( v == current )
          update_vcpu_system_time(v);
 
diff -r 1e418f7e0212 -r 36959baf05c0 xen/include/public/vcpu.h
--- a/xen/include/public/vcpu.h Thu May 24 13:34:19 2007 +0100
+++ b/xen/include/public/vcpu.h Thu May 24 13:42:16 2007 +0100
@@ -172,8 +172,9 @@ DEFINE_XEN_GUEST_HANDLE(vcpu_set_singles
  */
 #define VCPUOP_register_vcpu_info   10  /* arg == struct vcpu_info */
 struct vcpu_register_vcpu_info {
-    xen_pfn_t mfn;              /* mfn of page to place vcpu_info */
-    uint32_t offset;            /* offset within page */
+    uint64_t mfn;    /* mfn of page to place vcpu_info */
+    uint32_t offset; /* offset within page */
+    uint32_t rsvd;   /* unused */
 };
 typedef struct vcpu_register_vcpu_info vcpu_register_vcpu_info_t;
 DEFINE_XEN_GUEST_HANDLE(vcpu_register_vcpu_info_t);

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] Cleanups to map_vcpu_info., Xen patchbot-unstable <=