ChangeSet 1.1365, 2005/03/24 15:16:25-07:00, djm@xxxxxxxxxxxxxxx
xensetup.c, domain.c, config.h, hypercall.c:
Add (tmp) domain loading hypercalls
arch/ia64/domain.c | 52 ++++++++++++++++++++++++++++++++++++++--------
arch/ia64/hypercall.c | 13 +++++++++--
arch/ia64/xensetup.c | 3 ++
include/asm-ia64/config.h | 1
4 files changed, 59 insertions(+), 10 deletions(-)
diff -Nru a/xen/arch/ia64/domain.c b/xen/arch/ia64/domain.c
--- a/xen/arch/ia64/domain.c 2005-03-25 19:05:55 -05:00
+++ b/xen/arch/ia64/domain.c 2005-03-25 19:05:55 -05:00
@@ -38,6 +38,12 @@
unsigned long dom0_size = 512*1024*1024; //FIXME: Should be configurable
//FIXME: alignment should be 256MB, lest Linux use a 256MB page size
unsigned long dom0_align = 64*1024*1024;
+#ifdef DOMU_BUILD_STAGING
+unsigned long domU_staging_size = 32*1024*1024; //FIXME: Should be configurable
+unsigned long domU_staging_start;
+unsigned long domU_staging_align = 64*1024;
+unsigned long *domU_staging_area;
+#endif
// initialized by arch/ia64/setup.c:find_initrd()
unsigned long initrd_start = 0, initrd_end = 0;
@@ -542,6 +548,37 @@
}
+#ifdef DOMU_BUILD_STAGING
+void alloc_domU_staging(void)
+{
+ domU_staging_size = 32*1024*1024; //FIXME: Should be configurable
+ printf("alloc_domU_staging: starting (initializing %d
MB...)\n",domU_staging_size/(1024*1024));
+ domU_staging_start=
alloc_boot_pages(domU_staging_size,domU_staging_align);
+ if (!domU_staging_size) {
+ printf("alloc_domU_staging: can't allocate, spinning...\n");
+ while(1);
+ }
+ else domU_staging_area = (unsigned long *)__va(domU_staging_start);
+ printf("alloc_domU_staging:
domU_staging_start=%p\n",domU_staging_start);
+
+}
+
+unsigned long
+domU_staging_write_32(unsigned long at, unsigned long a, unsigned long b,
+ unsigned long c, unsigned long d)
+{
+ if (at + 32 > domU_staging_size) return -1;
+ if (at & 0x1f) return -1;
+ at >>= 5;
+ domU_staging_area[at++] = a;
+ domU_staging_area[at++] = b;
+ domU_staging_area[at++] = c;
+ domU_staging_area[at] = d;
+ return 0;
+
+}
+#endif
+
int construct_dom0(struct domain *d,
unsigned long image_start, unsigned long image_len,
unsigned long initrd_start, unsigned long initrd_len,
@@ -722,7 +759,7 @@
}
// FIXME: When dom0 can construct domains, this goes away (or is rewritten)
-int construct_domN(struct domain *d,
+int construct_domU(struct domain *d,
unsigned long image_start, unsigned long image_len,
unsigned long initrd_start, unsigned long initrd_len,
char *cmdline)
@@ -774,20 +811,19 @@
}
// FIXME: When dom0 can construct domains, this goes away (or is rewritten)
-int launch_domainN(unsigned long start, unsigned long len,
- unsigned long initrd_start, unsigned long initrd_len,
- char *cmdline)
+int launch_domainU(unsigned long size)
{
static int next = 100; // FIXME
struct domain *d = do_createdomain(next,0);
if (!d) {
- printf("launch_domainN: couldn't create\n");
+ printf("launch_domainU: couldn't create\n");
return 1;
}
- if (construct_domN(d, start, len, 0, 0, 0)) {
- printf("launch_domainN: couldn't construct(id=%d,%lx,%lx)\n",
- d->id,start,len);
+ else next++;
+ if (construct_domU(d, (unsigned long)domU_staging_area, size,0,0,0)) {
+ printf("launch_domainU: couldn't construct(id=%d,%lx,%lx)\n",
+ d->id,domU_staging_area,size);
return 2;
}
domain_unpause_by_systemcontroller(d);
diff -Nru a/xen/arch/ia64/hypercall.c b/xen/arch/ia64/hypercall.c
--- a/xen/arch/ia64/hypercall.c 2005-03-25 19:05:55 -05:00
+++ b/xen/arch/ia64/hypercall.c 2005-03-25 19:05:55 -05:00
@@ -89,10 +89,19 @@
vcpu_get_gr(ed,32),
vcpu_get_gr(ed,33));
break;
+#ifdef DOMU_BUILD_STAGING
case 0xfffd: // test dummy hypercall
- regs->r8 = launch_domainN(
+ regs->r8 = launch_domainU(
+ vcpu_get_gr(ed,32));
+ break;
+ case 0xfffc: // test dummy hypercall
+ regs->r8 = domU_staging_write_32(
vcpu_get_gr(ed,32),
- vcpu_get_gr(ed,33), 0, 0, 0);
+ vcpu_get_gr(ed,33),
+ vcpu_get_gr(ed,34),
+ vcpu_get_gr(ed,35),
+ vcpu_get_gr(ed,36));
break;
+#endif
}
}
diff -Nru a/xen/arch/ia64/xensetup.c b/xen/arch/ia64/xensetup.c
--- a/xen/arch/ia64/xensetup.c 2005-03-25 19:05:55 -05:00
+++ b/xen/arch/ia64/xensetup.c 2005-03-25 19:05:55 -05:00
@@ -224,6 +224,9 @@
init_frametable();
alloc_dom0();
+#ifdef DOMU_BUILD_STAGING
+ alloc_domU_staging();
+#endif
end_boot_allocator();
diff -Nru a/xen/include/asm-ia64/config.h b/xen/include/asm-ia64/config.h
--- a/xen/include/asm-ia64/config.h 2005-03-25 19:05:55 -05:00
+++ b/xen/include/asm-ia64/config.h 2005-03-25 19:05:55 -05:00
@@ -1,6 +1,7 @@
// control flags for turning on/off features under test
#undef CLONE_DOMAIN0
//#define CLONE_DOMAIN0 5
+#define DOMU_BUILD_STAGING
// manufactured from component pieces
-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxxxx
https://lists.sourceforge.net/lists/listinfo/xen-changelog
|