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] [xen-unstable] [IA64] use page_list_head and related stu

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] [IA64] use page_list_head and related stuff.
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Fri, 13 Feb 2009 04:00:20 -0800
Delivery-date: Fri, 13 Feb 2009 04:00:09 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Isaku Yamahata <yamahata@xxxxxxxxxxxxx>
# Date 1234491779 -32400
# Node ID af0da711bbdb5f9c631aeca85b21eaf1bfb3eddb
# Parent  c7cba853583da45ee4478237047fdd5d6bed68cd
[IA64] use page_list_head and related stuff.

Use page_list_head and stuff for consistency with x86 code.

Signed-off-by: Isaku Yamahata <yamahata@xxxxxxxxxxxxx>
---
 xen/arch/ia64/xen/domain.c       |   26 ++++++++++++++------------
 xen/arch/ia64/xen/mm.c           |    4 ++--
 xen/arch/ia64/xen/tlb_track.c    |    8 ++++----
 xen/include/asm-ia64/domain.h    |    3 ++-
 xen/include/asm-ia64/mm.h        |   15 ++++++++++++++-
 xen/include/asm-ia64/tlb_track.h |    2 +-
 6 files changed, 37 insertions(+), 21 deletions(-)

diff -r c7cba853583d -r af0da711bbdb xen/arch/ia64/xen/domain.c
--- a/xen/arch/ia64/xen/domain.c        Fri Feb 13 11:22:28 2009 +0900
+++ b/xen/arch/ia64/xen/domain.c        Fri Feb 13 11:22:59 2009 +0900
@@ -608,7 +608,7 @@ int arch_domain_create(struct domain *d,
        memset(&d->arch.mm, 0, sizeof(d->arch.mm));
        d->arch.relres = RELRES_not_started;
        d->arch.mm_teardown_offset = 0;
-       INIT_LIST_HEAD(&d->arch.relmem_list);
+       INIT_PAGE_LIST_HEAD(&d->arch.relmem_list);
 
        if ((d->arch.mm.pgd = pgd_alloc(&d->arch.mm)) == NULL)
            goto fail_nomem;
@@ -1626,9 +1626,8 @@ int arch_set_info_guest(struct vcpu *v, 
        return rc;
 }
 
-static int relinquish_memory(struct domain *d, struct list_head *list)
-{
-    struct list_head *ent;
+static int relinquish_memory(struct domain *d, struct page_list_head *list)
+{
     struct page_info *page;
 #ifndef __ia64__
     unsigned long     x, y;
@@ -1637,16 +1636,14 @@ static int relinquish_memory(struct doma
 
     /* Use a recursive lock, as we may enter 'free_domheap_page'. */
     spin_lock_recursive(&d->page_alloc_lock);
-    ent = list->next;
-    while ( ent != list )
+
+    while ( (page = page_list_remove_head(list)) )
     {
-        page = list_entry(ent, struct page_info, list);
         /* Grab a reference to the page so it won't disappear from under us. */
         if ( unlikely(!get_page(page, d)) )
         {
             /* Couldn't get a reference -- someone is freeing this page. */
-            ent = ent->next;
-            list_move_tail(&page->list, &d->arch.relmem_list);
+            page_list_add_tail(page, &d->arch.relmem_list);
             continue;
         }
 
@@ -1681,9 +1678,8 @@ static int relinquish_memory(struct doma
 #endif
 
         /* Follow the list chain and /then/ potentially free the page. */
-        ent = ent->next;
         BUG_ON(get_gpfn_from_mfn(page_to_mfn(page)) != INVALID_M2P_ENTRY);
-        list_move_tail(&page->list, &d->arch.relmem_list);
+        page_list_add_tail(page, &d->arch.relmem_list);
         put_page(page);
 
         if (hypercall_preempt_check()) {
@@ -1692,7 +1688,13 @@ static int relinquish_memory(struct doma
         }
     }
 
-    list_splice_init(&d->arch.relmem_list, list);
+    /* list is empty at this point. */
+    if ( !page_list_empty(&d->arch.relmem_list) )
+    {
+        *list = d->arch.relmem_list;
+        INIT_PAGE_LIST_HEAD(&d->arch.relmem_list);
+    }
+
 
  out:
     spin_unlock_recursive(&d->page_alloc_lock);
diff -r c7cba853583d -r af0da711bbdb xen/arch/ia64/xen/mm.c
--- a/xen/arch/ia64/xen/mm.c    Fri Feb 13 11:22:28 2009 +0900
+++ b/xen/arch/ia64/xen/mm.c    Fri Feb 13 11:22:59 2009 +0900
@@ -474,7 +474,7 @@ share_xen_page_with_guest(struct page_in
         page->count_info |= PGC_allocated | 1;
         if ( unlikely(d->xenheap_pages++ == 0) )
             get_knownalive_domain(d);
-        list_add_tail(&page->list, &d->xenpage_list);
+        page_list_add_tail(page, &d->xenpage_list);
     }
 
     // grant_table_destroy() releases these pages.
@@ -2856,7 +2856,7 @@ steal_page(struct domain *d, struct page
     /* Unlink from original owner. */
     if ( !(memflags & MEMF_no_refcount) )
         d->tot_pages--;
-    list_del(&page->list);
+    page_list_del(page, &d->page_list);
 
     spin_unlock(&d->page_alloc_lock);
     perfc_incr(steal_page);
diff -r c7cba853583d -r af0da711bbdb xen/arch/ia64/xen/tlb_track.c
--- a/xen/arch/ia64/xen/tlb_track.c     Fri Feb 13 11:22:28 2009 +0900
+++ b/xen/arch/ia64/xen/tlb_track.c     Fri Feb 13 11:22:59 2009 +0900
@@ -56,7 +56,7 @@ tlb_track_allocate_entries(struct tlb_tr
         return -ENOMEM;
     }
 
-    list_add(&entry_page->list, &tlb_track->page_list);
+    page_list_add(entry_page, &tlb_track->page_list);
     track_entries = (struct tlb_track_entry*)page_to_virt(entry_page);
     allocated = PAGE_SIZE / sizeof(track_entries[0]);
     tlb_track->num_entries += allocated;
@@ -93,7 +93,7 @@ tlb_track_create(struct domain* d)
     tlb_track->limit = TLB_TRACK_LIMIT_ENTRIES;
     tlb_track->num_entries = 0;
     tlb_track->num_free = 0;
-    INIT_LIST_HEAD(&tlb_track->page_list);
+    INIT_PAGE_LIST_HEAD(&tlb_track->page_list);
     if (tlb_track_allocate_entries(tlb_track) < 0)
         goto out;
 
@@ -136,8 +136,8 @@ tlb_track_destroy(struct domain* d)
     spin_lock(&tlb_track->free_list_lock);
     BUG_ON(tlb_track->num_free != tlb_track->num_entries);
 
-    list_for_each_entry_safe(page, next, &tlb_track->page_list, list) {
-        list_del(&page->list);
+    page_list_for_each_safe(page, next, &tlb_track->page_list) {
+        page_list_del(page, &tlb_track->page_list);
         free_domheap_page(page);
     }
 
diff -r c7cba853583d -r af0da711bbdb xen/include/asm-ia64/domain.h
--- a/xen/include/asm-ia64/domain.h     Fri Feb 13 11:22:28 2009 +0900
+++ b/xen/include/asm-ia64/domain.h     Fri Feb 13 11:22:59 2009 +0900
@@ -10,6 +10,7 @@
 #include <asm/vmx_platform.h>
 #include <xen/list.h>
 #include <xen/cpumask.h>
+#include <xen/mm.h>
 #include <asm/fpswa.h>
 #include <xen/rangeset.h>
 
@@ -224,7 +225,7 @@ struct arch_domain {
     /* Continuable mm_teardown() */
     unsigned long mm_teardown_offset;
     /* Continuable domain_relinquish_resources() */
-    struct list_head relmem_list;
+    struct page_list_head relmem_list;
 };
 #define INT_ENABLE_OFFSET(v)             \
     (sizeof(vcpu_info_t) * (v)->vcpu_id + \
diff -r c7cba853583d -r af0da711bbdb xen/include/asm-ia64/mm.h
--- a/xen/include/asm-ia64/mm.h Fri Feb 13 11:22:28 2009 +0900
+++ b/xen/include/asm-ia64/mm.h Fri Feb 13 11:22:59 2009 +0900
@@ -39,10 +39,23 @@ typedef unsigned long page_flags_t;
 
 #define PRtype_info "016lx"
 
+#if 0
+/*
+ * See include/xen/mm.h.
+ * For now, abandon to compress struct page_info
+ * seeing IA64_MAX_PHYS_BITS and page size.
+ */
+#undef page_list_entry
+struct page_list_entry
+{
+    unsigned long next, prev;
+};
+#endif
+
 struct page_info
 {
     /* Each frame can be threaded onto a doubly-linked list. */
-    struct list_head list;
+    struct page_list_entry list;
 
     /* Reference count and various PGC_xxx flags and fields. */
     unsigned long count_info;
diff -r c7cba853583d -r af0da711bbdb xen/include/asm-ia64/tlb_track.h
--- a/xen/include/asm-ia64/tlb_track.h  Fri Feb 13 11:22:28 2009 +0900
+++ b/xen/include/asm-ia64/tlb_track.h  Fri Feb 13 11:22:59 2009 +0900
@@ -72,7 +72,7 @@ struct tlb_track {
     unsigned int                limit;
     unsigned int                num_entries;
     unsigned int                num_free;
-    struct list_head            page_list;
+    struct page_list_head       page_list;
 
     /* XXX hash table size */
     spinlock_t                  hash_lock;

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] [IA64] use page_list_head and related stuff., Xen patchbot-unstable <=