drm/i915: use the default context
[deliverable/linux.git] / drivers / gpu / drm / ttm / ttm_bo_util.c
index 082fcaea583fb08303d1baab9b68125a1cf31079..f8187ead7b373336c21e603caa448bad99d50b47 100644 (file)
@@ -244,7 +244,7 @@ static int ttm_copy_io_ttm_page(struct ttm_tt *ttm, void *src,
                                unsigned long page,
                                pgprot_t prot)
 {
-       struct page *d = ttm_tt_get_page(ttm, page);
+       struct page *d = ttm->pages[page];
        void *dst;
 
        if (!d)
@@ -281,7 +281,7 @@ static int ttm_copy_ttm_io_page(struct ttm_tt *ttm, void *dst,
                                unsigned long page,
                                pgprot_t prot)
 {
-       struct page *s = ttm_tt_get_page(ttm, page);
+       struct page *s = ttm->pages[page];
        void *src;
 
        if (!s)
@@ -342,6 +342,12 @@ int ttm_bo_move_memcpy(struct ttm_buffer_object *bo,
        if (old_iomap == NULL && ttm == NULL)
                goto out2;
 
+       if (ttm->state == tt_unpopulated) {
+               ret = ttm->bdev->driver->ttm_tt_populate(ttm);
+               if (ret)
+                       goto out1;
+       }
+
        add = 0;
        dir = 1;
 
@@ -439,6 +445,7 @@ static int ttm_buffer_object_transfer(struct ttm_buffer_object *bo,
        kref_init(&fbo->list_kref);
        kref_init(&fbo->kref);
        fbo->destroy = &ttm_transfered_destroy;
+       fbo->acc_size = 0;
 
        *new_obj = fbo;
        return 0;
@@ -502,10 +509,16 @@ static int ttm_bo_kmap_ttm(struct ttm_buffer_object *bo,
 {
        struct ttm_mem_reg *mem = &bo->mem; pgprot_t prot;
        struct ttm_tt *ttm = bo->ttm;
-       struct page *d;
-       int i;
+       int ret;
 
        BUG_ON(!ttm);
+
+       if (ttm->state == tt_unpopulated) {
+               ret = ttm->bdev->driver->ttm_tt_populate(ttm);
+               if (ret)
+                       return ret;
+       }
+
        if (num_pages == 1 && (mem->placement & TTM_PL_FLAG_CACHED)) {
                /*
                 * We're mapping a single page, and the desired
@@ -513,18 +526,9 @@ static int ttm_bo_kmap_ttm(struct ttm_buffer_object *bo,
                 */
 
                map->bo_kmap_type = ttm_bo_map_kmap;
-               map->page = ttm_tt_get_page(ttm, start_page);
+               map->page = ttm->pages[start_page];
                map->virtual = kmap(map->page);
        } else {
-           /*
-            * Populate the part we're mapping;
-            */
-               for (i = start_page; i < start_page + num_pages; ++i) {
-                       d = ttm_tt_get_page(ttm, i);
-                       if (!d)
-                               return -ENOMEM;
-               }
-
                /*
                 * We need to use vmap to get the desired page protection
                 * or to make the buffer object look contiguous.
This page took 0.024332 seconds and 5 git commands to generate.