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] Add hypercall continuation support, or else dom_mem_op m

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] Add hypercall continuation support, or else dom_mem_op may fail.
From: Xen patchbot -unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Wed, 03 Aug 2005 05:26:28 -0400
Delivery-date: Wed, 03 Aug 2005 09:28:47 +0000
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/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 fred@xxxxxxxxxxxxxxxxxxxxx
# Node ID b6803bdaa95ae98b0a5be63b28788f78b2b32072
# Parent  7e5868cb1b915a3f0788191d3b2806bcebac54de
Add hypercall continuation support, or else dom_mem_op may fail.

Signed-off-by Kevin Tian <kevin.tian@xxxxxxxxx>

diff -r 7e5868cb1b91 -r b6803bdaa95a xen/arch/ia64/vmx_hypercall.c
--- a/xen/arch/ia64/vmx_hypercall.c     Tue Aug  2 10:08:00 2005
+++ b/xen/arch/ia64/vmx_hypercall.c     Tue Aug  2 10:09:24 2005
@@ -29,6 +29,7 @@
 #include <asm/regionreg.h>
 #include <asm/page.h>
 #include <xen/mm.h>
+#include <xen/multicall.h>
 
 
 void hyper_not_support(void)
@@ -49,6 +50,42 @@
     ret=do_mmu_update((mmu_update_t*)r32,r33,r34,r35);
     vmx_vcpu_set_gr(vcpu, 8, ret, 0);
     vmx_vcpu_increment_iip(vcpu);
+}
+
+unsigned long __hypercall_create_continuation(
+    unsigned int op, unsigned int nr_args, ...)
+{
+    struct mc_state *mcs = &mc_state[smp_processor_id()];
+    VCPU *vcpu = current;
+    struct cpu_user_regs *regs = vcpu_regs(vcpu);
+    unsigned int i;
+    va_list args;
+
+    va_start(args, nr_args);
+    if ( test_bit(_MCSF_in_multicall, &mcs->flags) ) {
+       panic("PREEMPT happen in multicall\n"); // Not support yet
+    } else {
+       vmx_vcpu_set_gr(vcpu, 15, op, 0);
+       for ( i = 0; i < nr_args; i++) {
+           switch (i) {
+           case 0: vmx_vcpu_set_gr(vcpu, 16, va_arg(args, unsigned long), 0);
+                   break;
+           case 1: vmx_vcpu_set_gr(vcpu, 17, va_arg(args, unsigned long), 0);
+                   break;
+           case 2: vmx_vcpu_set_gr(vcpu, 18, va_arg(args, unsigned long), 0);
+                   break;
+           case 3: vmx_vcpu_set_gr(vcpu, 19, va_arg(args, unsigned long), 0);
+                   break;
+           case 4: vmx_vcpu_set_gr(vcpu, 20, va_arg(args, unsigned long), 0);
+                   break;
+           default: panic("Too many args for hypercall continuation\n");
+                   break;
+           }
+       }
+    }
+    vcpu->arch.hypercall_continuation = 1;
+    va_end(args);
+    return op;
 }
 
 void hyper_dom_mem_op(void)
@@ -65,7 +102,13 @@
     printf("do_dom_mem return value: %lx\n", ret);
     vmx_vcpu_set_gr(vcpu, 8, ret, 0);
 
-    vmx_vcpu_increment_iip(vcpu);
+    /* Hard to define a special return value to indicate hypercall restart.
+     * So just add a new mark, which is SMP safe
+     */
+    if (vcpu->arch.hypercall_continuation == 1)
+       vcpu->arch.hypercall_continuation = 0;
+    else
+       vmx_vcpu_increment_iip(vcpu);
 }
 
 
diff -r 7e5868cb1b91 -r b6803bdaa95a xen/arch/ia64/xenmisc.c
--- a/xen/arch/ia64/xenmisc.c   Tue Aug  2 10:08:00 2005
+++ b/xen/arch/ia64/xenmisc.c   Tue Aug  2 10:09:24 2005
@@ -103,11 +103,13 @@
 }
 #endif
 
+#ifndef CONFIG_VTI
 unsigned long __hypercall_create_continuation(
        unsigned int op, unsigned int nr_args, ...)
 {
        printf("__hypercall_create_continuation: not implemented!!!\n");
 }
+#endif
 
 ///////////////////////////////
 
diff -r 7e5868cb1b91 -r b6803bdaa95a xen/include/asm-ia64/domain.h
--- a/xen/include/asm-ia64/domain.h     Tue Aug  2 10:08:00 2005
+++ b/xen/include/asm-ia64/domain.h     Tue Aug  2 10:09:24 2005
@@ -88,6 +88,7 @@
     thash_cb_t *vtlb;
     char irq_new_pending;
     char irq_new_condition;    // vpsr.i/vtpr change, check for pending VHPI
+    char hypercall_continuation;
     //for phycial  emulation
     unsigned long old_rsc;
     int mode_flags;

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] Add hypercall continuation support, or else dom_mem_op may fail., Xen patchbot -unstable <=