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

[Xen-changelog] [xen-unstable] Merge



# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1281116102 -3600
# Node ID fe930e1b2ce8f205fb368d0cc86876cc54d761a9
# Parent  cd606ea8f96351ce48ce4667e4e48b8edf3c19de
# Parent  6b28b2dac7dd4a78585e43ac901e52b4ebe94387
Merge
---
 tools/libxc/xc_domain_restore.c |   27 +++++++++++++++++++++++++++
 tools/libxc/xc_domain_save.c    |   11 +++++++++++
 tools/libxc/xc_hvm_build.c      |    5 ++++-
 tools/libxl/libxl_dom.c         |    2 +-
 tools/libxl/libxl_internal.h    |    3 ++-
 tools/libxl/libxl_utils.c       |   11 +++++++----
 tools/libxl/xenguest.c          |    5 ++++-
 tools/libxl/xl_cmdimpl.c        |    3 +++
 xen/include/public/hvm/params.h |    6 +++++-
 9 files changed, 64 insertions(+), 9 deletions(-)

diff -r cd606ea8f963 -r fe930e1b2ce8 tools/libxc/xc_domain_restore.c
--- a/tools/libxc/xc_domain_restore.c   Fri Aug 06 16:49:16 2010 +0100
+++ b/tools/libxc/xc_domain_restore.c   Fri Aug 06 18:35:02 2010 +0100
@@ -640,6 +640,7 @@ typedef struct {
     uint64_t vcpumap;
     uint64_t identpt;
     uint64_t vm86_tss;
+    uint64_t console_pfn;
 } pagebuf_t;
 
 static int pagebuf_init(pagebuf_t* buf)
@@ -737,6 +738,16 @@ static int pagebuf_get_one(xc_interface 
             return -1;
         }
         return pagebuf_get_one(xch, ctx, buf, fd, dom);
+    } else if (count == -8 ) {
+        /* Skip padding 4 bytes then read the console pfn location. */
+        if ( read_exact(fd, &buf->console_pfn, sizeof(uint32_t)) ||
+             read_exact(fd, &buf->console_pfn, sizeof(uint64_t)) )
+        {
+            PERROR("error read the address of the console pfn");
+            return -1;
+        }
+        // DPRINTF("console pfn location: %llx\n", buf->console_pfn);
+        return pagebuf_get_one(xch, ctx, buf, fd, dom);
     } else if ( (count > MAX_BATCH_SIZE) || (count < 0) ) {
         ERROR("Max batch size exceeded (%d). Giving up.", count);
         errno = EMSGSIZE;
@@ -1055,6 +1066,7 @@ int xc_domain_restore(xc_interface *xch,
     pagebuf_t pagebuf;
     tailbuf_t tailbuf, tmptail;
     void* vcpup;
+    uint64_t console_pfn = 0;
 
     static struct restore_ctx _ctx = {
         .live_p2m = NULL,
@@ -1207,6 +1219,8 @@ int xc_domain_restore(xc_interface *xch,
                 xc_set_hvm_param(xch, dom, HVM_PARAM_IDENT_PT, 
pagebuf.identpt);
             if ( pagebuf.vm86_tss )
                 xc_set_hvm_param(xch, dom, HVM_PARAM_VM86_TSS, 
pagebuf.vm86_tss);
+            if ( pagebuf.console_pfn )
+                console_pfn = pagebuf.console_pfn;
             break;  /* our work here is done */
         }
 
@@ -1717,6 +1731,19 @@ int xc_domain_restore(xc_interface *xch,
     }
     *store_mfn = tailbuf.u.hvm.magicpfns[2];
 
+    if ( console_pfn ) {
+        if ( xc_clear_domain_page(xch, dom, console_pfn) ) {
+            PERROR("error zeroing console page");
+            goto out;
+        }
+        if ( (frc = xc_set_hvm_param(xch, dom, 
+                                    HVM_PARAM_CONSOLE_PFN, console_pfn)) ) {
+            PERROR("error setting HVM param: %i", frc);
+            goto out;
+        }
+        *console_mfn = console_pfn;
+    }
+
     frc = xc_domain_hvm_setcontext(xch, dom, tailbuf.u.hvm.hvmbuf,
                                    tailbuf.u.hvm.reclen);
     if ( frc )
diff -r cd606ea8f963 -r fe930e1b2ce8 tools/libxc/xc_domain_save.c
--- a/tools/libxc/xc_domain_save.c      Fri Aug 06 16:49:16 2010 +0100
+++ b/tools/libxc/xc_domain_save.c      Fri Aug 06 18:35:02 2010 +0100
@@ -1587,6 +1587,17 @@ int xc_domain_save(xc_interface *xch, in
             PERROR("Error when writing the vm86 TSS for guest");
             goto out;
         }
+
+        chunk.id = -8;
+        xc_get_hvm_param(xch, dom, HVM_PARAM_CONSOLE_PFN,
+                         (unsigned long *)&chunk.data);
+
+        if ( (chunk.data != 0) &&
+             wrexact(io_fd, &chunk, sizeof(chunk)) )
+        {
+            PERROR("Error when writing the console pfn for guest");
+            goto out;
+        }
     }
 
     /* Zero terminate */
diff -r cd606ea8f963 -r fe930e1b2ce8 tools/libxc/xc_hvm_build.c
--- a/tools/libxc/xc_hvm_build.c        Fri Aug 06 16:49:16 2010 +0100
+++ b/tools/libxc/xc_hvm_build.c        Fri Aug 06 18:35:02 2010 +0100
@@ -28,7 +28,8 @@
 #define SPECIALPAGE_XENSTORE 1
 #define SPECIALPAGE_IOREQ    2
 #define SPECIALPAGE_IDENT_PT 3
-#define NR_SPECIAL_PAGES     4
+#define SPECIALPAGE_CONSOLE  4
+#define NR_SPECIAL_PAGES     5
 #define special_pfn(x) (0xff000u - NR_SPECIAL_PAGES + (x))
 
 static void build_hvm_info(void *hvm_info_page, uint64_t mem_size)
@@ -354,6 +355,8 @@ static int setup_guest(xc_interface *xch
                      special_pfn(SPECIALPAGE_BUFIOREQ));
     xc_set_hvm_param(xch, dom, HVM_PARAM_IOREQ_PFN,
                      special_pfn(SPECIALPAGE_IOREQ));
+    xc_set_hvm_param(xch, dom, HVM_PARAM_CONSOLE_PFN,
+                     special_pfn(SPECIALPAGE_CONSOLE));
 
     /*
      * Identity-map page table is required for running with CR0.PG=0 when
diff -r cd606ea8f963 -r fe930e1b2ce8 tools/libxl/libxl_dom.c
--- a/tools/libxl/libxl_dom.c   Fri Aug 06 16:49:16 2010 +0100
+++ b/tools/libxl/libxl_dom.c   Fri Aug 06 18:35:02 2010 +0100
@@ -237,7 +237,7 @@ int build_hvm(libxl_ctx *ctx, uint32_t d
         return ERROR_FAIL;
     }
     ret = hvm_build_set_params(ctx->xch, domid, info, state->store_port,
-                               &state->store_mfn);
+                               &state->store_mfn, state->console_port, 
&state->console_mfn);
     if (ret) {
         XL_LOG_ERRNOVAL(ctx, XL_LOG_ERROR, ret, "hvm build set params failed");
         return ERROR_FAIL;
diff -r cd606ea8f963 -r fe930e1b2ce8 tools/libxl/libxl_internal.h
--- a/tools/libxl/libxl_internal.h      Fri Aug 06 16:49:16 2010 +0100
+++ b/tools/libxl/libxl_internal.h      Fri Aug 06 18:35:02 2010 +0100
@@ -173,7 +173,8 @@ int libxl_device_pci_reset(libxl_ctx *ct
 /* from xenguest (helper */
 int hvm_build_set_params(xc_interface *handle, uint32_t domid,
                          libxl_domain_build_info *info,
-                         int store_evtchn, unsigned long *store_mfn);
+                         int store_evtchn, unsigned long *store_mfn,
+                         int console_evtchn, unsigned long *console_mfn);
 
 /* xl_exec */
 
diff -r cd606ea8f963 -r fe930e1b2ce8 tools/libxl/libxl_utils.c
--- a/tools/libxl/libxl_utils.c Fri Aug 06 16:49:16 2010 +0100
+++ b/tools/libxl/libxl_utils.c Fri Aug 06 18:35:02 2010 +0100
@@ -101,6 +101,7 @@ int libxl_name_to_poolid(libxl_ctx *ctx,
     int i, nb_pools;
     char *poolname;
     libxl_poolinfo *poolinfo;
+    int ret = -1;
 
     poolinfo = libxl_list_pool(ctx, &nb_pools);
     if (!poolinfo)
@@ -112,10 +113,12 @@ int libxl_name_to_poolid(libxl_ctx *ctx,
             continue;
         if (strcmp(poolname, name) == 0) {
             *poolid = poolinfo[i].poolid;
-            return 0;
-        }
-    }
-    return -1;
+            ret = 0;
+            break;
+        }
+    }
+    free(poolinfo);
+    return ret;
 }
 
 int libxl_get_stubdom_id(libxl_ctx *ctx, int guest_domid)
diff -r cd606ea8f963 -r fe930e1b2ce8 tools/libxl/xenguest.c
--- a/tools/libxl/xenguest.c    Fri Aug 06 16:49:16 2010 +0100
+++ b/tools/libxl/xenguest.c    Fri Aug 06 18:35:02 2010 +0100
@@ -23,7 +23,8 @@
 
 int hvm_build_set_params(xc_interface *handle, uint32_t domid,
                          libxl_domain_build_info *info,
-                         int store_evtchn, unsigned long *store_mfn)
+                         int store_evtchn, unsigned long *store_mfn,
+                         int console_evtchn, unsigned long *console_mfn)
 {
     struct hvm_info_table *va_hvm;
     uint8_t *va_map, sum;
@@ -46,6 +47,7 @@ int hvm_build_set_params(xc_interface *h
     munmap(va_map, XC_PAGE_SIZE);
 
     xc_get_hvm_param(handle, domid, HVM_PARAM_STORE_PFN, store_mfn);
+    xc_get_hvm_param(handle, domid, HVM_PARAM_CONSOLE_PFN, console_mfn);
     xc_set_hvm_param(handle, domid, HVM_PARAM_PAE_ENABLED, info->u.hvm.pae);
 #if defined(__i386__) || defined(__x86_64__)
     xc_set_hvm_param(handle, domid, HVM_PARAM_VIRIDIAN, info->u.hvm.viridian);
@@ -54,5 +56,6 @@ int hvm_build_set_params(xc_interface *h
     xc_set_hvm_param(handle, domid, HVM_PARAM_TIMER_MODE, (unsigned long) 
info->u.hvm.timer_mode);
     xc_set_hvm_param(handle, domid, HVM_PARAM_VPT_ALIGN, (unsigned long) 
info->u.hvm.vpt_align);
     xc_set_hvm_param(handle, domid, HVM_PARAM_STORE_EVTCHN, store_evtchn);
+    xc_set_hvm_param(handle, domid, HVM_PARAM_CONSOLE_EVTCHN, console_evtchn);
     return 0;
 }
diff -r cd606ea8f963 -r fe930e1b2ce8 tools/libxl/xl_cmdimpl.c
--- a/tools/libxl/xl_cmdimpl.c  Fri Aug 06 16:49:16 2010 +0100
+++ b/tools/libxl/xl_cmdimpl.c  Fri Aug 06 18:35:02 2010 +0100
@@ -1433,6 +1433,9 @@ start:
         }
     }
     if (d_config.c_info.hvm) {
+        init_console_info(&console, 0, &state);
+        console.domid = domid;
+        libxl_device_console_add(&ctx, domid, &console);
         dm_info.domid = domid;
         MUST( libxl_create_device_model(&ctx, &dm_info,
                                         d_config.disks, d_config.num_disks,
diff -r cd606ea8f963 -r fe930e1b2ce8 xen/include/public/hvm/params.h
--- a/xen/include/public/hvm/params.h   Fri Aug 06 16:49:16 2010 +0100
+++ b/xen/include/public/hvm/params.h   Fri Aug 06 18:35:02 2010 +0100
@@ -109,6 +109,10 @@
 /* Boolean: Enable aligning all periodic vpts to reduce interrupts */
 #define HVM_PARAM_VPT_ALIGN    16
 
-#define HVM_NR_PARAMS          17
+/* Console debug shared memory ring and event channel */
+#define HVM_PARAM_CONSOLE_PFN    17
+#define HVM_PARAM_CONSOLE_EVTCHN 18
+
+#define HVM_NR_PARAMS          19
 
 #endif /* __XEN_PUBLIC_HVM_PARAMS_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®.