[haiku-commits] r35010 - haiku/trunk/src/system/kernel/vm

  • From: ingo_weinhold@xxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Mon, 11 Jan 2010 17:31:45 +0100 (CET)

Author: bonefish
Date: 2010-01-11 17:31:44 +0100 (Mon, 11 Jan 2010)
New Revision: 35010
Changeset: http://dev.haiku-os.org/changeset/35010/haiku

Modified:
   haiku/trunk/src/system/kernel/vm/VMPageQueue.h
Log:
Added AppendUnlocked() version that appends a list of pages.


Modified: haiku/trunk/src/system/kernel/vm/VMPageQueue.h
===================================================================
--- haiku/trunk/src/system/kernel/vm/VMPageQueue.h      2010-01-11 15:06:17 UTC 
(rev 35009)
+++ haiku/trunk/src/system/kernel/vm/VMPageQueue.h      2010-01-11 16:31:44 UTC 
(rev 35010)
@@ -18,11 +18,10 @@
 #include <vm/vm_types.h>
 
 
-
 struct VMPageQueue {
 public:
-       typedef DoublyLinkedList<vm_page, DoublyLinkedListMemberGetLink<vm_page,
-               &vm_page::queue_link> > PageList;
+       typedef DoublyLinkedList<vm_page,
+               DoublyLinkedListMemberGetLink<vm_page, &vm_page::queue_link> > 
PageList;
        typedef PageList::ConstIterator Iterator;
 
 public:
@@ -39,6 +38,7 @@
        inline  void                            Requeue(vm_page* page, bool 
tail);
 
        inline  void                            AppendUnlocked(vm_page* page);
+       inline  void                            AppendUnlocked(PageList& pages, 
uint32 count);
        inline  void                            PrependUnlocked(vm_page* page);
        inline  void                            RemoveUnlocked(vm_page* page);
        inline  vm_page*                        RemoveHeadUnlocked();
@@ -187,6 +187,29 @@
 
 
 void
+VMPageQueue::AppendUnlocked(PageList& pages, uint32 count)
+{
+#if DEBUG_PAGE_QUEUE
+       for (PageList::Iterator it = pages.GetIterator();
+                       vm_page* page = it.next();) {
+               if (page->queue != NULL) {
+                       panic("%p->VMPageQueue::AppendUnlocked(): page %p 
thinks it is "
+                               "already in queue %p", this, page, page->queue);
+               }
+
+               page->queue = this;
+       }
+
+#endif // DEBUG_PAGE_QUEUE
+
+       InterruptsSpinLocker locker(fLock);
+
+       fPages.MoveFrom(&pages);
+       fCount += count;
+}
+
+
+void
 VMPageQueue::PrependUnlocked(vm_page* page)
 {
        InterruptsSpinLocker locker(fLock);


Other related posts:

  • » [haiku-commits] r35010 - haiku/trunk/src/system/kernel/vm - ingo_weinhold