notify_ring(dev, &dev_priv->ring[RCS]);
                if (gt_iir & GT_GEN6_BSD_USER_INTERRUPT)
                        notify_ring(dev, &dev_priv->ring[VCS]);
-               if (gt_iir & GT_BLT_USER_INTERRUPT)
+               if (gt_iir & GT_GEN6_BLT_USER_INTERRUPT)
                        notify_ring(dev, &dev_priv->ring[BCS]);
 
                if (gt_iir & (GT_GEN6_BLT_CS_ERROR_INTERRUPT |
 
        if (gt_iir & (GT_USER_INTERRUPT | GT_PIPE_NOTIFY))
                notify_ring(dev, &dev_priv->ring[RCS]);
-       if (gt_iir & GT_GEN6_BSD_USER_INTERRUPT)
+       if (gt_iir & GEN6_BSD_USER_INTERRUPT)
                notify_ring(dev, &dev_priv->ring[VCS]);
-       if (gt_iir & GT_BLT_USER_INTERRUPT)
+       if (gt_iir & GEN6_BLITTER_USER_INTERRUPT)
                notify_ring(dev, &dev_priv->ring[BCS]);
 
        if (de_iir & DE_GSE_IVB)
        atomic_inc(&dev_priv->irq_received);
 
        if (IS_GEN6(dev))
-               bsd_usr_interrupt = GT_GEN6_BSD_USER_INTERRUPT;
+               bsd_usr_interrupt = GEN6_BSD_USER_INTERRUPT;
 
        /* disable master interrupt before clearing iir  */
        de_ier = I915_READ(DEIER);
                notify_ring(dev, &dev_priv->ring[RCS]);
        if (gt_iir & bsd_usr_interrupt)
                notify_ring(dev, &dev_priv->ring[VCS]);
-       if (gt_iir & GT_BLT_USER_INTERRUPT)
+       if (gt_iir & GEN6_BLITTER_USER_INTERRUPT)
                notify_ring(dev, &dev_priv->ring[BCS]);
 
        if (de_iir & DE_GSE)
        if (IS_GEN6(dev))
                render_irqs =
                        GT_USER_INTERRUPT |
-                       GT_GEN6_BSD_USER_INTERRUPT |
-                       GT_BLT_USER_INTERRUPT;
+                       GEN6_BSD_USER_INTERRUPT |
+                       GEN6_BLITTER_USER_INTERRUPT;
        else
                render_irqs =
                        GT_USER_INTERRUPT |
        I915_WRITE(GTIIR, I915_READ(GTIIR));
        I915_WRITE(GTIMR, dev_priv->gt_irq_mask);
 
-       render_irqs = GT_USER_INTERRUPT | GT_GEN6_BSD_USER_INTERRUPT |
-               GT_BLT_USER_INTERRUPT;
+       render_irqs = GT_USER_INTERRUPT | GEN6_BSD_USER_INTERRUPT |
+               GEN6_BLITTER_USER_INTERRUPT;
        I915_WRITE(GTIER, render_irqs);
        POSTING_READ(GTIER);
 
 
        render_irqs = GT_GEN6_BLT_FLUSHDW_NOTIFY_INTERRUPT |
                GT_GEN6_BLT_CS_ERROR_INTERRUPT |
-               GT_BLT_USER_INTERRUPT |
+               GT_GEN6_BLT_USER_INTERRUPT |
                GT_GEN6_BSD_USER_INTERRUPT |
                GT_GEN6_BSD_CS_ERROR_INTERRUPT |
                GT_GEN7_L3_PARITY_ERROR_INTERRUPT |
 
 #define CACHE_MODE_1           0x7004 /* IVB+ */
 #define   PIXEL_SUBSPAN_COLLECT_OPT_DISABLE (1<<6)
 
-/* GEN6 interrupt control */
+/* GEN6 interrupt control
+ * Note that the per-ring interrupt bits do alias with the global interrupt bits
+ * in GTIMR. */
 #define GEN6_RENDER_HWSTAM     0x2098
 #define GEN6_RENDER_IMR                0x20a8
 #define   GEN6_RENDER_CONTEXT_SWITCH_INTERRUPT         (1 << 8)
 #define DEIIR   0x44008
 #define DEIER   0x4400c
 
-/* GT interrupt */
+/* GT interrupt.
+ * Note that for gen6+ the ring-specific interrupt bits do alias with the
+ * corresponding bits in the per-ring interrupt control registers. */
 #define GT_GEN6_BLT_FLUSHDW_NOTIFY_INTERRUPT   (1 << 26)
 #define GT_GEN6_BLT_CS_ERROR_INTERRUPT         (1 << 25)
-#define GT_BLT_USER_INTERRUPT                  (1 << 22)
+#define GT_GEN6_BLT_USER_INTERRUPT             (1 << 22)
 #define GT_GEN6_BSD_CS_ERROR_INTERRUPT         (1 << 15)
 #define GT_GEN6_BSD_USER_INTERRUPT             (1 << 12)
-#define GT_BSD_USER_INTERRUPT                  (1 << 5)
+#define GT_BSD_USER_INTERRUPT                  (1 << 5) /* ilk only */
 #define GT_GEN7_L3_PARITY_ERROR_INTERRUPT      (1 << 5)
 #define GT_PIPE_NOTIFY                         (1 << 4)
 #define GT_RENDER_CS_ERROR_INTERRUPT           (1 << 3)
 
 }
 
 static bool
-gen6_ring_get_irq(struct intel_ring_buffer *ring, u32 gflag, u32 rflag)
+gen6_ring_get_irq(struct intel_ring_buffer *ring, u32 mask)
 {
        struct drm_device *dev = ring->dev;
        drm_i915_private_t *dev_priv = dev->dev_private;
 
        spin_lock(&ring->irq_lock);
        if (ring->irq_refcount++ == 0) {
-               ring->irq_mask &= ~rflag;
+               ring->irq_mask &= ~mask;
                I915_WRITE_IMR(ring, ring->irq_mask);
-               ironlake_enable_irq(dev_priv, gflag);
+               ironlake_enable_irq(dev_priv, mask);
        }
        spin_unlock(&ring->irq_lock);
 
 }
 
 static void
-gen6_ring_put_irq(struct intel_ring_buffer *ring, u32 gflag, u32 rflag)
+gen6_ring_put_irq(struct intel_ring_buffer *ring, u32 mask)
 {
        struct drm_device *dev = ring->dev;
        drm_i915_private_t *dev_priv = dev->dev_private;
 
        spin_lock(&ring->irq_lock);
        if (--ring->irq_refcount == 0) {
-               ring->irq_mask |= rflag;
+               ring->irq_mask |= mask;
                I915_WRITE_IMR(ring, ring->irq_mask);
-               ironlake_disable_irq(dev_priv, gflag);
+               ironlake_disable_irq(dev_priv, mask);
        }
        spin_unlock(&ring->irq_lock);
 
 static bool
 gen6_render_ring_get_irq(struct intel_ring_buffer *ring)
 {
-       return gen6_ring_get_irq(ring,
-                                GT_USER_INTERRUPT,
-                                GEN6_RENDER_USER_INTERRUPT);
+       return gen6_ring_get_irq(ring, GT_USER_INTERRUPT);
 }
 
 static void
 gen6_render_ring_put_irq(struct intel_ring_buffer *ring)
 {
-       return gen6_ring_put_irq(ring,
-                                GT_USER_INTERRUPT,
-                                GEN6_RENDER_USER_INTERRUPT);
+       return gen6_ring_put_irq(ring, GT_USER_INTERRUPT);
 }
 
 static bool
 gen6_bsd_ring_get_irq(struct intel_ring_buffer *ring)
 {
-       return gen6_ring_get_irq(ring,
-                                GT_GEN6_BSD_USER_INTERRUPT,
-                                GEN6_BSD_USER_INTERRUPT);
+       return gen6_ring_get_irq(ring, GEN6_BSD_USER_INTERRUPT);
 }
 
 static void
 gen6_bsd_ring_put_irq(struct intel_ring_buffer *ring)
 {
-       return gen6_ring_put_irq(ring,
-                                GT_GEN6_BSD_USER_INTERRUPT,
-                                GEN6_BSD_USER_INTERRUPT);
+       return gen6_ring_put_irq(ring, GEN6_BSD_USER_INTERRUPT);
 }
 
 /* ring buffer for Video Codec for Gen6+ */
 static bool
 blt_ring_get_irq(struct intel_ring_buffer *ring)
 {
-       return gen6_ring_get_irq(ring,
-                                GT_BLT_USER_INTERRUPT,
-                                GEN6_BLITTER_USER_INTERRUPT);
+       return gen6_ring_get_irq(ring, GEN6_BLITTER_USER_INTERRUPT);
 }
 
 static void
 blt_ring_put_irq(struct intel_ring_buffer *ring)
 {
-       gen6_ring_put_irq(ring,
-                         GT_BLT_USER_INTERRUPT,
-                         GEN6_BLITTER_USER_INTERRUPT);
+       gen6_ring_put_irq(ring, GEN6_BLITTER_USER_INTERRUPT);
 }
 
 static int blt_ring_flush(struct intel_ring_buffer *ring,