Loading drivers/gpu/drm/i915/i915_drv.h +4 −4 Original line number Diff line number Diff line Loading @@ -1041,7 +1041,7 @@ int i915_gem_do_init(struct drm_device *dev, unsigned long start, unsigned long end); int i915_gpu_idle(struct drm_device *dev); int i915_gem_idle(struct drm_device *dev); uint32_t i915_add_request(struct drm_device *dev, int i915_add_request(struct drm_device *dev, struct drm_file *file_priv, struct drm_i915_gem_request *request, struct intel_ring_buffer *ring); Loading drivers/gpu/drm/i915/i915_gem.c +24 −12 Original line number Diff line number Diff line Loading @@ -1683,7 +1683,7 @@ i915_gem_process_flushing_list(struct drm_device *dev, } } uint32_t int i915_add_request(struct drm_device *dev, struct drm_file *file, struct drm_i915_gem_request *request, Loading @@ -1693,17 +1693,17 @@ i915_add_request(struct drm_device *dev, struct drm_i915_file_private *file_priv = NULL; uint32_t seqno; int was_empty; int ret; BUG_ON(request == NULL); if (file != NULL) file_priv = file->driver_priv; if (request == NULL) { request = kzalloc(sizeof(*request), GFP_KERNEL); if (request == NULL) return 0; } ret = ring->add_request(ring, &seqno); if (ret) return ret; seqno = ring->add_request(ring, 0); ring->outstanding_lazy_request = false; request->seqno = seqno; Loading @@ -1727,7 +1727,7 @@ i915_add_request(struct drm_device *dev, queue_delayed_work(dev_priv->wq, &dev_priv->mm.retire_work, HZ); } return seqno; return 0; } /** Loading Loading @@ -1964,9 +1964,19 @@ i915_do_wait_request(struct drm_device *dev, uint32_t seqno, return -EAGAIN; if (ring->outstanding_lazy_request) { seqno = i915_add_request(dev, NULL, NULL, ring); if (seqno == 0) struct drm_i915_gem_request *request; request = kzalloc(sizeof(*request), GFP_KERNEL); if (request == NULL) return -ENOMEM; ret = i915_add_request(dev, NULL, request, ring); if (ret) { kfree(request); return ret; } seqno = request->seqno; } BUG_ON(seqno == dev_priv->next_seqno); Loading Loading @@ -3844,7 +3854,9 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data, */ i915_retire_commands(dev, ring); i915_add_request(dev, file, request, ring); if (i915_add_request(dev, file, request, ring)) ring->outstanding_lazy_request = true; else request = NULL; err: Loading drivers/gpu/drm/i915/intel_overlay.c +13 −7 Original line number Diff line number Diff line Loading @@ -221,11 +221,12 @@ static int intel_overlay_do_wait_request(struct intel_overlay *overlay, int ret; BUG_ON(overlay->last_flip_req); overlay->last_flip_req = i915_add_request(dev, NULL, request, &dev_priv->render_ring); if (overlay->last_flip_req == 0) return -ENOMEM; ret = i915_add_request(dev, NULL, request, &dev_priv->render_ring); if (ret) { kfree(request); return ret; } overlay->last_flip_req = request->seqno; overlay->flip_tail = tail; ret = i915_do_wait_request(dev, overlay->last_flip_req, true, Loading Loading @@ -363,8 +364,13 @@ static int intel_overlay_continue(struct intel_overlay *overlay, OUT_RING(flip_addr); ADVANCE_LP_RING(); overlay->last_flip_req = i915_add_request(dev, NULL, request, &dev_priv->render_ring); ret = i915_add_request(dev, NULL, request, &dev_priv->render_ring); if (ret) { kfree(request); return ret; } overlay->last_flip_req = request->seqno; return 0; } Loading drivers/gpu/drm/i915/intel_ringbuffer.c +68 −60 Original line number Diff line number Diff line Loading @@ -234,18 +234,20 @@ do { \ * * Returned sequence numbers are nonzero on success. */ static u32 static int render_ring_add_request(struct intel_ring_buffer *ring, u32 flush_domains) u32 *result) { struct drm_device *dev = ring->dev; drm_i915_private_t *dev_priv = dev->dev_private; u32 seqno; seqno = i915_gem_get_seqno(dev); u32 seqno = i915_gem_get_seqno(dev); int ret; if (IS_GEN6(dev)) { if (intel_ring_begin(ring, 6) == 0) { ret = intel_ring_begin(ring, 6); if (ret) return ret; intel_ring_emit(ring, GFX_OP_PIPE_CONTROL | 3); intel_ring_emit(ring, PIPE_CONTROL_QW_WRITE | PIPE_CONTROL_WC_FLUSH | PIPE_CONTROL_IS_FLUSH | Loading @@ -254,8 +256,6 @@ render_ring_add_request(struct intel_ring_buffer *ring, intel_ring_emit(ring, seqno); intel_ring_emit(ring, 0); intel_ring_emit(ring, 0); intel_ring_advance(ring); } } else if (HAS_PIPE_CONTROL(dev)) { u32 scratch_addr = dev_priv->seqno_gfx_addr + 128; Loading @@ -264,7 +264,10 @@ render_ring_add_request(struct intel_ring_buffer *ring, * PIPE_NOTIFY buffers out to memory before requesting * an interrupt. */ if (intel_ring_begin(ring, 32) == 0) { ret = intel_ring_begin(ring, 32); if (ret) return ret; intel_ring_emit(ring, GFX_OP_PIPE_CONTROL | PIPE_CONTROL_QW_WRITE | PIPE_CONTROL_WC_FLUSH | PIPE_CONTROL_TC_FLUSH); intel_ring_emit(ring, dev_priv->seqno_gfx_addr | PIPE_CONTROL_GLOBAL_GTT); Loading @@ -287,19 +290,21 @@ render_ring_add_request(struct intel_ring_buffer *ring, intel_ring_emit(ring, dev_priv->seqno_gfx_addr | PIPE_CONTROL_GLOBAL_GTT); intel_ring_emit(ring, seqno); intel_ring_emit(ring, 0); intel_ring_advance(ring); } } else { if (intel_ring_begin(ring, 4) == 0) { ret = intel_ring_begin(ring, 4); if (ret) return ret; intel_ring_emit(ring, MI_STORE_DWORD_INDEX); intel_ring_emit(ring, I915_GEM_HWS_INDEX << MI_STORE_DWORD_INDEX_SHIFT); intel_ring_emit(ring, seqno); intel_ring_emit(ring, MI_USER_INTERRUPT); intel_ring_advance(ring); } } return seqno; intel_ring_advance(ring); *result = seqno; return 0; } static u32 Loading Loading @@ -370,25 +375,28 @@ bsd_ring_flush(struct intel_ring_buffer *ring, } } static u32 static int ring_add_request(struct intel_ring_buffer *ring, u32 flush_domains) u32 *result) { u32 seqno; int ret; ret = intel_ring_begin(ring, 4); if (ret) return ret; seqno = i915_gem_get_seqno(ring->dev); if (intel_ring_begin(ring, 4) == 0) { intel_ring_emit(ring, MI_STORE_DWORD_INDEX); intel_ring_emit(ring, I915_GEM_HWS_INDEX << MI_STORE_DWORD_INDEX_SHIFT); intel_ring_emit(ring, seqno); intel_ring_emit(ring, MI_USER_INTERRUPT); intel_ring_advance(ring); } DRM_DEBUG_DRIVER("%s %d\n", ring->name, seqno); return seqno; *result = seqno; return 0; } static void Loading drivers/gpu/drm/i915/intel_ringbuffer.h +2 −2 Original line number Diff line number Diff line Loading @@ -48,8 +48,8 @@ struct intel_ring_buffer { void (*flush)(struct intel_ring_buffer *ring, u32 invalidate_domains, u32 flush_domains); u32 (*add_request)(struct intel_ring_buffer *ring, u32 flush_domains); int (*add_request)(struct intel_ring_buffer *ring, u32 *seqno); u32 (*get_seqno)(struct intel_ring_buffer *ring); int (*dispatch_execbuffer)(struct intel_ring_buffer *ring, struct drm_i915_gem_execbuffer2 *exec, Loading Loading
drivers/gpu/drm/i915/i915_drv.h +4 −4 Original line number Diff line number Diff line Loading @@ -1041,7 +1041,7 @@ int i915_gem_do_init(struct drm_device *dev, unsigned long start, unsigned long end); int i915_gpu_idle(struct drm_device *dev); int i915_gem_idle(struct drm_device *dev); uint32_t i915_add_request(struct drm_device *dev, int i915_add_request(struct drm_device *dev, struct drm_file *file_priv, struct drm_i915_gem_request *request, struct intel_ring_buffer *ring); Loading
drivers/gpu/drm/i915/i915_gem.c +24 −12 Original line number Diff line number Diff line Loading @@ -1683,7 +1683,7 @@ i915_gem_process_flushing_list(struct drm_device *dev, } } uint32_t int i915_add_request(struct drm_device *dev, struct drm_file *file, struct drm_i915_gem_request *request, Loading @@ -1693,17 +1693,17 @@ i915_add_request(struct drm_device *dev, struct drm_i915_file_private *file_priv = NULL; uint32_t seqno; int was_empty; int ret; BUG_ON(request == NULL); if (file != NULL) file_priv = file->driver_priv; if (request == NULL) { request = kzalloc(sizeof(*request), GFP_KERNEL); if (request == NULL) return 0; } ret = ring->add_request(ring, &seqno); if (ret) return ret; seqno = ring->add_request(ring, 0); ring->outstanding_lazy_request = false; request->seqno = seqno; Loading @@ -1727,7 +1727,7 @@ i915_add_request(struct drm_device *dev, queue_delayed_work(dev_priv->wq, &dev_priv->mm.retire_work, HZ); } return seqno; return 0; } /** Loading Loading @@ -1964,9 +1964,19 @@ i915_do_wait_request(struct drm_device *dev, uint32_t seqno, return -EAGAIN; if (ring->outstanding_lazy_request) { seqno = i915_add_request(dev, NULL, NULL, ring); if (seqno == 0) struct drm_i915_gem_request *request; request = kzalloc(sizeof(*request), GFP_KERNEL); if (request == NULL) return -ENOMEM; ret = i915_add_request(dev, NULL, request, ring); if (ret) { kfree(request); return ret; } seqno = request->seqno; } BUG_ON(seqno == dev_priv->next_seqno); Loading Loading @@ -3844,7 +3854,9 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data, */ i915_retire_commands(dev, ring); i915_add_request(dev, file, request, ring); if (i915_add_request(dev, file, request, ring)) ring->outstanding_lazy_request = true; else request = NULL; err: Loading
drivers/gpu/drm/i915/intel_overlay.c +13 −7 Original line number Diff line number Diff line Loading @@ -221,11 +221,12 @@ static int intel_overlay_do_wait_request(struct intel_overlay *overlay, int ret; BUG_ON(overlay->last_flip_req); overlay->last_flip_req = i915_add_request(dev, NULL, request, &dev_priv->render_ring); if (overlay->last_flip_req == 0) return -ENOMEM; ret = i915_add_request(dev, NULL, request, &dev_priv->render_ring); if (ret) { kfree(request); return ret; } overlay->last_flip_req = request->seqno; overlay->flip_tail = tail; ret = i915_do_wait_request(dev, overlay->last_flip_req, true, Loading Loading @@ -363,8 +364,13 @@ static int intel_overlay_continue(struct intel_overlay *overlay, OUT_RING(flip_addr); ADVANCE_LP_RING(); overlay->last_flip_req = i915_add_request(dev, NULL, request, &dev_priv->render_ring); ret = i915_add_request(dev, NULL, request, &dev_priv->render_ring); if (ret) { kfree(request); return ret; } overlay->last_flip_req = request->seqno; return 0; } Loading
drivers/gpu/drm/i915/intel_ringbuffer.c +68 −60 Original line number Diff line number Diff line Loading @@ -234,18 +234,20 @@ do { \ * * Returned sequence numbers are nonzero on success. */ static u32 static int render_ring_add_request(struct intel_ring_buffer *ring, u32 flush_domains) u32 *result) { struct drm_device *dev = ring->dev; drm_i915_private_t *dev_priv = dev->dev_private; u32 seqno; seqno = i915_gem_get_seqno(dev); u32 seqno = i915_gem_get_seqno(dev); int ret; if (IS_GEN6(dev)) { if (intel_ring_begin(ring, 6) == 0) { ret = intel_ring_begin(ring, 6); if (ret) return ret; intel_ring_emit(ring, GFX_OP_PIPE_CONTROL | 3); intel_ring_emit(ring, PIPE_CONTROL_QW_WRITE | PIPE_CONTROL_WC_FLUSH | PIPE_CONTROL_IS_FLUSH | Loading @@ -254,8 +256,6 @@ render_ring_add_request(struct intel_ring_buffer *ring, intel_ring_emit(ring, seqno); intel_ring_emit(ring, 0); intel_ring_emit(ring, 0); intel_ring_advance(ring); } } else if (HAS_PIPE_CONTROL(dev)) { u32 scratch_addr = dev_priv->seqno_gfx_addr + 128; Loading @@ -264,7 +264,10 @@ render_ring_add_request(struct intel_ring_buffer *ring, * PIPE_NOTIFY buffers out to memory before requesting * an interrupt. */ if (intel_ring_begin(ring, 32) == 0) { ret = intel_ring_begin(ring, 32); if (ret) return ret; intel_ring_emit(ring, GFX_OP_PIPE_CONTROL | PIPE_CONTROL_QW_WRITE | PIPE_CONTROL_WC_FLUSH | PIPE_CONTROL_TC_FLUSH); intel_ring_emit(ring, dev_priv->seqno_gfx_addr | PIPE_CONTROL_GLOBAL_GTT); Loading @@ -287,19 +290,21 @@ render_ring_add_request(struct intel_ring_buffer *ring, intel_ring_emit(ring, dev_priv->seqno_gfx_addr | PIPE_CONTROL_GLOBAL_GTT); intel_ring_emit(ring, seqno); intel_ring_emit(ring, 0); intel_ring_advance(ring); } } else { if (intel_ring_begin(ring, 4) == 0) { ret = intel_ring_begin(ring, 4); if (ret) return ret; intel_ring_emit(ring, MI_STORE_DWORD_INDEX); intel_ring_emit(ring, I915_GEM_HWS_INDEX << MI_STORE_DWORD_INDEX_SHIFT); intel_ring_emit(ring, seqno); intel_ring_emit(ring, MI_USER_INTERRUPT); intel_ring_advance(ring); } } return seqno; intel_ring_advance(ring); *result = seqno; return 0; } static u32 Loading Loading @@ -370,25 +375,28 @@ bsd_ring_flush(struct intel_ring_buffer *ring, } } static u32 static int ring_add_request(struct intel_ring_buffer *ring, u32 flush_domains) u32 *result) { u32 seqno; int ret; ret = intel_ring_begin(ring, 4); if (ret) return ret; seqno = i915_gem_get_seqno(ring->dev); if (intel_ring_begin(ring, 4) == 0) { intel_ring_emit(ring, MI_STORE_DWORD_INDEX); intel_ring_emit(ring, I915_GEM_HWS_INDEX << MI_STORE_DWORD_INDEX_SHIFT); intel_ring_emit(ring, seqno); intel_ring_emit(ring, MI_USER_INTERRUPT); intel_ring_advance(ring); } DRM_DEBUG_DRIVER("%s %d\n", ring->name, seqno); return seqno; *result = seqno; return 0; } static void Loading
drivers/gpu/drm/i915/intel_ringbuffer.h +2 −2 Original line number Diff line number Diff line Loading @@ -48,8 +48,8 @@ struct intel_ring_buffer { void (*flush)(struct intel_ring_buffer *ring, u32 invalidate_domains, u32 flush_domains); u32 (*add_request)(struct intel_ring_buffer *ring, u32 flush_domains); int (*add_request)(struct intel_ring_buffer *ring, u32 *seqno); u32 (*get_seqno)(struct intel_ring_buffer *ring); int (*dispatch_execbuffer)(struct intel_ring_buffer *ring, struct drm_i915_gem_execbuffer2 *exec, Loading