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: Dave Airlie <airlied@redhat.com> From: Rodrigo Vivi <rodrigo.vivi@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20201209235010.GA10554@intel.com
This commit is contained in:
@@ -573,7 +573,7 @@ static u8 intel_dp_dsc_get_slice_count(struct intel_dp *intel_dp,
|
||||
return 0;
|
||||
}
|
||||
/* 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,
|
||||
max_slice_width));
|
||||
|
||||
|
||||
@@ -3097,7 +3097,7 @@ static void retire_requests(struct intel_timeline *tl, struct i915_request *end)
|
||||
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 intel_timeline * const tl = i915_request_timeline(rq);
|
||||
@@ -3118,6 +3118,7 @@ static void eb_request_add(struct i915_execbuffer *eb)
|
||||
/* Serialise with context_close via the add_to_timeline */
|
||||
i915_request_set_error_once(rq, -ENOENT);
|
||||
__i915_request_skip(rq);
|
||||
err = -ENOENT; /* override any transient errors */
|
||||
}
|
||||
|
||||
__i915_request_queue(rq, &attr);
|
||||
@@ -3127,6 +3128,8 @@ static void eb_request_add(struct i915_execbuffer *eb)
|
||||
retire_requests(tl, prev);
|
||||
|
||||
mutex_unlock(&tl->mutex);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
static const i915_user_extension_fn execbuf_extensions[] = {
|
||||
@@ -3332,7 +3335,7 @@ i915_gem_do_execbuffer(struct drm_device *dev,
|
||||
err = eb_submit(&eb, batch);
|
||||
err_request:
|
||||
i915_request_get(eb.request);
|
||||
eb_request_add(&eb);
|
||||
err = eb_request_add(&eb, err);
|
||||
|
||||
if (eb.fences)
|
||||
signal_fence_array(&eb);
|
||||
|
||||
@@ -2788,6 +2788,9 @@ static void __execlists_hold(struct i915_request *rq)
|
||||
static bool execlists_hold(struct intel_engine_cs *engine,
|
||||
struct i915_request *rq)
|
||||
{
|
||||
if (i915_request_on_hold(rq))
|
||||
return false;
|
||||
|
||||
spin_lock_irq(&engine->active.lock);
|
||||
|
||||
if (i915_request_completed(rq)) { /* too late! */
|
||||
@@ -3169,8 +3172,10 @@ static void execlists_submission_tasklet(unsigned long data)
|
||||
spin_unlock_irqrestore(&engine->active.lock, flags);
|
||||
|
||||
/* 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");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -59,8 +59,7 @@ struct drm_i915_mocs_table {
|
||||
#define _L3_CACHEABILITY(value) ((value) << 4)
|
||||
|
||||
/* Helper defines */
|
||||
#define GEN9_NUM_MOCS_ENTRIES 62 /* 62 out of 64 - 63 & 64 are reserved. */
|
||||
#define GEN11_NUM_MOCS_ENTRIES 64 /* 63-64 are reserved, but configured. */
|
||||
#define GEN9_NUM_MOCS_ENTRIES 64 /* 63-64 are reserved, but configured. */
|
||||
|
||||
/* (e)LLC caching options */
|
||||
/*
|
||||
@@ -328,11 +327,11 @@ static unsigned int get_mocs_settings(const struct drm_i915_private *i915,
|
||||
if (INTEL_GEN(i915) >= 12) {
|
||||
table->size = ARRAY_SIZE(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)) {
|
||||
table->size = ARRAY_SIZE(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)) {
|
||||
table->size = ARRAY_SIZE(skl_mocs_table);
|
||||
table->n_entries = GEN9_NUM_MOCS_ENTRIES;
|
||||
|
||||
@@ -73,7 +73,7 @@ void *shmem_pin_map(struct file *file)
|
||||
mapping_set_unevictable(file->f_mapping);
|
||||
return vaddr;
|
||||
err_page:
|
||||
while (--i >= 0)
|
||||
while (i--)
|
||||
put_page(pages[i]);
|
||||
kvfree(pages);
|
||||
return NULL;
|
||||
|
||||
@@ -211,8 +211,8 @@ static int igt_gem_ww_ctx(void *arg)
|
||||
return PTR_ERR(obj);
|
||||
|
||||
obj2 = i915_gem_object_create_internal(i915, PAGE_SIZE);
|
||||
if (IS_ERR(obj)) {
|
||||
err = PTR_ERR(obj);
|
||||
if (IS_ERR(obj2)) {
|
||||
err = PTR_ERR(obj2);
|
||||
goto put1;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user