Commit de2df164 authored by Dave Airlie's avatar Dave Airlie

Merge tag 'drm-intel-fixes-2020-12-09' of...

Merge tag 'drm-intel-fixes-2020-12-09' of git://anongit.freedesktop.org/drm/drm-intel into drm-fixes

Fixes for VDSC/DP, selftests, shmem_utils, preemption, submission, and gt reset:

- Check the correct variable in selftest (Dan)
- Propagate error from canceled submit due to context closure (Chris)
- Ignore repeated attempts to suspend request flow across reset (Chris)
- Cancel the preemption timeout on responding to it (Chris)
- Fix unsigned compared against 0 (Colin)
- Compute the correct slice count for VDSC on DP (Manasi)
- Declar gen9 has 64 mocs entries (Chris)
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>

From: Rodrigo Vivi <rodrigo.vivi@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20201209235010.GA10554@intel.com
parents a81ac299 7c5c15df
...@@ -573,7 +573,7 @@ static u8 intel_dp_dsc_get_slice_count(struct intel_dp *intel_dp, ...@@ -573,7 +573,7 @@ static u8 intel_dp_dsc_get_slice_count(struct intel_dp *intel_dp,
return 0; return 0;
} }
/* Also take into account max slice width */ /* Also take into account max slice width */
min_slice_count = min_t(u8, min_slice_count, min_slice_count = max_t(u8, min_slice_count,
DIV_ROUND_UP(mode_hdisplay, DIV_ROUND_UP(mode_hdisplay,
max_slice_width)); max_slice_width));
......
...@@ -3097,7 +3097,7 @@ static void retire_requests(struct intel_timeline *tl, struct i915_request *end) ...@@ -3097,7 +3097,7 @@ static void retire_requests(struct intel_timeline *tl, struct i915_request *end)
break; break;
} }
static void eb_request_add(struct i915_execbuffer *eb) static int eb_request_add(struct i915_execbuffer *eb, int err)
{ {
struct i915_request *rq = eb->request; struct i915_request *rq = eb->request;
struct intel_timeline * const tl = i915_request_timeline(rq); struct intel_timeline * const tl = i915_request_timeline(rq);
...@@ -3118,6 +3118,7 @@ static void eb_request_add(struct i915_execbuffer *eb) ...@@ -3118,6 +3118,7 @@ static void eb_request_add(struct i915_execbuffer *eb)
/* Serialise with context_close via the add_to_timeline */ /* Serialise with context_close via the add_to_timeline */
i915_request_set_error_once(rq, -ENOENT); i915_request_set_error_once(rq, -ENOENT);
__i915_request_skip(rq); __i915_request_skip(rq);
err = -ENOENT; /* override any transient errors */
} }
__i915_request_queue(rq, &attr); __i915_request_queue(rq, &attr);
...@@ -3127,6 +3128,8 @@ static void eb_request_add(struct i915_execbuffer *eb) ...@@ -3127,6 +3128,8 @@ static void eb_request_add(struct i915_execbuffer *eb)
retire_requests(tl, prev); retire_requests(tl, prev);
mutex_unlock(&tl->mutex); mutex_unlock(&tl->mutex);
return err;
} }
static const i915_user_extension_fn execbuf_extensions[] = { static const i915_user_extension_fn execbuf_extensions[] = {
...@@ -3332,7 +3335,7 @@ i915_gem_do_execbuffer(struct drm_device *dev, ...@@ -3332,7 +3335,7 @@ i915_gem_do_execbuffer(struct drm_device *dev,
err = eb_submit(&eb, batch); err = eb_submit(&eb, batch);
err_request: err_request:
i915_request_get(eb.request); i915_request_get(eb.request);
eb_request_add(&eb); err = eb_request_add(&eb, err);
if (eb.fences) if (eb.fences)
signal_fence_array(&eb); signal_fence_array(&eb);
......
...@@ -2788,6 +2788,9 @@ static void __execlists_hold(struct i915_request *rq) ...@@ -2788,6 +2788,9 @@ static void __execlists_hold(struct i915_request *rq)
static bool execlists_hold(struct intel_engine_cs *engine, static bool execlists_hold(struct intel_engine_cs *engine,
struct i915_request *rq) struct i915_request *rq)
{ {
if (i915_request_on_hold(rq))
return false;
spin_lock_irq(&engine->active.lock); spin_lock_irq(&engine->active.lock);
if (i915_request_completed(rq)) { /* too late! */ if (i915_request_completed(rq)) { /* too late! */
...@@ -3169,8 +3172,10 @@ static void execlists_submission_tasklet(unsigned long data) ...@@ -3169,8 +3172,10 @@ static void execlists_submission_tasklet(unsigned long data)
spin_unlock_irqrestore(&engine->active.lock, flags); spin_unlock_irqrestore(&engine->active.lock, flags);
/* Recheck after serialising with direct-submission */ /* Recheck after serialising with direct-submission */
if (unlikely(timeout && preempt_timeout(engine))) if (unlikely(timeout && preempt_timeout(engine))) {
cancel_timer(&engine->execlists.preempt);
execlists_reset(engine, "preemption time out"); execlists_reset(engine, "preemption time out");
}
} }
} }
......
...@@ -59,8 +59,7 @@ struct drm_i915_mocs_table { ...@@ -59,8 +59,7 @@ struct drm_i915_mocs_table {
#define _L3_CACHEABILITY(value) ((value) << 4) #define _L3_CACHEABILITY(value) ((value) << 4)
/* Helper defines */ /* Helper defines */
#define GEN9_NUM_MOCS_ENTRIES 62 /* 62 out of 64 - 63 & 64 are reserved. */ #define GEN9_NUM_MOCS_ENTRIES 64 /* 63-64 are reserved, but configured. */
#define GEN11_NUM_MOCS_ENTRIES 64 /* 63-64 are reserved, but configured. */
/* (e)LLC caching options */ /* (e)LLC caching options */
/* /*
...@@ -328,11 +327,11 @@ static unsigned int get_mocs_settings(const struct drm_i915_private *i915, ...@@ -328,11 +327,11 @@ static unsigned int get_mocs_settings(const struct drm_i915_private *i915,
if (INTEL_GEN(i915) >= 12) { if (INTEL_GEN(i915) >= 12) {
table->size = ARRAY_SIZE(tgl_mocs_table); table->size = ARRAY_SIZE(tgl_mocs_table);
table->table = tgl_mocs_table; table->table = tgl_mocs_table;
table->n_entries = GEN11_NUM_MOCS_ENTRIES; table->n_entries = GEN9_NUM_MOCS_ENTRIES;
} else if (IS_GEN(i915, 11)) { } else if (IS_GEN(i915, 11)) {
table->size = ARRAY_SIZE(icl_mocs_table); table->size = ARRAY_SIZE(icl_mocs_table);
table->table = icl_mocs_table; table->table = icl_mocs_table;
table->n_entries = GEN11_NUM_MOCS_ENTRIES; table->n_entries = GEN9_NUM_MOCS_ENTRIES;
} else if (IS_GEN9_BC(i915) || IS_CANNONLAKE(i915)) { } else if (IS_GEN9_BC(i915) || IS_CANNONLAKE(i915)) {
table->size = ARRAY_SIZE(skl_mocs_table); table->size = ARRAY_SIZE(skl_mocs_table);
table->n_entries = GEN9_NUM_MOCS_ENTRIES; table->n_entries = GEN9_NUM_MOCS_ENTRIES;
......
...@@ -73,7 +73,7 @@ void *shmem_pin_map(struct file *file) ...@@ -73,7 +73,7 @@ void *shmem_pin_map(struct file *file)
mapping_set_unevictable(file->f_mapping); mapping_set_unevictable(file->f_mapping);
return vaddr; return vaddr;
err_page: err_page:
while (--i >= 0) while (i--)
put_page(pages[i]); put_page(pages[i]);
kvfree(pages); kvfree(pages);
return NULL; return NULL;
......
...@@ -211,8 +211,8 @@ static int igt_gem_ww_ctx(void *arg) ...@@ -211,8 +211,8 @@ static int igt_gem_ww_ctx(void *arg)
return PTR_ERR(obj); return PTR_ERR(obj);
obj2 = i915_gem_object_create_internal(i915, PAGE_SIZE); obj2 = i915_gem_object_create_internal(i915, PAGE_SIZE);
if (IS_ERR(obj)) { if (IS_ERR(obj2)) {
err = PTR_ERR(obj); err = PTR_ERR(obj2);
goto put1; goto put1;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment