Module Name: src
Committed By: riastradh
Date: Mon Aug 27 07:44:43 UTC 2018
Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915: i915_cmd_parser.c
Log Message:
Just use uvm_map on the uvm object instead of futzing with pages.
To generate a diff of this commit:
cvs rdiff -u -r1.7 -r1.8 \
src/sys/external/bsd/drm2/dist/drm/i915/i915_cmd_parser.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/external/bsd/drm2/dist/drm/i915/i915_cmd_parser.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/i915_cmd_parser.c:1.7 src/sys/external/bsd/drm2/dist/drm/i915/i915_cmd_parser.c:1.8
--- src/sys/external/bsd/drm2/dist/drm/i915/i915_cmd_parser.c:1.7 Mon Aug 27 07:17:35 2018
+++ src/sys/external/bsd/drm2/dist/drm/i915/i915_cmd_parser.c Mon Aug 27 07:44:43 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: i915_cmd_parser.c,v 1.7 2018/08/27 07:17:35 riastradh Exp $ */
+/* $NetBSD: i915_cmd_parser.c,v 1.8 2018/08/27 07:44:43 riastradh Exp $ */
/*
* Copyright © 2013 Intel Corporation
@@ -28,7 +28,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: i915_cmd_parser.c,v 1.7 2018/08/27 07:17:35 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i915_cmd_parser.c,v 1.8 2018/08/27 07:44:43 riastradh Exp $");
#include "i915_drv.h"
@@ -863,13 +863,22 @@ find_reg(const struct drm_i915_reg_descr
static u32 *vmap_batch(struct drm_i915_gem_object *obj,
unsigned start, unsigned len)
{
- int i;
- void *addr = NULL;
#ifdef __NetBSD__
- struct vm_page *page;
+ vaddr_t va = 0;
+ int error;
+
+ /* XXX errno NetBSD->Linux */
+ error = uvm_map(kernel_map, &va, len, obj->base.filp, start,
+ sizeof(u32), UVM_MAPFLAG(UVM_PROT_RW, UVM_PROT_RW, UVM_INH_NONE,
+ UVM_ADV_SEQUENTIAL, UVM_FLAG_NOWAIT));
+ if (error)
+ return NULL;
+
+ return (void *)va;
#else
+ int i;
+ void *addr = NULL;
struct sg_page_iter sg_iter;
-#endif
int first_page = start >> PAGE_SHIFT;
int last_page = (len + start + 4095) >> PAGE_SHIFT;
int npages = last_page - first_page;
@@ -882,26 +891,11 @@ static u32 *vmap_batch(struct drm_i915_g
}
i = 0;
-#ifdef __NetBSD__
- /*
- * XXX Why do we work through the page queue instead of just
- * using uvm_map?
- */
- TAILQ_FOREACH(page, &obj->pageq, pageq.queue) {
- if (first_page-- > 0)
- continue;
- if (i == npages)
- break;
- pages[i] = container_of(page, struct page, p_vmp);
- i++;
- }
-#else
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;
}
-#endif
addr = vmap(pages, i, 0, PAGE_KERNEL);
if (addr == NULL) {
@@ -913,6 +907,7 @@ finish:
if (pages)
drm_free_large(pages);
return (u32*)addr;
+#endif /* __NetBSD__ */
}
/* Returns a vmap'd pointer to dest_obj, which the caller must unmap */
@@ -967,7 +962,7 @@ static u32 *copy_batch(struct drm_i915_g
unmap_src:
#ifdef __NetBSD__
- vunmap(src_base, batch_len / PAGE_SIZE);
+ uvm_unmap(kernel_map, (vaddr_t)src_base, batch_len);
#else
vunmap(src_base);
#endif
@@ -1223,7 +1218,7 @@ int i915_parse_cmds(struct intel_engine_
}
#ifdef __NetBSD__
- vunmap(batch_base, batch_obj->base.size / PAGE_SIZE);
+ uvm_unmap(kernel_map, (vaddr_t)batch_base, batch_obj->base.size);
#else
vunmap(batch_base);
#endif