arm: implement VGCF_online
authorIan Campbell <ian.campbell@citrix.com>
Tue, 9 Oct 2012 14:05:31 +0000 (15:05 +0100)
committerIan Campbell <ian.campbell@citrix.com>
Tue, 9 Oct 2012 14:05:31 +0000 (15:05 +0100)
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Acked-by: Tim Deegan <tim@xen.org>
Committed-by: Ian Campbell <ian.campbell@citrix.com>
tools/libxc/xc_dom_arm.c
xen/arch/arm/domain.c
xen/include/public/arch-arm.h

index 3eef0d01817530df2cc9ec66ace84651d72dfd40..65dafe8bed5bb710f806080baa68fd3a7cf034af 100644 (file)
@@ -101,6 +101,8 @@ static int vcpu_arm(struct xc_dom_image *dom, void *ptr)
 
     ctxt->user_regs.cpsr = PSR_ABT_MASK|PSR_FIQ_MASK|PSR_IRQ_MASK|PSR_MODE_SVC;
 
+    ctxt->flags = VGCF_online;
+
     DOMPRINTF("Initial state CPSR %#"PRIx32" PC %#"PRIx32,
            ctxt->user_regs.cpsr, ctxt->user_regs.pc);
 
index 57d8746fa3bef6a1a4d96267f382098afa4fce43..ee58d6867718a77ca714004a7897dbb26a385ba3 100644 (file)
@@ -503,7 +503,10 @@ int arch_set_info_guest(
     v->arch.ttbr1 = ctxt->ttbr1;
     v->arch.ttbcr = ctxt->ttbcr;
 
-    clear_bit(_VPF_down, &v->pause_flags);
+    if ( ctxt->flags & VGCF_online )
+        clear_bit(_VPF_down, &v->pause_flags);
+    else
+        set_bit(_VPF_down, &v->pause_flags);
 
     return 0;
 }
index f18bafa28fc5bbcc55aabd6d747c6f7f32017cae..e3d4ad9bc65c048302923097d9ceb635ca491015 100644 (file)
@@ -125,6 +125,10 @@ typedef uint64_t xen_pfn_t;
 typedef uint32_t xen_ulong_t;
 
 struct vcpu_guest_context {
+#define _VGCF_online                   0
+#define VGCF_online                    (1<<_VGCF_online)
+    uint32_t flags;                         /* VGCF_* */
+
     struct cpu_user_regs user_regs;         /* User-level CPU registers     */
 
     uint32_t sctlr;