WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] DomainU's can now be loaded from domain0 using hypercall

To: xen-changelog@xxxxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] DomainU's can now be loaded from domain0 using hypercalls
From: BitKeeper Bot <riel@xxxxxxxxxxx>
Date: Sat, 26 Mar 2005 04:24:24 +0000
Delivery-date: Sat, 26 Mar 2005 00:08:03 +0000
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-archive: <http://sourceforge.net/mailarchive/forum.php?forum=xen-changelog>
List-help: <mailto:xen-changelog-request@lists.sourceforge.net?subject=help>
List-id: <xen-changelog.lists.sourceforge.net>
List-post: <mailto:xen-changelog@lists.sourceforge.net>
List-subscribe: <https://lists.sourceforge.net/lists/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.sourceforge.net?subject=subscribe>
List-unsubscribe: <https://lists.sourceforge.net/lists/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.sourceforge.net?subject=unsubscribe>
Reply-to: Xen Development List <xen-devel@xxxxxxxxxxxxxxxxxxxxx>
Sender: xen-changelog-admin@xxxxxxxxxxxxxxxxxxxxx
ChangeSet 1.1366, 2005/03/25 21:24:24-07:00, djm@xxxxxxxxxxxxxxxxxx

        DomainU's can now be loaded from domain0 using hypercalls



 domain.c    |   26 +++++++++++++++++++++-----
 hypercall.c |    5 +++--
 xenmisc.c   |   11 ++++++++++-
 xensetup.c  |    2 +-
 4 files changed, 35 insertions(+), 9 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:06:11 -05:00
+++ b/xen/arch/ia64/domain.c    2005-03-25 19:06:11 -05:00
@@ -311,7 +311,8 @@
 
        pmd = pmd_offset(pgd, mpaddr);
        if (pmd_none(*pmd))
-               pmd_populate(mm, pmd, pte_alloc_one(mm,mpaddr));
+               pmd_populate_kernel(mm, pmd, pte_alloc_one_kernel(mm,mpaddr));
+//             pmd_populate(mm, pmd, pte_alloc_one(mm,mpaddr));
 
        pte = pte_offset_map(pmd, mpaddr);
        if (pte_none(*pte)) {
@@ -509,14 +510,17 @@
            return -EINVAL;
        }
 
+#if 0
        /* Find the section-header strings table. */
        if ( ehdr.e_shstrndx == SHN_UNDEF )
        {
            printk("ELF image has no section-header strings table 
(shstrtab).\n");
            return -EINVAL;
        }
+#endif
 
        *entry = ehdr.e_entry;
+printf("parsedomainelfimage: entry point = %p\n",*entry);
 
        return 0;
 }
@@ -559,17 +563,25 @@
                while(1);
        }
        else domU_staging_area = (unsigned long *)__va(domU_staging_start);
-       printf("alloc_domU_staging: 
domU_staging_start=%p\n",domU_staging_start);
+       printf("alloc_domU_staging: domU_staging_area=%p\n",domU_staging_area);
 
 }
 
 unsigned long
+domU_staging_read_8(unsigned long at)
+{
+       // no way to return errors so just do it
+       return domU_staging_area[at>>3];
+       
+}
+
+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;
+       at >>= 3;
        domU_staging_area[at++] = a;
        domU_staging_area[at++] = b;
        domU_staging_area[at++] = c;
@@ -796,7 +808,7 @@
                d->shared_info->vcpu_data[i].evtchn_upcall_mask = 1;
 
        /* Copy the OS image. */
-       printk("calling loaddomainelfimage\n");
+       printk("calling loaddomainelfimage(%p,%p)\n",d,image_start);
        loaddomainelfimage(d,image_start);
        printk("loaddomainelfimage returns\n");
 
@@ -813,7 +825,11 @@
 // FIXME: When dom0 can construct domains, this goes away (or is rewritten)
 int launch_domainU(unsigned long size)
 {
-       static int next = 100;  // FIXME
+#ifdef CLONE_DOMAIN0
+       static int next = CLONE_DOMAIN0+1;
+#else
+       static int next = 1;
+#endif 
 
        struct domain *d = do_createdomain(next,0);
        if (!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:06:11 -05:00
+++ b/xen/arch/ia64/hypercall.c 2005-03-25 19:06:11 -05:00
@@ -89,7 +89,6 @@
                        vcpu_get_gr(ed,32),
                        vcpu_get_gr(ed,33));
                break;
-#ifdef DOMU_BUILD_STAGING
            case 0xfffd: // test dummy hypercall
                regs->r8 = launch_domainU(
                        vcpu_get_gr(ed,32));
@@ -102,6 +101,8 @@
                        vcpu_get_gr(ed,35),
                        vcpu_get_gr(ed,36));
                break;
-#endif
+           case 0xfffb: // test dummy hypercall
+               regs->r8 = domU_staging_read_8(vcpu_get_gr(ed,32));
+               break;
        }
 }
diff -Nru a/xen/arch/ia64/xenmisc.c b/xen/arch/ia64/xenmisc.c
--- a/xen/arch/ia64/xenmisc.c   2005-03-25 19:06:11 -05:00
+++ b/xen/arch/ia64/xenmisc.c   2005-03-25 19:06:11 -05:00
@@ -247,10 +247,19 @@
 //printk("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
 //printk("@@@@@@ context switch from domain %d (%x) to domain %d (%x)\n",
 //prev->domain->id,(long)prev&0xffffff,next->domain->id,(long)next&0xffffff);
-//printk("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
 //if (prev->domain->id == 1 && next->domain->id == 0) cs10foo();
 //if (prev->domain->id == 0 && next->domain->id == 1) cs01foo();
+//printk("@@sw %d->%d\n",prev->domain->id,next->domain->id);
        switch_to(prev,next,prev);
+// leave this debug for now: it acts as a heartbeat when more than
+// one domain is active
+{
+static long cnt[16] = { 50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50};
+static int i = 100;
+int id = ((struct exec_domain *)current)->domain->id & 0xf;
+if (!cnt[id]--) { printk("%x",id); cnt[id] = 50; }
+if (!i--) { printk("+",id); cnt[id] = 100; }
+}
        clear_bit(EDF_RUNNING, &prev->ed_flags);
        //if (!is_idle_task(next->domain) )
                //send_guest_virq(next, VIRQ_TIMER);
diff -Nru a/xen/arch/ia64/xensetup.c b/xen/arch/ia64/xensetup.c
--- a/xen/arch/ia64/xensetup.c  2005-03-25 19:06:11 -05:00
+++ b/xen/arch/ia64/xensetup.c  2005-03-25 19:06:11 -05:00
@@ -297,7 +297,7 @@
     dom0_memory_end = ia64_boot_param->initrd_size;
     for (i = 0; i < CLONE_DOMAIN0; i++) {
 printk("CONSTRUCTING DOMAIN0 CLONE #%d\n",i+1);
-        if ( construct_domN(clones[i], dom0_memory_start, dom0_memory_end,
+        if ( construct_domU(clones[i], dom0_memory_start, dom0_memory_end,
                         0, 
                         0,
                        0) != 0)


-------------------------------------------------------
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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] DomainU's can now be loaded from domain0 using hypercalls, BitKeeper Bot <=