From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758179AbcLWHFD (ORCPT ); Fri, 23 Dec 2016 02:05:03 -0500 Received: from mga02.intel.com ([134.134.136.20]:1522 "EHLO mga02.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751499AbcLWHFC (ORCPT ); Fri, 23 Dec 2016 02:05:02 -0500 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.33,392,1477983600"; d="scan'208";a="801564556" From: Jani Nikula To: changbin.du@intel.com, daniel.vetter@intel.com Cc: airlied@linux.ie, intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, "Du\, Changbin" Subject: Re: [PATCH] drm/i915: check if execlist_port is empty before using its content In-Reply-To: <20161223054636.3924-1-changbin.du@intel.com> Organization: Intel Finland Oy - BIC 0357606-4 - Westendinkatu 7, 02160 Espoo References: <20161223054636.3924-1-changbin.du@intel.com> Date: Fri, 23 Dec 2016 09:04:57 +0200 Message-ID: <87h95vruqu.fsf@intel.com> MIME-Version: 1.0 Content-Type: text/plain Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, 23 Dec 2016, changbin.du@intel.com wrote: > From: "Du, Changbin" > > This patch fix a crash in function reset_common_ring. In this case, > the port[0].request is null when reset the render ring, so a null > dereference exception is raised. We need to check execlist_port status > first. > > [ 35.748034] BUG: unable to handle kernel NULL pointer dereference at 0000000000000070 > [ 35.749567] IP: [] reset_common_ring+0xbe/0x150 > [ 35.749567] Call Trace: > [ 35.749567] [] i915_gem_reset+0x150/0x270 > [ 35.749567] [] i915_reset+0x8a/0xe0 > [ 35.749567] [] i915_reset_and_wakeup+0x131/0x160 > [ 35.749567] [] ? gen5_read8+0x110/0x110 > [ 35.749567] [] i915_handle_error+0xca/0x5a0 > [ 35.749567] [] ? scnprintf+0x3d/0x70 > [ 35.749567] [] i915_hangcheck_elapsed+0x213/0x510 > [ 35.749567] [] process_one_work+0x15b/0x470 > [ 35.749567] [] worker_thread+0x43/0x4d0 > [ 35.749567] [] ? process_one_work+0x470/0x470 > [ 35.749567] [] ? process_one_work+0x470/0x470 > [ 35.749567] [] ? call_usermodehelper_exec_async+0x12e/0x130 > [ 35.749567] [] kthread+0xc5/0xe0 > [ 35.749567] [] ? kthread_park+0x60/0x60 > [ 35.749567] [] ? umh_complete+0x40/0x40 > [ 35.749567] [] ret_from_fork+0x22/0x30 > Fixes: ? i.e. which commit broke things? BR, Jani. > Signed-off-by: Changbin Du > --- > drivers/gpu/drm/i915/intel_lrc.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c > index 0a09024..81a9b0b 100644 > --- a/drivers/gpu/drm/i915/intel_lrc.c > +++ b/drivers/gpu/drm/i915/intel_lrc.c > @@ -1450,7 +1450,7 @@ static void reset_common_ring(struct intel_engine_cs *engine, > > /* Catch up with any missed context-switch interrupts */ > I915_WRITE(RING_CONTEXT_STATUS_PTR(engine), _MASKED_FIELD(0xffff, 0)); > - if (request->ctx != port[0].request->ctx) { > + if (!execlists_elsp_idle(engine) && request->ctx != port[0].request->ctx) { > i915_gem_request_put(port[0].request); > port[0] = port[1]; > memset(&port[1], 0, sizeof(port[1])); -- Jani Nikula, Intel Open Source Technology Center