Merge tag 'virtio-next-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
[firefly-linux-kernel-4.4.55.git] / drivers / gpu / drm / bochs / bochs_mm.c
index 1728a1b0b81376ed43e7f39fb5f863cba7563166..66286ff518d4be28e8b71b2b8ebf0d0b2ada6496 100644 (file)
@@ -257,20 +257,26 @@ void bochs_mm_fini(struct bochs_device *bochs)
 
 static void bochs_ttm_placement(struct bochs_bo *bo, int domain)
 {
+       unsigned i;
        u32 c = 0;
-       bo->placement.fpfn = 0;
-       bo->placement.lpfn = 0;
        bo->placement.placement = bo->placements;
        bo->placement.busy_placement = bo->placements;
        if (domain & TTM_PL_FLAG_VRAM) {
-               bo->placements[c++] = TTM_PL_FLAG_WC | TTM_PL_FLAG_UNCACHED
+               bo->placements[c++].flags = TTM_PL_FLAG_WC
+                       | TTM_PL_FLAG_UNCACHED
                        | TTM_PL_FLAG_VRAM;
        }
        if (domain & TTM_PL_FLAG_SYSTEM) {
-               bo->placements[c++] = TTM_PL_MASK_CACHING | TTM_PL_FLAG_SYSTEM;
+               bo->placements[c++].flags = TTM_PL_MASK_CACHING
+                       | TTM_PL_FLAG_SYSTEM;
        }
        if (!c) {
-               bo->placements[c++] = TTM_PL_MASK_CACHING | TTM_PL_FLAG_SYSTEM;
+               bo->placements[c++].flags = TTM_PL_MASK_CACHING
+                       | TTM_PL_FLAG_SYSTEM;
+       }
+       for (i = 0; i < c; ++i) {
+               bo->placements[i].fpfn = 0;
+               bo->placements[i].lpfn = 0;
        }
        bo->placement.num_placement = c;
        bo->placement.num_busy_placement = c;
@@ -294,7 +300,7 @@ int bochs_bo_pin(struct bochs_bo *bo, u32 pl_flag, u64 *gpu_addr)
 
        bochs_ttm_placement(bo, pl_flag);
        for (i = 0; i < bo->placement.num_placement; i++)
-               bo->placements[i] |= TTM_PL_FLAG_NO_EVICT;
+               bo->placements[i].flags |= TTM_PL_FLAG_NO_EVICT;
        ret = ttm_bo_validate(&bo->bo, &bo->placement, false, false);
        if (ret)
                return ret;
@@ -319,7 +325,7 @@ int bochs_bo_unpin(struct bochs_bo *bo)
                return 0;
 
        for (i = 0; i < bo->placement.num_placement; i++)
-               bo->placements[i] &= ~TTM_PL_FLAG_NO_EVICT;
+               bo->placements[i].flags &= ~TTM_PL_FLAG_NO_EVICT;
        ret = ttm_bo_validate(&bo->bo, &bo->placement, false, false);
        if (ret)
                return ret;
@@ -333,7 +339,7 @@ int bochs_mmap(struct file *filp, struct vm_area_struct *vma)
        struct bochs_device *bochs;
 
        if (unlikely(vma->vm_pgoff < DRM_FILE_PAGE_OFFSET))
-               return drm_mmap(filp, vma);
+               return -EINVAL;
 
        file_priv = filp->private_data;
        bochs = file_priv->minor->dev->dev_private;
@@ -371,7 +377,7 @@ static int bochs_bo_create(struct drm_device *dev, int size, int align,
        ret = ttm_bo_init(&bochs->ttm.bdev, &bochsbo->bo, size,
                          ttm_bo_type_device, &bochsbo->placement,
                          align >> PAGE_SHIFT, false, NULL, acc_size,
-                         NULL, bochs_bo_ttm_destroy);
+                         NULL, NULL, bochs_bo_ttm_destroy);
        if (ret)
                return ret;