ChangeSet 1.1662.1.11, 2005/06/06 20:22:19+01:00, cl349@xxxxxxxxxxxxxxxxxxxx
xen.h, image.py, XendDomainInfo.py, xc.c, xc_linux_build.c, xc.h:
Create store page for domains and plumb through to python.
XendDomainInfo.py:
Cleanup comments.
Signed-off-by: Mike Wray <mike.wray@xxxxxx>
Signed-off-by: Christian Limpach <Christian.Limpach@xxxxxxxxxxxx>
tools/libxc/xc.h | 4 +-
tools/libxc/xc_linux_build.c | 59 ++++++++++++++++++++------------
tools/python/xen/lowlevel/xc/xc.c | 25 +++++++------
tools/python/xen/xend/XendDomainInfo.py | 6 ++-
tools/python/xen/xend/image.py | 31 ++++++++--------
xen/include/public/xen.h | 25 +++++++------
6 files changed, 90 insertions(+), 60 deletions(-)
diff -Nru a/tools/libxc/xc.h b/tools/libxc/xc.h
--- a/tools/libxc/xc.h 2005-06-09 13:08:00 -04:00
+++ b/tools/libxc/xc.h 2005-06-09 13:08:00 -04:00
@@ -252,7 +252,9 @@
const char *cmdline,
unsigned int control_evtchn,
unsigned long flags,
- unsigned int vcpus);
+ unsigned int vcpus,
+ unsigned int store_evtchn,
+ unsigned long *store_mfn);
int
xc_plan9_build (int xc_handle,
diff -Nru a/tools/libxc/xc_linux_build.c b/tools/libxc/xc_linux_build.c
--- a/tools/libxc/xc_linux_build.c 2005-06-09 13:08:01 -04:00
+++ b/tools/libxc/xc_linux_build.c 2005-06-09 13:08:01 -04:00
@@ -40,17 +40,18 @@
struct domain_setup_info *dsi);
static int setup_guest(int xc_handle,
- u32 dom,
- char *image, unsigned long image_size,
- gzFile initrd_gfd, unsigned long initrd_len,
- unsigned long nr_pages,
- unsigned long *pvsi, unsigned long *pvke,
- vcpu_guest_context_t *ctxt,
- const char *cmdline,
- unsigned long shared_info_frame,
- unsigned int control_evtchn,
- unsigned long flags,
- unsigned int vcpus)
+ u32 dom,
+ char *image, unsigned long image_size,
+ gzFile initrd_gfd, unsigned long initrd_len,
+ unsigned long nr_pages,
+ unsigned long *pvsi, unsigned long *pvke,
+ unsigned long *pvss, vcpu_guest_context_t *ctxt,
+ const char *cmdline,
+ unsigned long shared_info_frame,
+ unsigned int control_evtchn,
+ unsigned long flags,
+ unsigned int vcpus,
+ unsigned int store_evtchn, unsigned long *store_mfn)
{
l1_pgentry_t *vl1tab=NULL, *vl1e=NULL;
l2_pgentry_t *vl2tab=NULL, *vl2e=NULL;
@@ -74,6 +75,8 @@
unsigned long vphysmap_end;
unsigned long vstartinfo_start;
unsigned long vstartinfo_end;
+ unsigned long vstoreinfo_start;
+ unsigned long vstoreinfo_end;
unsigned long vstack_start;
unsigned long vstack_end;
unsigned long vpt_start;
@@ -109,7 +112,10 @@
vpt_end = vpt_start + (nr_pt_pages * PAGE_SIZE);
vstartinfo_start = vpt_end;
vstartinfo_end = vstartinfo_start + PAGE_SIZE;
- vstack_start = vstartinfo_end;
+ /* Place store shared page after startinfo. */
+ vstoreinfo_start = vstartinfo_end;
+ vstoreinfo_end = vstartinfo_end + PAGE_SIZE;
+ vstack_start = vstoreinfo_end;
vstack_end = vstack_start + PAGE_SIZE;
v_end = (vstack_end + (1<<22)-1) & ~((1<<22)-1);
if ( (v_end - vstack_end) < (512 << 10) )
@@ -125,6 +131,7 @@
" Phys-Mach map: %08lx->%08lx\n"
" Page tables: %08lx->%08lx\n"
" Start info: %08lx->%08lx\n"
+ " Store page: %08lx->%08lx\n"
" Boot stack: %08lx->%08lx\n"
" TOTAL: %08lx->%08lx\n",
dsi.v_kernstart, dsi.v_kernend,
@@ -132,6 +139,7 @@
vphysmap_start, vphysmap_end,
vpt_start, vpt_end,
vstartinfo_start, vstartinfo_end,
+ vstoreinfo_start, vstoreinfo_end,
vstack_start, vstack_end,
dsi.v_start, v_end);
printf(" ENTRY ADDRESS: %08lx\n", dsi.v_kernentry);
@@ -261,6 +269,8 @@
start_info->nr_pt_frames = nr_pt_pages;
start_info->mfn_list = vphysmap_start;
start_info->domain_controller_evtchn = control_evtchn;
+ start_info->store_page = vstoreinfo_start;
+ start_info->store_evtchn = store_evtchn;
if ( initrd_len != 0 )
{
start_info->mod_start = vinitrd_start;
@@ -270,6 +280,9 @@
start_info->cmd_line[MAX_CMDLINE-1] = '\0';
munmap(start_info, PAGE_SIZE);
+ /* Tell our caller where we told domain store page was. */
+ *store_mfn = page_array[((vstoreinfo_start-dsi.v_start)>>PAGE_SHIFT)];
+
/* shared_info page starts its life empty. */
shared_info = xc_map_foreign_range(
xc_handle, dom, PAGE_SIZE, PROT_READ|PROT_WRITE, shared_info_frame);
@@ -291,6 +304,7 @@
free(page_array);
*pvsi = vstartinfo_start;
+ *pvss = vstack_start;
*pvke = dsi.v_kernentry;
return 0;
@@ -310,7 +324,9 @@
const char *cmdline,
unsigned int control_evtchn,
unsigned long flags,
- unsigned int vcpus)
+ unsigned int vcpus,
+ unsigned int store_evtchn,
+ unsigned long *store_mfn)
{
dom0_op_t launch_op, op;
int initrd_fd = -1;
@@ -320,7 +336,7 @@
unsigned long nr_pages;
char *image = NULL;
unsigned long image_size, initrd_size=0;
- unsigned long vstartinfo_start, vkern_entry;
+ unsigned long vstartinfo_start, vkern_entry, vstack_start;
if ( (nr_pages = xc_get_tot_pages(xc_handle, domid)) < 0 )
{
@@ -377,11 +393,12 @@
}
if ( setup_guest(xc_handle, domid, image, image_size,
- initrd_gfd, initrd_size, nr_pages,
- &vstartinfo_start, &vkern_entry,
- ctxt, cmdline,
- op.u.getdomaininfo.shared_info_frame,
- control_evtchn, flags, vcpus) < 0 )
+ initrd_gfd, initrd_size, nr_pages,
+ &vstartinfo_start, &vkern_entry,
+ &vstack_start, ctxt, cmdline,
+ op.u.getdomaininfo.shared_info_frame,
+ control_evtchn, flags, vcpus,
+ store_evtchn, store_mfn) < 0 )
{
ERROR("Error constructing guest OS");
goto error_out;
@@ -412,7 +429,7 @@
ctxt->user_regs.ss = FLAT_KERNEL_DS;
ctxt->user_regs.cs = FLAT_KERNEL_CS;
ctxt->user_regs.eip = vkern_entry;
- ctxt->user_regs.esp = vstartinfo_start + 2*PAGE_SIZE;
+ ctxt->user_regs.esp = vstack_start + PAGE_SIZE;
ctxt->user_regs.esi = vstartinfo_start;
ctxt->user_regs.eflags = 1 << 9; /* Interrupt Enable */
@@ -434,7 +451,7 @@
/* Ring 1 stack is the initial stack. */
ctxt->kernel_ss = FLAT_KERNEL_DS;
- ctxt->kernel_sp = vstartinfo_start + 2*PAGE_SIZE;
+ ctxt->kernel_sp = vstack_start + PAGE_SIZE;
/* No debugging. */
memset(ctxt->debugreg, 0, sizeof(ctxt->debugreg));
diff -Nru a/tools/python/xen/lowlevel/xc/xc.c
b/tools/python/xen/lowlevel/xc/xc.c
--- a/tools/python/xen/lowlevel/xc/xc.c 2005-06-09 13:08:00 -04:00
+++ b/tools/python/xen/lowlevel/xc/xc.c 2005-06-09 13:08:00 -04:00
@@ -260,25 +260,28 @@
{
XcObject *xc = (XcObject *)self;
- u32 dom;
+ u32 dom;
char *image, *ramdisk = NULL, *cmdline = "";
- int control_evtchn, flags = 0, vcpus = 1;
+ int flags = 0, vcpus = 1;
+ int control_evtchn, store_evtchn;
+ unsigned long store_mfn = 0;
- static char *kwd_list[] = { "dom", "control_evtchn",
- "image", "ramdisk", "cmdline", "flags",
"vcpus",
- NULL };
+ static char *kwd_list[] = { "dom", "control_evtchn", "store_evtchn",
+ "image", "ramdisk", "cmdline", "flags",
+ "vcpus", NULL };
- if ( !PyArg_ParseTupleAndKeywords(args, kwds, "iis|ssii", kwd_list,
- &dom, &control_evtchn,
- &image, &ramdisk, &cmdline, &flags,
&vcpus) )
+ if ( !PyArg_ParseTupleAndKeywords(args, kwds, "iiis|ssii", kwd_list,
+ &dom, &control_evtchn, &store_evtchn,
+ &image, &ramdisk, &cmdline, &flags,
+ &vcpus) )
return NULL;
if ( xc_linux_build(xc->xc_handle, dom, image,
- ramdisk, cmdline, control_evtchn, flags, vcpus) != 0 )
+ ramdisk, cmdline, control_evtchn, flags, vcpus,
+ store_evtchn, &store_mfn) != 0 )
return PyErr_SetFromErrno(xc_error);
- Py_INCREF(zero);
- return zero;
+ return Py_BuildValue("{s:i}", "store_mfn", store_mfn);
}
static PyObject *pyxc_plan9_build(PyObject *self,
diff -Nru a/tools/python/xen/xend/XendDomainInfo.py
b/tools/python/xen/xend/XendDomainInfo.py
--- a/tools/python/xen/xend/XendDomainInfo.py 2005-06-09 13:08:00 -04:00
+++ b/tools/python/xen/xend/XendDomainInfo.py 2005-06-09 13:08:00 -04:00
@@ -148,7 +148,7 @@
def _create(cls, uuid=None):
"""Create a vm object with a uuid.
- @param uuid uuid to use (generated if None)
+ @param uuid uuid to use
@return vm
"""
if uuid is None:
@@ -178,6 +178,7 @@
@param savedinfo: saved info from the domain DB
@param info: domain info from xc
+ @param uuid: uuid to use
@type info: xc domain dict
"""
vm = cls._create(uuid=uuid)
@@ -216,6 +217,7 @@
"""Create a domain and a VM object to do a restore.
@param config: domain configuration
+ @param uuid: uuid to use
"""
vm = cls._create(uuid=uuid)
dom = xc.domain_create()
@@ -239,6 +241,8 @@
self.image = None
self.channel = None
+ self.store_channel = None
+ self.store_mfs = None
self.controllers = {}
self.info = None
diff -Nru a/tools/python/xen/xend/image.py b/tools/python/xen/xend/image.py
--- a/tools/python/xen/xend/image.py 2005-06-09 13:08:00 -04:00
+++ b/tools/python/xen/xend/image.py 2005-06-09 13:08:00 -04:00
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|