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