[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-ia64-devel] Re: [Xen-devel] [PATCH 3/3] continuable destroy domain: ia64 part



Hi, Isaku

After applying your patch, mm_teardown() return integer,
but I didn't find a patch for mm_teardown().

Is the following patch right?

Signed-off-by: Akio Takebe <takebe_akio@xxxxxxxxxxxxxx>

diff -r 3b50a7e52ff2 xen/arch/ia64/xen/mm.c
--- a/xen/arch/ia64/xen/mm.c    Fri Aug 31 17:00:11 2007 +0100
+++ b/xen/arch/ia64/xen/mm.c    Mon Sep 03 20:00:05 2007 +0900
@@ -338,14 +338,21 @@ mm_teardown(struct domain* d)
     volatile pgd_t* pgd;
 
     if (mm->pgd == NULL)
-        return;
+        return 0;
 
     pgd = pgd_offset(mm, 0);
     for (i = 0; i < PTRS_PER_PGD; i++, pgd++) {
-        if (!pgd_present(*pgd)) // acquire semantics
+        unsigned long cur_offset = i << PGDIR_SHIFT;
+        if (mm_teardown_can_skip(d, cur_offset + PGDIR_SIZE))
             continue;
-        mm_teardown_pgd(d, pgd, i << PGDIR_SHIFT);
-    }
+        if (!pgd_present(*pgd)) { // acquire semantics
+            mm_teardown_update_offset(d, cur_offset);
+            continue;
+        }
+        if (mm_teardown_pgd(d, pgd, cur_offset))
+            return -EAGAIN;
+    }
+    return 0;
 }
 
 static void


Best Regards,

Akio Takebe

># HG changeset patch
># User yamahata@xxxxxxxxxxxxx
># Date 1188280280 -32400
># Node ID b4fe65fdc26d5b56057f3711e7d8bf4a3617cfa8
># Parent  b8f3785f15bde5da96b4ffd1cde3e677d54abf90
>Implement ia64 continuable domain detroy.
>PATCHNAME: implement_ia64_continuable_domain_destroy
>
>Signed-off-by: Isaku Yamahata <yamahata@xxxxxxxxxxxxx>
>
>diff -r b8f3785f15bd -r b4fe65fdc26d xen/arch/ia64/xen/domain.c
>--- a/xen/arch/ia64/xen/domain.c       Fri Aug 31 19:52:21 2007 +0900
>+++ b/xen/arch/ia64/xen/domain.c       Tue Aug 28 14:51:20 2007 +0900
>@@ -563,6 +563,7 @@ int arch_domain_create(struct domain *d)
>               goto fail_nomem;
> 
>       memset(&d->arch.mm, 0, sizeof(d->arch.mm));
>+      d->arch.mm_teardown_offset = 0;
> 
>       if ((d->arch.mm.pgd = pgd_alloc(&d->arch.mm)) == NULL)
>           goto fail_nomem;
>@@ -938,12 +939,15 @@ static void relinquish_memory(struct dom
> 
> int domain_relinquish_resources(struct domain *d)
> {
>+    int ret;
>     /* Relinquish guest resources for VT-i domain. */
>     if (d->vcpu[0] && VMX_DOMAIN(d->vcpu[0]))
>           vmx_relinquish_guest_resources(d);
> 
>     /* Tear down shadow mode stuff. */
>-    mm_teardown(d);
>+    ret = mm_teardown(d);
>+    if (ret != 0)
>+        return ret;
> 
>     /* Relinquish every page of memory. */
>     relinquish_memory(d, &d->xenpage_list);
>diff -r b8f3785f15bd -r b4fe65fdc26d xen/arch/ia64/xen/mm.c
>--- a/xen/arch/ia64/xen/mm.c   Fri Aug 31 19:52:21 2007 +0900
>+++ b/xen/arch/ia64/xen/mm.c   Tue Aug 28 14:51:20 2007 +0900
>@@ -215,6 +215,18 @@ alloc_dom_xen_and_dom_io(void)
>     BUG_ON(dom_io == NULL);
> }
> 
>+static int
>+mm_teardown_can_skip(struct domain* d, unsigned long offset)
>+{
>+    return d->arch.mm_teardown_offset > offset;
>+}
>+
>+static void
>+mm_teardown_update_offset(struct domain* d, unsigned long offset)
>+{
>+    d->arch.mm_teardown_offset = offset;
>+}
>+
> static void
> mm_teardown_pte(struct domain* d, volatile pte_t* pte, unsigned long offset)
> {
>@@ -252,46 +264,73 @@ mm_teardown_pte(struct domain* d, volati
>     }
> }
> 
>-static void
>+static int
> mm_teardown_pmd(struct domain* d, volatile pmd_t* pmd, unsigned long offset)
> {
>     unsigned long i;
>     volatile pte_t* pte = pte_offset_map(pmd, offset);
> 
>     for (i = 0; i < PTRS_PER_PTE; i++, pte++) {
>-        if (!pte_present(*pte)) // acquire semantics
>+        unsigned long cur_offset = offset + (i << PAGE_SHIFT);
>+        if (mm_teardown_can_skip(d, cur_offset + PAGE_SIZE))
>             continue;
>-        mm_teardown_pte(d, pte, offset + (i << PAGE_SHIFT));
>-    }
>-}
>-
>-static void
>+        if (!pte_present(*pte)) { // acquire semantics
>+            mm_teardown_update_offset(d, cur_offset);
>+            continue;
>+        }
>+        mm_teardown_update_offset(d, cur_offset);
>+        mm_teardown_pte(d, pte, cur_offset);
>+        if (hypercall_preempt_check())
>+            return -EAGAIN;
>+    }
>+    return 0;
>+}
>+
>+static int
> mm_teardown_pud(struct domain* d, volatile pud_t *pud, unsigned long offset)
> {
>     unsigned long i;
>     volatile pmd_t *pmd = pmd_offset(pud, offset);
> 
>     for (i = 0; i < PTRS_PER_PMD; i++, pmd++) {
>-        if (!pmd_present(*pmd)) // acquire semantics
>+        unsigned long cur_offset = offset + (i << PMD_SHIFT);
>+        if (mm_teardown_can_skip(d, cur_offset + PMD_SIZE))
>             continue;
>-        mm_teardown_pmd(d, pmd, offset + (i << PMD_SHIFT));
>-    }
>-}
>-
>-static void
>+        if (!pmd_present(*pmd)) { // acquire semantics
>+            mm_teardown_update_offset(d, cur_offset);
>+            continue;
>+        }
>+        if (mm_teardown_pmd(d, pmd, cur_offset))
>+            return -EAGAIN;
>+    }
>+    return 0;
>+}
>+
>+static int
> mm_teardown_pgd(struct domain* d, volatile pgd_t *pgd, unsigned long offset)
> {
>     unsigned long i;
>     volatile pud_t *pud = pud_offset(pgd, offset);
> 
>     for (i = 0; i < PTRS_PER_PUD; i++, pud++) {
>-        if (!pud_present(*pud)) // acquire semantics
>+        unsigned long cur_offset = offset + (i << PUD_SHIFT);
>+#ifndef __PAGETABLE_PUD_FOLDED
>+        if (mm_teardown_can_skip(d, cur_offset + PUD_SIZE))
>             continue;
>-        mm_teardown_pud(d, pud, offset + (i << PUD_SHIFT));
>-    }
>-}
>-
>-void
>+#endif
>+        if (!pud_present(*pud)) { // acquire semantics
>+#ifndef __PAGETABLE_PUD_FOLDED
>+            mm_teardown_update_offset(d, cur_offset);
>+#endif
>+            continue;
>+        }
>+        if (mm_teardown_pud(d, pud, cur_offset))
>+            return -EAGAIN;
>+    }
>+    return 0;
>+}
>+
>+int
> mm_teardown(struct domain* d)
> {
>     struct mm_struct* mm = &d->arch.mm;


_______________________________________________
Xen-ia64-devel mailing list
Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-ia64-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.