diff --git a/drivers/gpu/drm/ttm/ttm_tt.c b/drivers/gpu/drm/ttm/ttm_tt.c
index b8b6c4a..4445364 100644
--- a/drivers/gpu/drm/ttm/ttm_tt.c
+++ b/drivers/gpu/drm/ttm/ttm_tt.c
@@ -27,7 +27,7 @@
 /*
  * Authors: Thomas Hellstrom <thellstrom-at-vmware-dot-com>
  */
-
+#include <linux/dma-mapping.h>
 #include <linux/vmalloc.h>
 #include <linux/sched.h>
 #include <linux/highmem.h>
@@ -138,6 +138,9 @@ static void ttm_tt_free_page_directory(struct ttm_tt *ttm)
 static struct page *ttm_tt_alloc_page(unsigned page_flags)
 {
 	gfp_t gfp_flags = GFP_USER;
+	void *addr;
+	dma_addr_t phys;
+	struct page *page;
 
 	if (page_flags & TTM_PAGE_FLAG_ZERO_ALLOC)
 		gfp_flags |= __GFP_ZERO;
@@ -147,7 +150,24 @@ static struct page *ttm_tt_alloc_page(unsigned page_flags)
 	else
 		gfp_flags |= __GFP_HIGHMEM;
 
-	return alloc_page(gfp_flags);
+	addr = dma_alloc_coherent(NULL, PAGE_SIZE, &phys, gfp_flags);
+	BUG_ON(!addr);
+	page = virt_to_page(addr);
+	get_page(page);
+	return page;
+}
+
+static void ttm_tt_free_page(struct page *page)
+{
+	void *addr;
+
+ 	if (page == NULL)
+		return;
+
+	put_page(page);
+	addr = page_address(page);
+
+	dma_free_coherent(NULL, PAGE_SIZE, addr, virt_to_bus(addr));
 }
 
 static void ttm_tt_free_user_pages(struct ttm_tt *ttm)
@@ -180,7 +200,7 @@ static void ttm_tt_free_user_pages(struct ttm_tt *ttm)
 
 		ttm->pages[i] = NULL;
 		ttm_mem_global_free(ttm->bdev->mem_glob, PAGE_SIZE, false);
-		put_page(page);
+		ttm_tt_free_page(page);
 	}
 	ttm->state = tt_unpopulated;
 	ttm->first_himem_page = ttm->num_pages;
@@ -218,7 +238,7 @@ static struct page *__ttm_tt_get_page(struct ttm_tt *ttm, int index)
 	}
 	return p;
 out_err:
-	put_page(p);
+	ttm_tt_free_page(p);
 	return NULL;
 }
 
diff --git a/include/drm/ttm/ttm_bo_driver.h b/include/drm/ttm/ttm_bo_driver.h
index a68829d..e57e442 100644
--- a/include/drm/ttm/ttm_bo_driver.h
+++ b/include/drm/ttm/ttm_bo_driver.h
@@ -524,7 +524,7 @@ extern void ttm_tt_destroy(struct ttm_tt *ttm);
 extern void ttm_tt_unbind(struct ttm_tt *ttm);
 
 /**
- * ttm_ttm_destroy:
+ * ttm_tt_get_page:
  *
  * @ttm: The struct ttm_tt.
  * @index: Index of the desired page.
