Re: [PATCH 2/5] tm: Utilize the dma_addr_t array for pages that are to in DMA32 pool.

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

 



On 01/07/2011 06:11 PM, Konrad Rzeszutek Wilk wrote:
We only use the "if (pool == NULL)" path for right now.

Signed-off-by: Konrad Rzeszutek Wilk<konrad.wilk at oracle.com>

Patch name is incorrect, also see potential indentation issue below,
otherwise
Reviewed-by: Thomas Hellstrom <thomas@xxxxxxxxxxxx>

---
  drivers/gpu/drm/ttm/ttm_page_alloc.c |   26 +++++++++++++++++++++++---
  1 files changed, 23 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc.c b/drivers/gpu/drm/ttm/ttm_page_alloc.c
index 6859288..5d09677 100644
--- a/drivers/gpu/drm/ttm/ttm_page_alloc.c
+++ b/drivers/gpu/drm/ttm/ttm_page_alloc.c
@@ -683,14 +683,22 @@ int ttm_get_pages(struct list_head *pages, int flags,
  			gfp_flags |= GFP_HIGHUSER;

  		for (r = 0; r<  count; ++r) {
-			p = alloc_page(gfp_flags);
+			if ((flags&  TTM_PAGE_FLAG_DMA32)&&  dma_address) {
+				void *addr;
+				addr = dma_alloc_coherent(NULL, PAGE_SIZE,
+							&dma_address[r],
+							gfp_flags);

Indentation again

+				if (addr == NULL)
+					return -ENOMEM;
+				p = virt_to_page(addr);
+			} else
+				p = alloc_page(gfp_flags);
  			if (!p) {

  				printk(KERN_ERR TTM_PFX
  				       "Unable to allocate page.");
  				return -ENOMEM;
  			}
-
  			list_add(&p->lru, pages);
  		}
  		return 0;
@@ -739,12 +747,24 @@ void ttm_put_pages(struct list_head *pages, unsigned page_count, int flags,
  	unsigned long irq_flags;
  	struct ttm_page_pool *pool = ttm_get_pool(flags, cstate);
  	struct page *p, *tmp;
+	unsigned r;


  	if (pool == NULL) {
  		/* No pool for this memory type so free the pages */

+		r = page_count-1;
  		list_for_each_entry_safe(p, tmp, pages, lru) {
-			__free_page(p);
+			if ((flags&  TTM_PAGE_FLAG_DMA32)&&  dma_address) {
+				void *addr = page_address(p);
+				WARN_ON(!addr || !dma_address[r]);
+				if (addr)
+					dma_free_coherent(NULL, PAGE_SIZE,
+							addr,
+							dma_address[r]);
+				dma_address[r] = 0;
+			} else
+				__free_page(p);
+			r--;
  		}
  		/* Make the pages list empty */
  		INIT_LIST_HEAD(pages);

_______________________________________________
dri-devel mailing list
dri-devel@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/dri-devel


[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux