|
@@ -1583,44 +1583,6 @@ static uint32_t find_bb_size(struct parser_exec_state *s)
|
|
return bb_size;
|
|
return bb_size;
|
|
}
|
|
}
|
|
|
|
|
|
-static u32 *vmap_batch(struct drm_i915_gem_object *obj,
|
|
|
|
- unsigned int start, unsigned int len)
|
|
|
|
-{
|
|
|
|
- int i;
|
|
|
|
- void *addr = NULL;
|
|
|
|
- struct sg_page_iter sg_iter;
|
|
|
|
- int first_page = start >> PAGE_SHIFT;
|
|
|
|
- int last_page = (len + start + 4095) >> PAGE_SHIFT;
|
|
|
|
- int npages = last_page - first_page;
|
|
|
|
- struct page **pages;
|
|
|
|
-
|
|
|
|
- pages = drm_malloc_ab(npages, sizeof(*pages));
|
|
|
|
- if (pages == NULL) {
|
|
|
|
- DRM_DEBUG_DRIVER("Failed to get space for pages\n");
|
|
|
|
- goto finish;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- i = 0;
|
|
|
|
- for_each_sg_page(obj->pages->sgl, &sg_iter, obj->pages->nents,
|
|
|
|
- first_page) {
|
|
|
|
- pages[i++] = sg_page_iter_page(&sg_iter);
|
|
|
|
- if (i == npages)
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- addr = vmap(pages, i, 0, PAGE_KERNEL);
|
|
|
|
- if (addr == NULL) {
|
|
|
|
- DRM_DEBUG_DRIVER("Failed to vmap pages\n");
|
|
|
|
- goto finish;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-finish:
|
|
|
|
- if (pages)
|
|
|
|
- drm_free_large(pages);
|
|
|
|
- return (u32 *)addr;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-
|
|
|
|
static int perform_bb_shadow(struct parser_exec_state *s)
|
|
static int perform_bb_shadow(struct parser_exec_state *s)
|
|
{
|
|
{
|
|
struct intel_shadow_bb_entry *entry_obj;
|
|
struct intel_shadow_bb_entry *entry_obj;
|