[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-unstable] [IA64] Steal time accounting for PV domain - hypervisor side



# HG changeset patch
# User awilliam@xxxxxxxxxxxx
# Date 1173298567 25200
# Node ID 4e367aa898956466747417bff637a681b8b58202
# Parent  9f8e996a678d5825462e2546aff6789064b3aed2
[IA64] Steal time accounting for PV domain - hypervisor side

Signed-off-by: Atsushi SAKAI <sakaia@xxxxxxxxxxxxxx>
---
 xen/arch/ia64/linux-xen/entry.S  |    2 -
 xen/arch/ia64/xen/domain.c       |   43 +++++++++++++++++++++++++++++++++++++++
 xen/include/asm-ia64/hypercall.h |    3 +-
 3 files changed, 46 insertions(+), 2 deletions(-)

diff -r 9f8e996a678d -r 4e367aa89895 xen/arch/ia64/linux-xen/entry.S
--- a/xen/arch/ia64/linux-xen/entry.S   Wed Mar 07 12:45:08 2007 -0700
+++ b/xen/arch/ia64/linux-xen/entry.S   Wed Mar 07 13:16:07 2007 -0700
@@ -1509,7 +1509,7 @@ ia64_hypercall_table:
        data8 do_ni_hypercall           /* do_vm_assist */
        data8 do_ni_hypercall           /* do_update_va_mapping_othe */
        data8 do_ni_hypercall           /* (x86 only) */
-       data8 do_ni_hypercall           /* do_vcpu_op */
+       data8 do_vcpu_op                /* do_vcpu_op */
        data8 do_ni_hypercall           /* (x86_64 only) */    /* 25 */
        data8 do_ni_hypercall           /* do_mmuext_op */
        data8 do_ni_hypercall           /* do_acm_op */
diff -r 9f8e996a678d -r 4e367aa89895 xen/arch/ia64/xen/domain.c
--- a/xen/arch/ia64/xen/domain.c        Wed Mar 07 12:45:08 2007 -0700
+++ b/xen/arch/ia64/xen/domain.c        Wed Mar 07 13:16:07 2007 -0700
@@ -50,6 +50,7 @@
 #include <xen/guest_access.h>
 #include <asm/tlb_track.h>
 #include <asm/perfmon.h>
+#include <public/vcpu.h>
 
 unsigned long dom0_size = 512*1024*1024;
 
@@ -262,6 +263,9 @@ void context_switch(struct vcpu *prev, s
                 vcpu_info[current->vcpu_id].evtchn_upcall_mask;
             __ia64_per_cpu_var(current_psr_ic_addr) =
                 (int *)(nd->arch.shared_info_va + XSI_PSR_IC_OFS);
+            /* steal time accounting */
+            if (!guest_handle_is_null(runstate_guest(current)))
+                __copy_to_guest(runstate_guest(current), &current->runstate, 
1);
         } else {
             /* When switching to idle domain, only need to disable vhpt
              * walker. Then all accesses happen within idle context will
@@ -1257,6 +1261,45 @@ void sync_vcpu_execstate(struct vcpu *v)
        // FIXME SMP: Anything else needed here for SMP?
 }
 
+/* This function is taken from xen/arch/x86/domain.c */
+long
+arch_do_vcpu_op(int cmd, struct vcpu *v, XEN_GUEST_HANDLE(void) arg)
+{
+       long rc = 0;
+
+       switch (cmd) {
+       case VCPUOP_register_runstate_memory_area:
+       {
+               struct vcpu_register_runstate_memory_area area;
+               struct vcpu_runstate_info runstate;
+
+               rc = -EFAULT;
+               if (copy_from_guest(&area, arg, 1))
+                       break;
+
+               if (!guest_handle_okay(area.addr.h, 1))
+                       break;
+
+               rc = 0;
+               runstate_guest(v) = area.addr.h;
+
+               if (v == current) {
+                       __copy_to_guest(runstate_guest(v), &v->runstate, 1);
+               } else {
+                       vcpu_runstate_get(v, &runstate);
+                       __copy_to_guest(runstate_guest(v), &runstate, 1);
+               }
+
+               break;
+       }
+       default:
+               rc = -ENOSYS;
+               break;
+       }
+
+       return rc;
+}
+
 static void parse_dom0_mem(char *s)
 {
        dom0_size = parse_size_and_unit(s, NULL);
diff -r 9f8e996a678d -r 4e367aa89895 xen/include/asm-ia64/hypercall.h
--- a/xen/include/asm-ia64/hypercall.h  Wed Mar 07 12:45:08 2007 -0700
+++ b/xen/include/asm-ia64/hypercall.h  Wed Mar 07 13:16:07 2007 -0700
@@ -22,6 +22,7 @@ vmx_do_mmu_update(
     u64 *pdone,
     u64 foreigndom);
 
-#define arch_do_vcpu_op(cmd, vcpu, arg) (-ENOSYS)
+extern long
+arch_do_vcpu_op(int cmd, struct vcpu *v, XEN_GUEST_HANDLE(void) arg);
 
 #endif /* __ASM_IA64_HYPERCALL_H__ */

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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.