| From 59420cc82647fe8bb9ace31278437dea6426c659 Mon Sep 17 00:00:00 2001 |
| From: Chris Wilson <chris@chris-wilson.co.uk> |
| Date: Mon, 6 Apr 2020 12:48:21 +0100 |
| Subject: [PATCH] drm/i915/gem: Flush all the reloc_gpu batch |
| |
| commit 1aaea8476d9f014667d2cb24819f9bcaf3ebb7a4 upstream. |
| |
| __i915_gem_object_flush_map() takes a byte range, so feed it the written |
| bytes and do not mistake the u32 index as bytes! |
| |
| Fixes: a679f58d0510 ("drm/i915: Flush pages on acquisition") |
| Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> |
| Cc: Matthew Auld <matthew.william.auld@gmail.com> |
| Cc: <stable@vger.kernel.org> # v5.2+ |
| Reviewed-by: Matthew Auld <matthew.william.auld@gmail.com> |
| Link: https://patchwork.freedesktop.org/patch/msgid/20200406114821.10949-1-chris@chris-wilson.co.uk |
| (cherry picked from commit 30c88a47f1abd5744908d3681f54dcf823fe2a12) |
| Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c |
| index f31acf44a541..a5e5425b018c 100644 |
| --- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c |
| +++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c |
| @@ -1000,11 +1000,13 @@ static inline struct i915_ggtt *cache_to_ggtt(struct reloc_cache *cache) |
| |
| static void reloc_gpu_flush(struct reloc_cache *cache) |
| { |
| - GEM_BUG_ON(cache->rq_size >= cache->rq->batch->obj->base.size / sizeof(u32)); |
| + struct drm_i915_gem_object *obj = cache->rq->batch->obj; |
| + |
| + GEM_BUG_ON(cache->rq_size >= obj->base.size / sizeof(u32)); |
| cache->rq_cmd[cache->rq_size] = MI_BATCH_BUFFER_END; |
| |
| - __i915_gem_object_flush_map(cache->rq->batch->obj, 0, cache->rq_size); |
| - i915_gem_object_unpin_map(cache->rq->batch->obj); |
| + __i915_gem_object_flush_map(obj, 0, sizeof(u32) * (cache->rq_size + 1)); |
| + i915_gem_object_unpin_map(obj); |
| |
| i915_gem_chipset_flush(cache->rq->i915); |
| |
| -- |
| 2.7.4 |
| |