aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIan Campbell <ian.campbell@xensource.com>2007-05-15 17:54:48 +0100
committerIan Campbell <ian.campbell@xensource.com>2007-05-15 17:54:48 +0100
commitf32a69e5884d13d165fa381d43fe60790dfb4b7b (patch)
tree9faad2fe0f281093a3107f487dad3faeca6dd7a9
parentb794da2ef6f15b92f9eef09d67834842a7f6fc47 (diff)
downloadxen-f32a69e5884d13d165fa381d43fe60790dfb4b7b.tar.gz
xen-f32a69e5884d13d165fa381d43fe60790dfb4b7b.tar.bz2
xen-f32a69e5884d13d165fa381d43fe60790dfb4b7b.zip
[BUILDER] Propagate the native protocol ABI for a guest out of the
domain builder and in to python code. This knowledge will be useful to allow us to pre-seed the protocol field in a VBD entry in xenstore which will allow us to run older kernels in a 32on64 mixed environment. Signed-off-by: Ian Campbell <ian.campbell@xensource.com>
-rw-r--r--tools/libxc/xc_dom.h1
-rw-r--r--tools/libxc/xc_dom_x86.c4
-rw-r--r--tools/python/xen/lowlevel/xc/xc.c19
3 files changed, 20 insertions, 4 deletions
diff --git a/tools/libxc/xc_dom.h b/tools/libxc/xc_dom.h
index 7c00c45cc5..2a42b874fe 100644
--- a/tools/libxc/xc_dom.h
+++ b/tools/libxc/xc_dom.h
@@ -136,6 +136,7 @@ struct xc_dom_arch {
int (*vcpu) (struct xc_dom_image * dom, void *vcpu_ctxt);
char *guest_type;
+ char *native_protocol;
int page_shift;
int sizeof_pfn;
diff --git a/tools/libxc/xc_dom_x86.c b/tools/libxc/xc_dom_x86.c
index 97fd298d6b..c94dfe0ea8 100644
--- a/tools/libxc/xc_dom_x86.c
+++ b/tools/libxc/xc_dom_x86.c
@@ -19,6 +19,7 @@
#include <xen/foreign/x86_64.h>
#include <xen/hvm/hvm_info_table.h>
#include <xen/hvm/e820.h>
+#include <xen/io/protocols.h>
#include "xg_private.h"
#include "xc_dom.h"
@@ -589,6 +590,7 @@ static int vcpu_x86_64(struct xc_dom_image *dom, void *ptr)
static struct xc_dom_arch xc_dom_32 = {
.guest_type = "xen-3.0-x86_32",
+ .native_protocol = XEN_IO_PROTO_ABI_X86_32,
.page_shift = PAGE_SHIFT_X86,
.sizeof_pfn = 4,
.alloc_magic_pages = alloc_magic_pages,
@@ -600,6 +602,7 @@ static struct xc_dom_arch xc_dom_32 = {
};
static struct xc_dom_arch xc_dom_32_pae = {
.guest_type = "xen-3.0-x86_32p",
+ .native_protocol = XEN_IO_PROTO_ABI_X86_32,
.page_shift = PAGE_SHIFT_X86,
.sizeof_pfn = 4,
.alloc_magic_pages = alloc_magic_pages,
@@ -612,6 +615,7 @@ static struct xc_dom_arch xc_dom_32_pae = {
static struct xc_dom_arch xc_dom_64 = {
.guest_type = "xen-3.0-x86_64",
+ .native_protocol = XEN_IO_PROTO_ABI_X86_64,
.page_shift = PAGE_SHIFT_X86,
.sizeof_pfn = 8,
.alloc_magic_pages = alloc_magic_pages,
diff --git a/tools/python/xen/lowlevel/xc/xc.c b/tools/python/xen/lowlevel/xc/xc.c
index c40a900cb3..cf555f4469 100644
--- a/tools/python/xen/lowlevel/xc/xc.c
+++ b/tools/python/xen/lowlevel/xc/xc.c
@@ -407,6 +407,7 @@ static PyObject *pyxc_linux_build(XcObject *self,
unsigned long console_mfn = 0;
PyObject* elfnote_dict;
PyObject* elfnote = NULL;
+ PyObject* ret;
int i;
static char *kwd_list[] = { "domid", "store_evtchn", "memsize",
@@ -455,12 +456,22 @@ static PyObject *pyxc_linux_build(XcObject *self,
Py_DECREF(elfnote);
}
+ ret = Py_BuildValue("{s:i,s:i,s:N}",
+ "store_mfn", store_mfn,
+ "console_mfn", console_mfn,
+ "notes", elfnote_dict);
+
+ if ( dom->arch_hooks->native_protocol )
+ {
+ PyObject *native_protocol =
+ Py_BuildValue("s", dom->arch_hooks->native_protocol);
+ PyDict_SetItemString(ret, "native_protocol", native_protocol);
+ Py_DECREF(native_protocol);
+ }
+
xc_dom_release(dom);
- return Py_BuildValue("{s:i,s:i,s:N}",
- "store_mfn", store_mfn,
- "console_mfn", console_mfn,
- "notes", elfnote_dict);
+ return ret;
out:
xc_dom_release(dom);