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

[Xen-changelog] [xen-unstable] [IA64][MINIOS] Fixed some big-endian bugs and add HYPERVISOR_suspend



# HG changeset patch
# User awilliam@xxxxxxxxxxxx
# Date 1174405905 21600
# Node ID 0fadd0476e036e4439b08f2df740bcc1ca6bdb9d
# Parent  c07b1dc6dc6d3b8ee2836090510dcbdf3be4ad74
[IA64][MINIOS] Fixed some big-endian bugs and add HYPERVISOR_suspend

Signed-off-by: Dietmar Hahn <dietmar.hahn@xxxxxxxxxxxxxxxxxxx>
---
 extras/mini-os/arch/ia64/arch.mk             |   13 +++++++++++++
 extras/mini-os/arch/ia64/common.c            |    8 ++++++--
 extras/mini-os/arch/ia64/fw.S                |   21 +++++++++++++++++++++
 extras/mini-os/arch/ia64/mm.c                |    2 +-
 extras/mini-os/arch/ia64/xencomm.c           |   20 +++++++++++++++++---
 extras/mini-os/include/ia64/hypercall-ia64.h |    2 +-
 6 files changed, 59 insertions(+), 7 deletions(-)

diff -r c07b1dc6dc6d -r 0fadd0476e03 extras/mini-os/arch/ia64/arch.mk
--- a/extras/mini-os/arch/ia64/arch.mk  Tue Mar 20 09:32:24 2007 -0600
+++ b/extras/mini-os/arch/ia64/arch.mk  Tue Mar 20 09:51:45 2007 -0600
@@ -1,3 +1,6 @@ ARCH_CFLAGS := -mfixed-range=f2-f5,f12-f
+# Build for Big Endian?
+BIGENDIAN := n
+
 ARCH_CFLAGS := -mfixed-range=f2-f5,f12-f15,f32-f127 -mconstant-gp
 ARCH_CFLAGS += -O2
 ARCH_ASFLAGS := -x assembler-with-cpp
@@ -5,3 +8,13 @@ ARCH_ASFLAGS += -fno-builtin -fno-common
 ARCH_ASFLAGS += -fno-builtin -fno-common -fno-strict-aliasing -mconstant-gp
 
 ARCH_LDFLAGS = -warn-common
+
+# Next lines are for big endian code !
+ifeq ($(BIGENDIAN),y)
+ARCH_CFLAGS += -mbig-endian -Wa,-mbe -Wa,-mlp64
+ARCH_CFLAGS += -DBIG_ENDIAN
+ARCH_ASFLAGS += -Wa,-mbe
+ARCH_ASFLAGS += -DBIG_ENDIAN
+ARCH_LDFLAGS = -EB -d
+endif
+
diff -r c07b1dc6dc6d -r 0fadd0476e03 extras/mini-os/arch/ia64/common.c
--- a/extras/mini-os/arch/ia64/common.c Tue Mar 20 09:32:24 2007 -0600
+++ b/extras/mini-os/arch/ia64/common.c Tue Mar 20 09:51:45 2007 -0600
@@ -225,6 +225,7 @@ arch_print_info(void)
        major = minor >> 16;
        minor &= ~0xffffffff;
        printk("Running on Xen version: %d.%d\n", major, minor);
+#if 0
        printk("machine addr of shared_info_t  : 0x%lx\n",
               start_info.shared_info);
        printk("machine page number of shared page: 0x%lx\n",
@@ -235,5 +236,8 @@ arch_print_info(void)
               start_info.console.domU.mfn);
        printk("evtchn for console messages    : %d\n",
               start_info.console.domU.evtchn);
-       printk("xen_guest_cmdline              : %s\n", boot_cmd_line);
-}
+#endif
+       if(strlen(boot_cmd_line) > 0)
+               printk("xen_guest_cmdline              : %s\n", boot_cmd_line);
+}
+
diff -r c07b1dc6dc6d -r 0fadd0476e03 extras/mini-os/arch/ia64/fw.S
--- a/extras/mini-os/arch/ia64/fw.S     Tue Mar 20 09:32:24 2007 -0600
+++ b/extras/mini-os/arch/ia64/fw.S     Tue Mar 20 09:51:45 2007 -0600
@@ -33,6 +33,7 @@
 #include "ia64_cpu.h"
 #include "ia64_fpu.h"
 #include "offsets.h"
+#include "xen/xen.h"
 
 
 /*
@@ -517,3 +518,23 @@ ENTRY(__hypercall)
        br.ret.sptk.many b0
        ;;
 END(__hypercall)
+
+/*
+ * Stub for suspend.
+ * Just force the stacked registers to be written in memory.
+ */
+ENTRY(xencomm_arch_hypercall_suspend)
+       ;;
+       alloc   r20=ar.pfs,0,0,6,0
+       mov     r2=__HYPERVISOR_sched_op
+       ;;
+       /* We don't want to deal with RSE.  */
+       flushrs
+       mov     r33=r32
+       mov     r32=2           // SCHEDOP_shutdown
+       ;;
+       break   0x1000
+       ;;
+       br.ret.sptk.many b0
+END(xencomm_arch_hypercall_suspend)
+
diff -r c07b1dc6dc6d -r 0fadd0476e03 extras/mini-os/arch/ia64/mm.c
--- a/extras/mini-os/arch/ia64/mm.c     Tue Mar 20 09:32:24 2007 -0600
+++ b/extras/mini-os/arch/ia64/mm.c     Tue Mar 20 09:51:45 2007 -0600
@@ -127,7 +127,7 @@ map_frames(unsigned long* frames, unsign
 map_frames(unsigned long* frames, unsigned long n)
 {
        n = n;
-       return (void*) __va(frames[0] << PAGE_SHIFT);
+       return (void*) __va(SWAP(frames[0]) << PAGE_SHIFT);
 }
 
 void arch_init_p2m(unsigned long max_pfn)
diff -r c07b1dc6dc6d -r 0fadd0476e03 extras/mini-os/arch/ia64/xencomm.c
--- a/extras/mini-os/arch/ia64/xencomm.c        Tue Mar 20 09:32:24 2007 -0600
+++ b/extras/mini-os/arch/ia64/xencomm.c        Tue Mar 20 09:51:45 2007 -0600
@@ -171,13 +171,15 @@ xencommize_mini_grant_table_op(struct xe
                        return -EINVAL;
                rc = xencomm_create_mini
                        (xc_area, nbr_area,
-                        xen_guest_handle(setup->frame_list),
-                        setup->nr_frames
+                        (void*)SWAP((uint64_t)
+                                    xen_guest_handle(setup->frame_list)),
+                        SWAP(setup->nr_frames)
                         * sizeof(*xen_guest_handle(setup->frame_list)),
                         &desc1);
                if (rc)
                        return rc;
-               set_xen_guest_handle(setup->frame_list, (void *)desc1);
+               set_xen_guest_handle(setup->frame_list,
+                                    (void *)SWAP((uint64_t)desc1));
                break;
        }
        case GNTTABOP_dump_table:
@@ -254,3 +256,15 @@ HYPERVISOR_grant_table_op(unsigned int c
        return xencomm_mini_hypercall_grant_table_op(cmd, uop, count);
 }
 
+       /* In fw.S */
+extern int xencomm_arch_hypercall_suspend(struct xencomm_handle *arg);
+int
+HYPERVISOR_suspend(unsigned long srec)
+{
+        struct sched_shutdown arg;
+
+        arg.reason = (uint32_t)SWAP((uint32_t)SHUTDOWN_suspend);
+
+        return xencomm_arch_hypercall_suspend(xencomm_create_inline(&arg));
+}
+
diff -r c07b1dc6dc6d -r 0fadd0476e03 
extras/mini-os/include/ia64/hypercall-ia64.h
--- a/extras/mini-os/include/ia64/hypercall-ia64.h      Tue Mar 20 09:32:24 
2007 -0600
+++ b/extras/mini-os/include/ia64/hypercall-ia64.h      Tue Mar 20 09:51:45 
2007 -0600
@@ -138,7 +138,7 @@ xencomm_arch_event_channel_op(int cmd, v
        if (unlikely(rc == -ENOSYS)) {
                struct evtchn_op op;
 
-               op.cmd = cmd;
+               op.cmd = SWAP(cmd);
                memcpy(&op.u, arg, sizeof(op.u));
                rc = _hypercall1(int, event_channel_op_compat, &op);
        }

_______________________________________________
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®.