To allow kernel to handle radically different hypervisors in the future,
I thought a magic field in the start_info might be useful. I just chose
"Xen-<major>.<minor>", but feel free to change it.
Signed-off-by: Rusty Russell <rusty@xxxxxxxxxxxxxxx> (authored)
diff -r 94cee9a918de tools/libxc/xc_linux_build.c
--- a/tools/libxc/xc_linux_build.c Sat Oct 22 07:35:03 2005
+++ b/tools/libxc/xc_linux_build.c Mon Oct 24 17:23:24 2005
@@ -350,6 +350,8 @@
start_info = xc_map_foreign_range(
xc_handle, dom, PAGE_SIZE, PROT_READ|PROT_WRITE, page_array[0]);
memset(start_info, 0, sizeof(*start_info));
+ rc = xc_version(xc_handle, XENVER_version, NULL);
+ sprintf(start_info->magic, "Xen-%i.%i", rc >> 16, rc & (0xFFFF));
start_info->flags = flags;
start_info->store_mfn = nr_pages - 2;
start_info->store_evtchn = store_evtchn;
@@ -624,6 +626,8 @@
xc_handle, dom, PAGE_SIZE, PROT_READ|PROT_WRITE,
page_array[(vstartinfo_start-dsi.v_start)>>PAGE_SHIFT]);
memset(start_info, 0, sizeof(*start_info));
+ rc = xc_version(xc_handle, XENVER_version, NULL);
+ sprintf(start_info->magic, "Xen-%i.%i", rc >> 16, rc & (0xFFFF));
start_info->nr_pages = nr_pages;
start_info->shared_info = shared_info_frame << PAGE_SHIFT;
start_info->flags = flags;
diff -r 94cee9a918de xen/arch/ia64/xen/domain.c
--- a/xen/arch/ia64/xen/domain.c Sat Oct 22 07:35:03 2005
+++ b/xen/arch/ia64/xen/domain.c Mon Oct 24 17:23:24 2005
@@ -28,6 +28,7 @@
#include <xen/event.h>
//#include <xen/shadow.h>
#include <xen/console.h>
+#include <xen/compile.h>
#include <xen/elf.h>
//#include <asm/page.h>
@@ -930,6 +931,7 @@
si = (start_info_t *)alloc_xenheap_page();
memset(si, 0, PAGE_SIZE);
d->shared_info->arch.start_info_pfn = __pa(si) >> PAGE_SHIFT;
+ sprintf(si->magic, "Xen-%i.%i", XEN_VERSION, XEN_SUBVERSION);
#if 0
si->nr_pages = d->tot_pages;
diff -r 94cee9a918de xen/arch/x86/domain_build.c
--- a/xen/arch/x86/domain_build.c Sat Oct 22 07:35:03 2005
+++ b/xen/arch/x86/domain_build.c Mon Oct 24 17:23:24 2005
@@ -15,6 +15,7 @@
#include <xen/elf.h>
#include <xen/kernel.h>
#include <xen/domain.h>
+#include <xen/compile.h>
#include <asm/regs.h>
#include <asm/system.h>
#include <asm/io.h>
@@ -602,6 +603,7 @@
si->pt_base = vpt_start;
si->nr_pt_frames = nr_pt_pages;
si->mfn_list = vphysmap_start;
+ sprintf(si->magic, "Xen-%i.%i", XEN_VERSION, XEN_SUBVERSION);
/* Write the phys->machine and machine->phys table entries. */
for ( pfn = 0; pfn < d->tot_pages; pfn++ )
diff -r 94cee9a918de xen/include/public/xen.h
--- a/xen/include/public/xen.h Sat Oct 22 07:35:03 2005
+++ b/xen/include/public/xen.h Mon Oct 24 17:23:24 2005
@@ -410,6 +410,7 @@
#define MAX_GUEST_CMDLINE 1024
typedef struct start_info {
/* THE FOLLOWING ARE FILLED IN BOTH ON INITIAL BOOT AND ON RESUME. */
+ char magic[32]; /* "Xen-<version>.<subversion>". */
unsigned long nr_pages; /* Total pages allocated to this domain. */
unsigned long shared_info; /* MACHINE address of shared info struct. */
uint32_t flags; /* SIF_xxx flags. */
--
A bad analogy is like a leaky screwdriver -- Richard Braakman
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|