Lines Matching refs:ring
979 static void notify_ring(struct intel_engine_cs *ring) in notify_ring() argument
981 if (!intel_ring_initialized(ring)) in notify_ring()
984 trace_i915_gem_request_notify(ring); in notify_ring()
986 wake_up_all(&ring->irq_queue); in notify_ring()
1064 struct intel_engine_cs *ring; in any_waiters() local
1067 for_each_ring(ring, dev_priv, i) in any_waiters()
1068 if (ring->irq_refcount) in any_waiters()
1266 notify_ring(&dev_priv->ring[RCS]); in ilk_gt_irq_handler()
1268 notify_ring(&dev_priv->ring[VCS]); in ilk_gt_irq_handler()
1278 notify_ring(&dev_priv->ring[RCS]); in snb_gt_irq_handler()
1280 notify_ring(&dev_priv->ring[VCS]); in snb_gt_irq_handler()
1282 notify_ring(&dev_priv->ring[BCS]); in snb_gt_irq_handler()
1305 intel_lrc_irq_handler(&dev_priv->ring[RCS]); in gen8_gt_irq_handler()
1307 notify_ring(&dev_priv->ring[RCS]); in gen8_gt_irq_handler()
1310 intel_lrc_irq_handler(&dev_priv->ring[BCS]); in gen8_gt_irq_handler()
1312 notify_ring(&dev_priv->ring[BCS]); in gen8_gt_irq_handler()
1324 intel_lrc_irq_handler(&dev_priv->ring[VCS]); in gen8_gt_irq_handler()
1326 notify_ring(&dev_priv->ring[VCS]); in gen8_gt_irq_handler()
1329 intel_lrc_irq_handler(&dev_priv->ring[VCS2]); in gen8_gt_irq_handler()
1331 notify_ring(&dev_priv->ring[VCS2]); in gen8_gt_irq_handler()
1343 intel_lrc_irq_handler(&dev_priv->ring[VECS]); in gen8_gt_irq_handler()
1345 notify_ring(&dev_priv->ring[VECS]); in gen8_gt_irq_handler()
1605 notify_ring(&dev_priv->ring[VECS]); in gen6_rps_irq_handler()
2375 struct intel_engine_cs *ring; in i915_error_wake_up() local
2386 for_each_ring(ring, dev_priv, i) in i915_error_wake_up()
2387 wake_up_all(&ring->irq_queue); in i915_error_wake_up()
2734 ring_idle(struct intel_engine_cs *ring, u32 seqno) in ring_idle() argument
2736 return (list_empty(&ring->request_list) || in ring_idle()
2737 i915_seqno_passed(seqno, ring->last_submitted_seqno)); in ring_idle()
2753 semaphore_wait_to_signaller_ring(struct intel_engine_cs *ring, u32 ipehr, u64 offset) in semaphore_wait_to_signaller_ring() argument
2755 struct drm_i915_private *dev_priv = ring->dev->dev_private; in semaphore_wait_to_signaller_ring()
2761 if (ring == signaller) in semaphore_wait_to_signaller_ring()
2764 if (offset == signaller->semaphore.signal_ggtt[ring->id]) in semaphore_wait_to_signaller_ring()
2771 if(ring == signaller) in semaphore_wait_to_signaller_ring()
2774 if (sync_bits == signaller->semaphore.mbox.wait[ring->id]) in semaphore_wait_to_signaller_ring()
2780 ring->id, ipehr, offset); in semaphore_wait_to_signaller_ring()
2786 semaphore_waits_for(struct intel_engine_cs *ring, u32 *seqno) in semaphore_waits_for() argument
2788 struct drm_i915_private *dev_priv = ring->dev->dev_private; in semaphore_waits_for()
2810 if (ring->buffer == NULL) in semaphore_waits_for()
2813 ipehr = I915_READ(RING_IPEHR(ring->mmio_base)); in semaphore_waits_for()
2814 if (!ipehr_is_semaphore_wait(ring->dev, ipehr)) in semaphore_waits_for()
2825 head = I915_READ_HEAD(ring) & HEAD_ADDR; in semaphore_waits_for()
2826 backwards = (INTEL_INFO(ring->dev)->gen >= 8) ? 5 : 4; in semaphore_waits_for()
2834 head &= ring->buffer->size - 1; in semaphore_waits_for()
2837 cmd = ioread32(ring->buffer->virtual_start + head); in semaphore_waits_for()
2847 *seqno = ioread32(ring->buffer->virtual_start + head + 4) + 1; in semaphore_waits_for()
2848 if (INTEL_INFO(ring->dev)->gen >= 8) { in semaphore_waits_for()
2849 offset = ioread32(ring->buffer->virtual_start + head + 12); in semaphore_waits_for()
2851 offset = ioread32(ring->buffer->virtual_start + head + 8); in semaphore_waits_for()
2853 return semaphore_wait_to_signaller_ring(ring, ipehr, offset); in semaphore_waits_for()
2856 static int semaphore_passed(struct intel_engine_cs *ring) in semaphore_passed() argument
2858 struct drm_i915_private *dev_priv = ring->dev->dev_private; in semaphore_passed()
2862 ring->hangcheck.deadlock++; in semaphore_passed()
2864 signaller = semaphore_waits_for(ring, &seqno); in semaphore_passed()
2885 struct intel_engine_cs *ring; in semaphore_clear_deadlocks() local
2888 for_each_ring(ring, dev_priv, i) in semaphore_clear_deadlocks()
2889 ring->hangcheck.deadlock = 0; in semaphore_clear_deadlocks()
2893 ring_stuck(struct intel_engine_cs *ring, u64 acthd) in ring_stuck() argument
2895 struct drm_device *dev = ring->dev; in ring_stuck()
2899 if (acthd != ring->hangcheck.acthd) { in ring_stuck()
2900 if (acthd > ring->hangcheck.max_acthd) { in ring_stuck()
2901 ring->hangcheck.max_acthd = acthd; in ring_stuck()
2916 tmp = I915_READ_CTL(ring); in ring_stuck()
2920 ring->name); in ring_stuck()
2921 I915_WRITE_CTL(ring, tmp); in ring_stuck()
2926 switch (semaphore_passed(ring)) { in ring_stuck()
2932 ring->name); in ring_stuck()
2933 I915_WRITE_CTL(ring, tmp); in ring_stuck()
2957 struct intel_engine_cs *ring; in i915_hangcheck_elapsed() local
2968 for_each_ring(ring, dev_priv, i) { in i915_hangcheck_elapsed()
2975 seqno = ring->get_seqno(ring, false); in i915_hangcheck_elapsed()
2976 acthd = intel_ring_get_active_head(ring); in i915_hangcheck_elapsed()
2978 if (ring->hangcheck.seqno == seqno) { in i915_hangcheck_elapsed()
2979 if (ring_idle(ring, seqno)) { in i915_hangcheck_elapsed()
2980 ring->hangcheck.action = HANGCHECK_IDLE; in i915_hangcheck_elapsed()
2982 if (waitqueue_active(&ring->irq_queue)) { in i915_hangcheck_elapsed()
2984 if (!test_and_set_bit(ring->id, &dev_priv->gpu_error.missed_irq_rings)) { in i915_hangcheck_elapsed()
2985 if (!(dev_priv->gpu_error.test_irq_rings & intel_ring_flag(ring))) in i915_hangcheck_elapsed()
2987 ring->name); in i915_hangcheck_elapsed()
2990 ring->name); in i915_hangcheck_elapsed()
2991 wake_up_all(&ring->irq_queue); in i915_hangcheck_elapsed()
2994 ring->hangcheck.score += BUSY; in i915_hangcheck_elapsed()
3013 ring->hangcheck.action = ring_stuck(ring, in i915_hangcheck_elapsed()
3016 switch (ring->hangcheck.action) { in i915_hangcheck_elapsed()
3022 ring->hangcheck.score += BUSY; in i915_hangcheck_elapsed()
3025 ring->hangcheck.score += KICK; in i915_hangcheck_elapsed()
3028 ring->hangcheck.score += HUNG; in i915_hangcheck_elapsed()
3034 ring->hangcheck.action = HANGCHECK_ACTIVE; in i915_hangcheck_elapsed()
3039 if (ring->hangcheck.score > 0) in i915_hangcheck_elapsed()
3040 ring->hangcheck.score--; in i915_hangcheck_elapsed()
3042 ring->hangcheck.acthd = ring->hangcheck.max_acthd = 0; in i915_hangcheck_elapsed()
3045 ring->hangcheck.seqno = seqno; in i915_hangcheck_elapsed()
3046 ring->hangcheck.acthd = acthd; in i915_hangcheck_elapsed()
3050 for_each_ring(ring, dev_priv, i) { in i915_hangcheck_elapsed()
3051 if (ring->hangcheck.score >= HANGCHECK_SCORE_RING_HUNG) { in i915_hangcheck_elapsed()
3054 ring->name); in i915_hangcheck_elapsed()
3891 notify_ring(&dev_priv->ring[RCS]); in i8xx_irq_handler()
4080 notify_ring(&dev_priv->ring[RCS]); in i915_irq_handler()
4305 notify_ring(&dev_priv->ring[RCS]); in i965_irq_handler()
4307 notify_ring(&dev_priv->ring[VCS]); in i965_irq_handler()