Commit 700d6ab9 authored by Dave Airlie's avatar Dave Airlie
Browse files

Merge tag 'drm-intel-next-fixes-2020-03-27' of...

Merge tag 'drm-intel-next-fixes-2020-03-27' of git://anongit.freedesktop.org/drm/drm-intel

 into drm-next

Fixes for instability on Baytrail and Haswell;
Ice Lake RPS; Sandy Bridge RC6; and few others around
GT hangchec/reset; livelock; and a null dereference.

Signed-off-by: default avatarDave Airlie <airlied@redhat.com>

From: Rodrigo Vivi <rodrigo.vivi@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200327081607.GA3082710@intel.com
parents c0ca5437 2bdd4c28
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -14748,8 +14748,8 @@ static int intel_atomic_check(struct drm_device *dev,
	/* Catch I915_MODE_FLAG_INHERITED */
	for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state,
					    new_crtc_state, i) {
		if (new_crtc_state->hw.mode.private_flags !=
		    old_crtc_state->hw.mode.private_flags)
		if (new_crtc_state->uapi.mode.private_flags !=
		    old_crtc_state->uapi.mode.private_flags)
			new_crtc_state->uapi.mode_changed = true;
	}
+1 −1
Original line number Diff line number Diff line
@@ -574,7 +574,7 @@ static void engines_idle_release(struct i915_gem_context *ctx,
		int err = 0;

		/* serialises with execbuf */
		RCU_INIT_POINTER(ce->gem_context, NULL);
		set_bit(CONTEXT_CLOSED_BIT, &ce->flags);
		if (!intel_context_pin_if_active(ce))
			continue;

+6 −2
Original line number Diff line number Diff line
@@ -192,12 +192,16 @@ i915_gem_context_unlock_engines(struct i915_gem_context *ctx)
static inline struct intel_context *
i915_gem_context_get_engine(struct i915_gem_context *ctx, unsigned int idx)
{
	struct intel_context *ce = ERR_PTR(-EINVAL);
	struct intel_context *ce;

	rcu_read_lock(); {
		struct i915_gem_engines *e = rcu_dereference(ctx->engines);
		if (likely(idx < e->num_engines && e->engines[idx]))
		if (unlikely(!e)) /* context was closed! */
			ce = ERR_PTR(-ENOENT);
		else if (likely(idx < e->num_engines && e->engines[idx]))
			ce = intel_context_get(e->engines[idx]);
		else
			ce = ERR_PTR(-EINVAL);
	} rcu_read_unlock();

	return ce;
+1 −1
Original line number Diff line number Diff line
@@ -2316,7 +2316,7 @@ static void eb_request_add(struct i915_execbuffer *eb)
	prev = __i915_request_commit(rq);

	/* Check that the context wasn't destroyed before submission */
	if (likely(rcu_access_pointer(eb->context->gem_context))) {
	if (likely(!intel_context_is_closed(eb->context))) {
		attr = eb->gem_context->sched;

		/*
+2 −0
Original line number Diff line number Diff line
@@ -97,6 +97,8 @@ int __intel_context_do_pin(struct intel_context *ce)
{
	int err;

	GEM_BUG_ON(intel_context_is_closed(ce));

	if (unlikely(!test_bit(CONTEXT_ALLOC_BIT, &ce->flags))) {
		err = intel_context_alloc_state(ce);
		if (err)
Loading