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] Point per-vcpu vcpu_info at a dummy struc

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] Point per-vcpu vcpu_info at a dummy structure by default, avoiding
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Thu, 29 Oct 2009 08:05:11 -0700
Delivery-date: Thu, 29 Oct 2009 08:05:19 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
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/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/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 Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1256814894 0
# Node ID f74f0c1ae8ab2ae4b0683856730ac7f1b4283115
# Parent  e1fd971ec20ed1299fd7324e3a71305b7f129099
Point per-vcpu vcpu_info at a dummy structure by default, avoiding
need for scattered NULL-pointer checks.

Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx>
---
 xen/arch/x86/domain.c        |   11 ++---------
 xen/common/domain.c          |   10 +++++-----
 xen/common/event_channel.c   |   12 ------------
 xen/common/keyhandler.c      |    6 ++----
 xen/include/asm-x86/shared.h |    4 +---
 xen/include/xen/shared.h     |    2 ++
 6 files changed, 12 insertions(+), 33 deletions(-)

diff -r e1fd971ec20e -r f74f0c1ae8ab xen/arch/x86/domain.c
--- a/xen/arch/x86/domain.c     Thu Oct 29 08:34:51 2009 +0000
+++ b/xen/arch/x86/domain.c     Thu Oct 29 11:14:54 2009 +0000
@@ -832,7 +832,6 @@ static void
 static void
 unmap_vcpu_info(struct vcpu *v)
 {
-    struct domain *d = v->domain;
     unsigned long mfn;
 
     if ( v->arch.vcpu_info_mfn == INVALID_MFN )
@@ -841,7 +840,7 @@ unmap_vcpu_info(struct vcpu *v)
     mfn = v->arch.vcpu_info_mfn;
     unmap_domain_page_global(v->vcpu_info);
 
-    v->vcpu_info = (void *)&shared_info(d, vcpu_info[v->vcpu_id]);
+    v->vcpu_info = &dummy_vcpu_info;
     v->arch.vcpu_info_mfn = INVALID_MFN;
 
     put_page_and_type(mfn_to_page(mfn));
@@ -885,13 +884,7 @@ map_vcpu_info(struct vcpu *v, unsigned l
 
     new_info = (vcpu_info_t *)(mapping + offset);
 
-    if ( v->vcpu_info )
-        memcpy(new_info, v->vcpu_info, sizeof(*new_info));
-    else
-    {
-        memset(new_info, 0, sizeof(*new_info));
-        __vcpu_info(v, new_info, evtchn_upcall_mask) = 1;
-    }
+    memcpy(new_info, v->vcpu_info, sizeof(*new_info));
 
     v->vcpu_info = new_info;
     v->arch.vcpu_info_mfn = mfn;
diff -r e1fd971ec20e -r f74f0c1ae8ab xen/common/domain.c
--- a/xen/common/domain.c       Thu Oct 29 08:34:51 2009 +0000
+++ b/xen/common/domain.c       Thu Oct 29 11:14:54 2009 +0000
@@ -87,6 +87,8 @@ struct domain *dom0;
 
 struct vcpu *idle_vcpu[NR_CPUS] __read_mostly;
 
+vcpu_info_t dummy_vcpu_info;
+
 int current_domain_id(void)
 {
     return current->domain->domain_id;
@@ -154,8 +156,9 @@ struct vcpu *alloc_vcpu(
         v->runstate.state = RUNSTATE_offline;        
         v->runstate.state_entry_time = NOW();
         set_bit(_VPF_down, &v->pause_flags);
-        if ( vcpu_id < XEN_LEGACY_MAX_VCPUS )
-            v->vcpu_info = (void *)&shared_info(d, vcpu_info[vcpu_id]);
+        v->vcpu_info = ((vcpu_id < XEN_LEGACY_MAX_VCPUS)
+                        ? (vcpu_info_t *)&shared_info(d, vcpu_info[vcpu_id])
+                        : &dummy_vcpu_info);
     }
 
     if ( sched_init_vcpu(v, cpu_id) != 0 )
@@ -754,9 +757,6 @@ long do_vcpu_op(int cmd, int vcpuid, XEN
     switch ( cmd )
     {
     case VCPUOP_initialise:
-        if ( !v->vcpu_info )
-            return -EINVAL;
-
         if ( (ctxt = xmalloc(struct vcpu_guest_context)) == NULL )
             return -ENOMEM;
 
diff -r e1fd971ec20e -r f74f0c1ae8ab xen/common/event_channel.c
--- a/xen/common/event_channel.c        Thu Oct 29 08:34:51 2009 +0000
+++ b/xen/common/event_channel.c        Thu Oct 29 11:14:54 2009 +0000
@@ -244,9 +244,6 @@ static long evtchn_bind_virq(evtchn_bind
          ((v = d->vcpu[vcpu]) == NULL) )
         return -ENOENT;
 
-    if ( unlikely(!v->vcpu_info) )
-        return -EAGAIN;
-
     spin_lock(&d->event_lock);
 
     if ( v->virq_to_evtchn[virq] != 0 )
@@ -279,9 +276,6 @@ static long evtchn_bind_ipi(evtchn_bind_
     if ( (vcpu < 0) || (vcpu >= d->max_vcpus) ||
          (d->vcpu[vcpu] == NULL) )
         return -ENOENT;
-
-    if ( unlikely(!d->vcpu[vcpu]->vcpu_info) )
-        return -EAGAIN;
 
     spin_lock(&d->event_lock);
 
@@ -726,9 +720,6 @@ long evtchn_bind_vcpu(unsigned int port,
     if ( (vcpu_id >= d->max_vcpus) || (d->vcpu[vcpu_id] == NULL) )
         return -ENOENT;
 
-    if ( unlikely(!d->vcpu[vcpu_id]->vcpu_info) )
-        return -EAGAIN;
-
     spin_lock(&d->event_lock);
 
     if ( !port_is_valid(d, port) )
@@ -951,9 +942,6 @@ int alloc_unbound_xen_event_channel(
     struct evtchn *chn;
     struct domain *d = local_vcpu->domain;
     int            port;
-
-    if ( unlikely(!local_vcpu->vcpu_info) )
-        return -EAGAIN;
 
     spin_lock(&d->event_lock);
 
diff -r e1fd971ec20e -r f74f0c1ae8ab xen/common/keyhandler.c
--- a/xen/common/keyhandler.c   Thu Oct 29 08:34:51 2009 +0000
+++ b/xen/common/keyhandler.c   Thu Oct 29 11:14:54 2009 +0000
@@ -209,8 +209,8 @@ static void dump_domains(unsigned char k
                    v->vcpu_id, v->processor,
                    v->is_running ? 'T':'F',
                    v->pause_flags, v->poll_evtchn,
-                   v->vcpu_info ? vcpu_info(v, evtchn_upcall_pending) : 0,
-                   v->vcpu_info ? vcpu_info(v, evtchn_upcall_mask) : 1);
+                   vcpu_info(v, evtchn_upcall_pending),
+                   vcpu_info(v, evtchn_upcall_mask));
             cpuset_print(tmpstr, sizeof(tmpstr), v->vcpu_dirty_cpumask);
             printk("dirty_cpus=%s ", tmpstr);
             cpuset_print(tmpstr, sizeof(tmpstr), v->cpu_affinity);
@@ -218,8 +218,6 @@ static void dump_domains(unsigned char k
             arch_dump_vcpu_info(v);
             periodic_timer_print(tmpstr, sizeof(tmpstr), v->periodic_period);
             printk("    %s\n", tmpstr);
-            if ( !v->vcpu_info )
-                continue;
             printk("    Notifying guest (virq %d, port %d, stat %d/%d/%d)\n",
                    VIRQ_DEBUG, v->virq_to_evtchn[VIRQ_DEBUG],
                    test_bit(v->virq_to_evtchn[VIRQ_DEBUG], 
diff -r e1fd971ec20e -r f74f0c1ae8ab xen/include/asm-x86/shared.h
--- a/xen/include/asm-x86/shared.h      Thu Oct 29 08:34:51 2009 +0000
+++ b/xen/include/asm-x86/shared.h      Thu Oct 29 11:14:54 2009 +0000
@@ -26,8 +26,6 @@ static inline void arch_set_##field(stru
 #define GET_SET_VCPU(type, field)                               \
 static inline type arch_get_##field(const struct vcpu *v)       \
 {                                                               \
-    if ( unlikely(!v->vcpu_info) )                              \
-        return 0;                                               \
     return !has_32bit_shinfo(v->domain) ?                       \
            v->vcpu_info->native.arch.field :                    \
            v->vcpu_info->compat.arch.field;                     \
@@ -59,7 +57,7 @@ static inline void arch_set_##field(stru
 #define GET_SET_VCPU(type, field)                               \
 static inline type arch_get_##field(const struct vcpu *v)       \
 {                                                               \
-    return v->vcpu_info ? v->vcpu_info->arch.field : 0;         \
+    return v->vcpu_info->arch.field;                            \
 }                                                               \
 static inline void arch_set_##field(struct vcpu *v,             \
                                     type val)                   \
diff -r e1fd971ec20e -r f74f0c1ae8ab xen/include/xen/shared.h
--- a/xen/include/xen/shared.h  Thu Oct 29 08:34:51 2009 +0000
+++ b/xen/include/xen/shared.h  Thu Oct 29 11:14:54 2009 +0000
@@ -43,6 +43,8 @@ typedef struct vcpu_info vcpu_info_t;
 
 #endif
 
+extern vcpu_info_t dummy_vcpu_info;
+
 #define shared_info(d, field)      __shared_info(d, (d)->shared_info, field)
 #define vcpu_info(v, field)        __vcpu_info(v, (v)->vcpu_info, field)
 

_______________________________________________
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] Point per-vcpu vcpu_info at a dummy structure by default, avoiding, Xen patchbot-unstable <=