From: Xiaofeng Ling <xiaofeng.ling@intel.com>
To: xen-devel <xen-devel@lists.xensource.com>
Subject: [PATCH][VT] patch make some share page can be accessed in vmx guest
Date: Mon, 05 Sep 2005 12:10:17 +0800 [thread overview]
Message-ID: <431BC529.1080304@intel.com> (raw)
This patch make some share page can be accessed in vmx guest
The share pages include shared_info, start_info, xen store share page
Also path store_evtchn, device_evtchn, control_evtchn to guest.
This patch are needed for para-driver in unmodified guest.
Signed-off-by: Xiaofeng Ling <xiaofeng.ling@intel.com>
Signed-off-by: Arun Sharma <arun.sharma@intel.com>
diff -r 23d8580d56b0 -r 2be69124cb06 tools/libxc/linux_boot_params.h
--- a/tools/libxc/linux_boot_params.h Fri Sep 2 18:23:57 2005
+++ b/tools/libxc/linux_boot_params.h Mon Sep 5 03:56:13 2005
@@ -18,6 +18,8 @@
#define E820_IO 16
#define E820_SHARED 17
#define E820_XENSTORE 18
+#define E820_STARTINFO 19
+#define E820_SHAREDINFO 20
u32 caching_attr; /* used by hypervisor */
#define MEMMAP_UC 0
diff -r 23d8580d56b0 -r 2be69124cb06 tools/libxc/xc_vmx_build.c
--- a/tools/libxc/xc_vmx_build.c Fri Sep 2 18:23:57 2005
+++ b/tools/libxc/xc_vmx_build.c Mon Sep 5 03:56:13 2005
@@ -62,7 +62,7 @@
mem_mapp->map[nr_map].caching_attr = MEMMAP_UC;
nr_map++;
-#define STATIC_PAGES 2 /* for ioreq_t and store_mfn */
+#define STATIC_PAGES 4 /* for ioreq_t and store_mfn and
start_info*/
/* Most of the ram goes here */
mem_mapp->map[nr_map].addr = 0x100000;
mem_mapp->map[nr_map].size = mem_size - 0x100000 -
STATIC_PAGES*PAGE_SIZE;
@@ -83,6 +83,24 @@
mem_mapp->map[nr_map].addr = mem_size - 2*PAGE_SIZE;
mem_mapp->map[nr_map].size = PAGE_SIZE;
mem_mapp->map[nr_map].type = E820_XENSTORE;
+ mem_mapp->map[nr_map].caching_attr = MEMMAP_WB;
+ nr_map++;
+
+ mem_mapp->map[nr_map].addr = mem_size - 3 * PAGE_SIZE;
+ mem_mapp->map[nr_map].size = PAGE_SIZE;
+ mem_mapp->map[nr_map].type = E820_SHAREDINFO;
+ mem_mapp->map[nr_map].caching_attr = MEMMAP_WB;
+ nr_map++;
+
+ mem_mapp->map[nr_map].addr = mem_size - 4 * PAGE_SIZE;
+ mem_mapp->map[nr_map].size = PAGE_SIZE;
+ mem_mapp->map[nr_map].type = E820_STARTINFO;
+ mem_mapp->map[nr_map].caching_attr = MEMMAP_WB;
+ nr_map++;
+
+ mem_mapp->map[nr_map].addr = mem_size - PAGE_SIZE;
+ mem_mapp->map[nr_map].size = PAGE_SIZE;
+ mem_mapp->map[nr_map].type = E820_SHARED;
mem_mapp->map[nr_map].caching_attr = MEMMAP_WB;
nr_map++;
@@ -227,6 +245,7 @@
unsigned long flags,
unsigned int vcpus,
unsigned int store_evtchn,
+ unsigned int device_evtchn,
unsigned long *store_mfn,
struct mem_map *mem_mapp
)
@@ -241,6 +260,7 @@
unsigned long l2tab;
unsigned long l1tab;
unsigned long count, i;
+ start_info_t *start_info;
shared_info_t *shared_info;
struct linux_boot_params * boot_paramsp;
__u16 * boot_gdtp;
@@ -262,6 +282,7 @@
unsigned long v_end;
unsigned long shared_page_frame = 0;
+ unsigned long startinfo_page_frame = 0;
shared_iopage_t *sp;
memset(&dsi, 0, sizeof(struct domain_setup_info));
@@ -289,7 +310,7 @@
/* memsize is in megabytes */
v_end = memsize << 20;
- vinitrd_end = v_end - PAGE_SIZE; /* leaving the top 4k
untouched for IO requests page use */
+ vinitrd_end = v_end - 4 * PAGE_SIZE; /* leaving the top 4k
untouched for IO requests page use */
vinitrd_start = vinitrd_end - initrd_len;
vinitrd_start = vinitrd_start & (~(PAGE_SIZE - 1));
@@ -368,6 +389,7 @@
l2tab = page_array[ppt_alloc++] << PAGE_SHIFT;
ctxt->ctrlreg[3] = l2tab;
+ page_array[((vpt_start - dsi.v_start)>>PAGE_SHIFT) - 3] =
shared_info_frame;
/* Initialise the page tables. */
if ( (vl2tab = xc_map_foreign_range(xc_handle, dom, PAGE_SIZE,
PROT_READ|PROT_WRITE,
@@ -530,7 +552,7 @@
/* If you need to create a special e820map, comment this line
and use mem-map.sxp */
build_e820map(mem_mapp, memsize << 20);
- *store_mfn = page_array[(v_end-2) >> PAGE_SHIFT];
+ *store_mfn = page_array[((vpt_start - dsi.v_start)>>PAGE_SHIFT) - 2];
#if defined (__i386__)
if (zap_mmio_ranges(xc_handle, dom, l2tab, mem_mapp) == -1)
#else
@@ -544,6 +566,8 @@
boot_paramsp->e820_map[i].type = mem_mapp->map[i].type;
if (mem_mapp->map[i].type == E820_SHARED)
shared_page_frame = (mem_mapp->map[i].addr >> PAGE_SHIFT);
+ else if (mem_mapp->map[i].type == E820_STARTINFO)
+ startinfo_page_frame = (mem_mapp->map[i].addr >> PAGE_SHIFT);
}
munmap(boot_paramsp, PAGE_SIZE);
@@ -575,9 +599,22 @@
page_array[shared_page_frame])) == 0)
goto error_out;
memset(sp, 0, PAGE_SIZE);
- sp->sp_global.eport = control_evtchn;
+ sp->sp_global.eport = device_evtchn;
munmap(sp, PAGE_SIZE);
+ start_info = xc_map_foreign_range(
+ xc_handle, dom, PAGE_SIZE, PROT_READ|PROT_WRITE,
+ page_array[startinfo_page_frame]);
+ memset(start_info, 0, PAGE_SIZE);
+ start_info->nr_pages = nr_pages;
+ start_info->shared_info = shared_info_frame << PAGE_SHIFT;
+ start_info->flags = flags;
+ start_info->pt_base = vpt_start;
+ start_info->nr_pt_frames = nr_pt_pages;
+ start_info->domain_controller_evtchn = control_evtchn;
+ start_info->store_mfn = *store_mfn;
+ start_info->store_evtchn = store_evtchn;
+ munmap(start_info, PAGE_SIZE);
/*
* Pin down l2tab addr as page dir page - causes hypervisor to provide
* correct protection for the page
@@ -658,6 +695,7 @@
unsigned long flags,
unsigned int vcpus,
unsigned int store_evtchn,
+ unsigned int device_evtchn,
unsigned long *store_mfn)
{
dom0_op_t launch_op, op;
@@ -733,7 +771,8 @@
initrd_gfd, initrd_size, nr_pages,
ctxt, cmdline,
op.u.getdomaininfo.shared_info_frame,
- control_evtchn, flags, vcpus, store_evtchn,
store_mfn,
+ control_evtchn, flags, vcpus, store_evtchn,
+ device_evtchn, store_mfn,
mem_mapp) < 0 )
{
ERROR("Error constructing guest OS");
diff -r 23d8580d56b0 -r 2be69124cb06 tools/libxc/xenguest.h
--- a/tools/libxc/xenguest.h Fri Sep 2 18:23:57 2005
+++ b/tools/libxc/xenguest.h Mon Sep 5 03:56:13 2005
@@ -63,6 +63,7 @@
unsigned long flags,
unsigned int vcpus,
unsigned int store_evtchn,
+ unsigned int device_evtchn,
unsigned long *store_mfn);
#endif
diff -r 23d8580d56b0 -r 2be69124cb06 tools/python/xen/lowlevel/xc/xc.c
--- a/tools/python/xen/lowlevel/xc/xc.c Fri Sep 2 18:23:57 2005
+++ b/tools/python/xen/lowlevel/xc/xc.c Mon Sep 5 03:56:13 2005
@@ -306,7 +306,7 @@
u32 dom;
char *image, *ramdisk = NULL, *cmdline = "";
PyObject *memmap;
- int control_evtchn, store_evtchn;
+ int control_evtchn, store_evtchn, device_evtchn;
int flags = 0, vcpus = 1;
int numItems, i;
int memsize;
@@ -314,13 +314,13 @@
unsigned long store_mfn = 0;
static char *kwd_list[] = { "dom", "control_evtchn", "store_evtchn",
- "memsize", "image", "memmap",
+ "device_evtchn", "memsize", "image",
"memmap",
"ramdisk", "cmdline", "flags",
"vcpus", NULL };
- if ( !PyArg_ParseTupleAndKeywords(args, kwds, "iiiisO!|ssii",
kwd_list,
+ if ( !PyArg_ParseTupleAndKeywords(args, kwds, "iiiiisO!|ssii",
kwd_list,
&dom, &control_evtchn,
&store_evtchn,
- &memsize,
+ &device_evtchn, &memsize,
&image, &PyList_Type, &memmap,
&ramdisk, &cmdline, &flags, &vcpus) )
return NULL;
@@ -375,7 +375,7 @@
if ( xc_vmx_build(xc->xc_handle, dom, memsize, image, &mem_map,
ramdisk, cmdline, control_evtchn, flags,
- vcpus, store_evtchn, &store_mfn) != 0 )
+ vcpus, store_evtchn, device_evtchn, &store_mfn)
!= 0 )
return PyErr_SetFromErrno(xc_error);
return Py_BuildValue("{s:i}", "store_mfn", store_mfn);
diff -r 23d8580d56b0 -r 2be69124cb06 tools/python/xen/xend/image.py
--- a/tools/python/xen/xend/image.py Fri Sep 2 18:23:57 2005
+++ b/tools/python/xen/xend/image.py Mon Sep 5 03:56:13 2005
@@ -302,8 +302,9 @@
store_evtchn = 0
ret = xc.vmx_build(dom = self.vm.getDomain(),
image = self.kernel,
- control_evtchn = self.device_channel.port2,
+ control_evtchn =
self.vm.channel.getRemotePort(),
store_evtchn = store_evtchn,
+ device_evtchn = self.device_channel.port2,
memsize = self.vm.memory,
memmap = self.memmap_value,
cmdline = self.cmdline,
reply other threads:[~2005-09-05 4:10 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=431BC529.1080304@intel.com \
--to=xiaofeng.ling@intel.com \
--cc=xen-devel@lists.xensource.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.