Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/external/bsd/drm2/dist/drm/i915 Just use uvm_map on the ...



details:   https://anonhg.NetBSD.org/src/rev/303b11cd5d20
branches:  trunk
changeset: 364538:303b11cd5d20
user:      riastradh <riastradh%NetBSD.org@localhost>
date:      Mon Aug 27 07:44:43 2018 +0000

description:
Just use uvm_map on the uvm object instead of futzing with pages.

diffstat:

 sys/external/bsd/drm2/dist/drm/i915/i915_cmd_parser.c |  41 ++++++++----------
 1 files changed, 18 insertions(+), 23 deletions(-)

diffs (98 lines):

diff -r 9d32dcb09ae2 -r 303b11cd5d20 sys/external/bsd/drm2/dist/drm/i915/i915_cmd_parser.c
--- a/sys/external/bsd/drm2/dist/drm/i915/i915_cmd_parser.c     Mon Aug 27 07:44:32 2018 +0000
+++ b/sys/external/bsd/drm2/dist/drm/i915/i915_cmd_parser.c     Mon Aug 27 07:44:43 2018 +0000
@@ -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 @@
 static u32 *vmap_batch(struct drm_i915_gem_object *obj,
                       unsigned start, unsigned len)
 {
+#ifdef __NetBSD__
+       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;
-#ifdef __NetBSD__
-       struct vm_page *page;
-#else
        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 @@
        }
 
        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 @@
        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 @@
 
 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 @@
        }
 
 #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



Home | Main Index | Thread Index | Old Index