svn commit: r254873 - head/sys/dev/drm2/ttm

Jean-Sebastien Pedron dumbbell at FreeBSD.org
Sun Aug 25 15:05:22 UTC 2013


Author: dumbbell
Date: Sun Aug 25 15:05:22 2013
New Revision: 254873
URL: http://svnweb.freebsd.org/changeset/base/254873

Log:
  drm/ttm: When removing a range of pages from a pool, remove all of them
  
  Submitted by:	Mark Kettenis and Jonathan Gray from OpenBSD
  Approved by:	kib@

Modified:
  head/sys/dev/drm2/ttm/ttm_page_alloc.c

Modified: head/sys/dev/drm2/ttm/ttm_page_alloc.c
==============================================================================
--- head/sys/dev/drm2/ttm/ttm_page_alloc.c	Sun Aug 25 15:01:43 2013	(r254872)
+++ head/sys/dev/drm2/ttm/ttm_page_alloc.c	Sun Aug 25 15:05:22 2013	(r254873)
@@ -320,6 +320,7 @@ static int ttm_page_pool_free(struct ttm
 	vm_page_t *pages_to_free;
 	unsigned freed_pages = 0,
 		 npages_to_free = nr_free;
+	unsigned i;
 
 	if (NUM_PAGES_TO_ALLOC < nr_free)
 		npages_to_free = NUM_PAGES_TO_ALLOC;
@@ -338,7 +339,8 @@ restart:
 		/* We can only remove NUM_PAGES_TO_ALLOC at a time. */
 		if (freed_pages >= NUM_PAGES_TO_ALLOC) {
 			/* remove range of pages from the pool */
-			TAILQ_REMOVE(&pool->list, p, plinks.q);
+			for (i = 0; i < freed_pages; i++)
+				TAILQ_REMOVE(&pool->list, pages_to_free[i], plinks.q);
 
 			ttm_pool_update_free_locked(pool, freed_pages);
 			/**
@@ -373,7 +375,8 @@ restart:
 
 	/* remove range of pages from the pool */
 	if (freed_pages) {
-		TAILQ_REMOVE(&pool->list, p, plinks.q);
+		for (i = 0; i < freed_pages; i++)
+			TAILQ_REMOVE(&pool->list, pages_to_free[i], plinks.q);
 
 		ttm_pool_update_free_locked(pool, freed_pages);
 		nr_free -= freed_pages;


More information about the svn-src-head mailing list