Source-Changes-HG archive

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

[src/riastradh-drm2]: src/sys/external/bsd/drm2/dist/drm/i915 Convert struct ...



details:   https://anonhg.NetBSD.org/src/rev/c98dafa646c3
branches:  riastradh-drm2
changeset: 788291:c98dafa646c3
user:      riastradh <riastradh%NetBSD.org@localhost>
date:      Wed Jul 24 03:06:00 2013 +0000

description:
Convert struct intel_ringbuffer::irq_queue to drm waitqueues.

diffstat:

 sys/external/bsd/drm2/dist/drm/i915/i915_dma.c         |   6 ++++
 sys/external/bsd/drm2/dist/drm/i915/i915_gem.c         |  10 ++++++++
 sys/external/bsd/drm2/dist/drm/i915/i915_irq.c         |  22 ++++++++++++++++++
 sys/external/bsd/drm2/dist/drm/i915/intel_ringbuffer.c |   4 +++
 sys/external/bsd/drm2/dist/drm/i915/intel_ringbuffer.h |   4 +++
 5 files changed, 46 insertions(+), 0 deletions(-)

diffs (137 lines):

diff -r fd4cf94df0c5 -r c98dafa646c3 sys/external/bsd/drm2/dist/drm/i915/i915_dma.c
--- a/sys/external/bsd/drm2/dist/drm/i915/i915_dma.c    Wed Jul 24 03:05:41 2013 +0000
+++ b/sys/external/bsd/drm2/dist/drm/i915/i915_dma.c    Wed Jul 24 03:06:00 2013 +0000
@@ -802,8 +802,14 @@
                master_priv->sarea_priv->perf_boxes |= I915_BOX_WAIT;
 
        if (ring->irq_get(ring)) {
+#ifdef __NetBSD__
+               DRM_TIMED_WAIT_UNTIL(ret, &ring->irq_queue, &drm_global_mutex,
+                   3 * DRM_HZ,
+                   READ_BREADCRUMB(dev_priv) >= irq_nr);
+#else
                DRM_WAIT_ON(ret, ring->irq_queue, 3 * DRM_HZ,
                            READ_BREADCRUMB(dev_priv) >= irq_nr);
+#endif
                ring->irq_put(ring);
        } else if (wait_for(READ_BREADCRUMB(dev_priv) >= irq_nr, 3000))
                ret = -EBUSY;
diff -r fd4cf94df0c5 -r c98dafa646c3 sys/external/bsd/drm2/dist/drm/i915/i915_gem.c
--- a/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c    Wed Jul 24 03:05:41 2013 +0000
+++ b/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c    Wed Jul 24 03:06:00 2013 +0000
@@ -1028,6 +1028,15 @@
        (i915_seqno_passed(ring->get_seqno(ring, false), seqno) || \
        atomic_read(&dev_priv->mm.wedged))
        do {
+#ifdef __NetBSD__
+               /*
+                * XXX This wait is always interruptible; we should
+                * heed the flag `interruptible'.
+                */
+               DRM_TIMED_WAIT_UNTIL(end, &ring->irq_queue, &drm_global_mutex,
+                   timeout_jiffies,
+                   EXIT_COND);
+#else
                if (interruptible)
                        end = wait_event_interruptible_timeout(ring->irq_queue,
                                                               EXIT_COND,
@@ -1036,6 +1045,7 @@
                        end = wait_event_timeout(ring->irq_queue, EXIT_COND,
                                                 timeout_jiffies);
 
+#endif
                ret = i915_gem_check_wedge(dev_priv, interruptible);
                if (ret)
                        end = ret;
diff -r fd4cf94df0c5 -r c98dafa646c3 sys/external/bsd/drm2/dist/drm/i915/i915_irq.c
--- a/sys/external/bsd/drm2/dist/drm/i915/i915_irq.c    Wed Jul 24 03:05:41 2013 +0000
+++ b/sys/external/bsd/drm2/dist/drm/i915/i915_irq.c    Wed Jul 24 03:06:00 2013 +0000
@@ -353,7 +353,11 @@
 
        trace_i915_gem_request_complete(ring, ring->get_seqno(ring, false));
 
+#ifdef __NetBSD__
+       DRM_WAKEUP_ALL(&ring->irq_queue, &drm_global_mutex);
+#else
        wake_up_all(&ring->irq_queue);
+#endif
        if (i915_enable_hangcheck) {
                dev_priv->hangcheck_count = 0;
                mod_timer(&dev_priv->hangcheck_timer,
@@ -1151,7 +1155,12 @@
                error->instdone[ring->id] = I915_READ(INSTDONE);
        }
 
+#ifdef __NetBSD__
+       error->waiting[ring->id] = DRM_WAITERS_P(&ring->irq_queue,
+           &drm_global_mutex);
+#else
        error->waiting[ring->id] = waitqueue_active(&ring->irq_queue);
+#endif
        error->instpm[ring->id] = I915_READ(RING_INSTPM(ring->mmio_base));
        error->seqno[ring->id] = ring->get_seqno(ring, false);
        error->acthd[ring->id] = intel_ring_get_active_head(ring);
@@ -1466,7 +1475,11 @@
                 * Wakeup waiting processes so they don't hang
                 */
                for_each_ring(ring, dev_priv, i)
+#ifdef __NetBSD__
+                       DRM_WAKEUP_ALL(&ring->irq_queue, &drm_global_mutex);
+#else
                        wake_up_all(&ring->irq_queue);
+#endif
        }
 
        queue_work(dev_priv->wq, &dev_priv->error_work);
@@ -1671,12 +1684,21 @@
            i915_seqno_passed(ring->get_seqno(ring, false),
                              ring_last_seqno(ring))) {
                /* Issue a wake-up to catch stuck h/w. */
+#ifdef __NetBSD__
+               if (DRM_WAITERS_P(&ring->irq_queue, &drm_global_mutex)) {
+                       DRM_ERROR("Hangcheck timer elapsed... %s idle\n",
+                                 ring->name);
+                       DRM_WAKEUP_ALL(&ring->irq_queue, &drm_global_mutex);
+                       *err = true;
+               }
+#else
                if (waitqueue_active(&ring->irq_queue)) {
                        DRM_ERROR("Hangcheck timer elapsed... %s idle\n",
                                  ring->name);
                        wake_up_all(&ring->irq_queue);
                        *err = true;
                }
+#endif
                return true;
        }
        return false;
diff -r fd4cf94df0c5 -r c98dafa646c3 sys/external/bsd/drm2/dist/drm/i915/intel_ringbuffer.c
--- a/sys/external/bsd/drm2/dist/drm/i915/intel_ringbuffer.c    Wed Jul 24 03:05:41 2013 +0000
+++ b/sys/external/bsd/drm2/dist/drm/i915/intel_ringbuffer.c    Wed Jul 24 03:06:00 2013 +0000
@@ -1151,7 +1151,11 @@
        ring->size = 32 * PAGE_SIZE;
        memset(ring->sync_seqno, 0, sizeof(ring->sync_seqno));
 
+#ifdef __NetBSD__
+       DRM_INIT_WAITQUEUE(&ring->irq_queue, "i915irq");
+#else
        init_waitqueue_head(&ring->irq_queue);
+#endif
 
        if (I915_NEED_GFX_HWS(dev)) {
                ret = init_status_page(ring);
diff -r fd4cf94df0c5 -r c98dafa646c3 sys/external/bsd/drm2/dist/drm/i915/intel_ringbuffer.h
--- a/sys/external/bsd/drm2/dist/drm/i915/intel_ringbuffer.h    Wed Jul 24 03:05:41 2013 +0000
+++ b/sys/external/bsd/drm2/dist/drm/i915/intel_ringbuffer.h    Wed Jul 24 03:06:00 2013 +0000
@@ -133,7 +133,11 @@
        u32 outstanding_lazy_request;
        bool gpu_caches_dirty;
 
+#ifdef __NetBSD__
+       drm_waitqueue_t irq_queue;
+#else
        wait_queue_head_t irq_queue;
+#endif
 
        /**
         * Do an explicit TLB flush before MI_SET_CONTEXT



Home | Main Index | Thread Index | Old Index