diff options
Diffstat (limited to 'drivers/gpu/drm/vmwgfx/vmwgfx_validation.c')
| -rw-r--r-- | drivers/gpu/drm/vmwgfx/vmwgfx_validation.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_validation.c b/drivers/gpu/drm/vmwgfx/vmwgfx_validation.c index 184025fa938e..f116f092e00b 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_validation.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_validation.c | |||
| @@ -104,11 +104,25 @@ void *vmw_validation_mem_alloc(struct vmw_validation_context *ctx, | |||
| 104 | return NULL; | 104 | return NULL; |
| 105 | 105 | ||
| 106 | if (ctx->mem_size_left < size) { | 106 | if (ctx->mem_size_left < size) { |
| 107 | struct page *page = alloc_page(GFP_KERNEL | __GFP_ZERO); | 107 | struct page *page; |
| 108 | 108 | ||
| 109 | if (ctx->vm && ctx->vm_size_left < PAGE_SIZE) { | ||
| 110 | int ret = ctx->vm->reserve_mem(ctx->vm, ctx->vm->gran); | ||
| 111 | |||
| 112 | if (ret) | ||
| 113 | return NULL; | ||
| 114 | |||
| 115 | ctx->vm_size_left += ctx->vm->gran; | ||
| 116 | ctx->total_mem += ctx->vm->gran; | ||
| 117 | } | ||
| 118 | |||
| 119 | page = alloc_page(GFP_KERNEL | __GFP_ZERO); | ||
| 109 | if (!page) | 120 | if (!page) |
| 110 | return NULL; | 121 | return NULL; |
| 111 | 122 | ||
| 123 | if (ctx->vm) | ||
| 124 | ctx->vm_size_left -= PAGE_SIZE; | ||
| 125 | |||
| 112 | list_add_tail(&page->lru, &ctx->page_list); | 126 | list_add_tail(&page->lru, &ctx->page_list); |
| 113 | ctx->page_address = page_address(page); | 127 | ctx->page_address = page_address(page); |
| 114 | ctx->mem_size_left = PAGE_SIZE; | 128 | ctx->mem_size_left = PAGE_SIZE; |
| @@ -138,6 +152,11 @@ static void vmw_validation_mem_free(struct vmw_validation_context *ctx) | |||
| 138 | } | 152 | } |
| 139 | 153 | ||
| 140 | ctx->mem_size_left = 0; | 154 | ctx->mem_size_left = 0; |
| 155 | if (ctx->vm && ctx->total_mem) { | ||
| 156 | ctx->vm->unreserve_mem(ctx->vm, ctx->total_mem); | ||
| 157 | ctx->total_mem = 0; | ||
| 158 | ctx->vm_size_left = 0; | ||
| 159 | } | ||
| 141 | } | 160 | } |
| 142 | 161 | ||
| 143 | /** | 162 | /** |
