From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jani Nikula Subject: Re: [PATCH] drm/i915: check if execlist_port is empty before using its content Date: Fri, 23 Dec 2016 09:04:57 +0200 Message-ID: <87h95vruqu.fsf@intel.com> References: <20161223054636.3924-1-changbin.du@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20161223054636.3924-1-changbin.du@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: changbin.du@intel.com, daniel.vetter@intel.com Cc: airlied@linux.ie, intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gRnJpLCAyMyBEZWMgMjAxNiwgY2hhbmdiaW4uZHVAaW50ZWwuY29tIHdyb3RlOgo+IEZyb206 ICJEdSwgQ2hhbmdiaW4iIDxjaGFuZ2Jpbi5kdUBpbnRlbC5jb20+Cj4KPiBUaGlzIHBhdGNoIGZp eCBhIGNyYXNoIGluIGZ1bmN0aW9uIHJlc2V0X2NvbW1vbl9yaW5nLiBJbiB0aGlzIGNhc2UsCj4g dGhlIHBvcnRbMF0ucmVxdWVzdCBpcyBudWxsIHdoZW4gcmVzZXQgdGhlIHJlbmRlciByaW5nLCBz byBhIG51bGwKPiBkZXJlZmVyZW5jZSBleGNlcHRpb24gaXMgcmFpc2VkLiBXZSBuZWVkIHRvIGNo ZWNrIGV4ZWNsaXN0X3BvcnQgc3RhdHVzCj4gZmlyc3QuCj4KPiBbICAgMzUuNzQ4MDM0XSBCVUc6 IHVuYWJsZSB0byBoYW5kbGUga2VybmVsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBhdCAwMDAw MDAwMDAwMDAwMDcwCj4gWyAgIDM1Ljc0OTU2N10gSVA6IFs8ZmZmZmZmZmY4MTUyMWJmZT5dIHJl c2V0X2NvbW1vbl9yaW5nKzB4YmUvMHgxNTAKPiBbICAgMzUuNzQ5NTY3XSBDYWxsIFRyYWNlOgo+ IFsgICAzNS43NDk1NjddICBbPGZmZmZmZmZmODE1MGRlZDA+XSBpOTE1X2dlbV9yZXNldCsweDE1 MC8weDI3MAo+IFsgICAzNS43NDk1NjddICBbPGZmZmZmZmZmODE0ZDNjMGE+XSBpOTE1X3Jlc2V0 KzB4OGEvMHhlMAo+IFsgICAzNS43NDk1NjddICBbPGZmZmZmZmZmODE0ZDhjMjE+XSBpOTE1X3Jl c2V0X2FuZF93YWtldXArMHgxMzEvMHgxNjAKPiBbICAgMzUuNzQ5NTY3XSAgWzxmZmZmZmZmZjgx NTI5OGYwPl0gPyBnZW41X3JlYWQ4KzB4MTEwLzB4MTEwCj4gWyAgIDM1Ljc0OTU2N10gIFs8ZmZm ZmZmZmY4MTRkYzk3YT5dIGk5MTVfaGFuZGxlX2Vycm9yKzB4Y2EvMHg1YTAKPiBbICAgMzUuNzQ5 NTY3XSAgWzxmZmZmZmZmZjgxM2JhYzlkPl0gPyBzY25wcmludGYrMHgzZC8weDcwCj4gWyAgIDM1 Ljc0OTU2N10gIFs8ZmZmZmZmZmY4MTRkZDA2Mz5dIGk5MTVfaGFuZ2NoZWNrX2VsYXBzZWQrMHgy MTMvMHg1MTAKPiBbICAgMzUuNzQ5NTY3XSAgWzxmZmZmZmZmZjgxMGM0YzRiPl0gcHJvY2Vzc19v bmVfd29yaysweDE1Yi8weDQ3MAo+IFsgICAzNS43NDk1NjddICBbPGZmZmZmZmZmODEwYzRmYTM+ XSB3b3JrZXJfdGhyZWFkKzB4NDMvMHg0ZDAKPiBbICAgMzUuNzQ5NTY3XSAgWzxmZmZmZmZmZjgx MGM0ZjYwPl0gPyBwcm9jZXNzX29uZV93b3JrKzB4NDcwLzB4NDcwCj4gWyAgIDM1Ljc0OTU2N10g IFs8ZmZmZmZmZmY4MTBjNGY2MD5dID8gcHJvY2Vzc19vbmVfd29yaysweDQ3MC8weDQ3MAo+IFsg ICAzNS43NDk1NjddICBbPGZmZmZmZmZmODEwYzEwM2U+XSA/IGNhbGxfdXNlcm1vZGVoZWxwZXJf ZXhlY19hc3luYysweDEyZS8weDEzMAo+IFsgICAzNS43NDk1NjddICBbPGZmZmZmZmZmODEwY2Ex YTU+XSBrdGhyZWFkKzB4YzUvMHhlMAo+IFsgICAzNS43NDk1NjddICBbPGZmZmZmZmZmODEwY2Ew ZTA+XSA/IGt0aHJlYWRfcGFyaysweDYwLzB4NjAKPiBbICAgMzUuNzQ5NTY3XSAgWzxmZmZmZmZm ZjgxMGMwZjEwPl0gPyB1bWhfY29tcGxldGUrMHg0MC8weDQwCj4gWyAgIDM1Ljc0OTU2N10gIFs8 ZmZmZmZmZmY4MWEzNTM5Mj5dIHJldF9mcm9tX2ZvcmsrMHgyMi8weDMwCj4KCkZpeGVzOiA/Cgpp LmUuIHdoaWNoIGNvbW1pdCBicm9rZSB0aGluZ3M/CgpCUiwKSmFuaS4KCgo+IFNpZ25lZC1vZmYt Ynk6IENoYW5nYmluIER1IDxjaGFuZ2Jpbi5kdUBpbnRlbC5jb20+Cj4gLS0tCj4gIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2xyYy5jIHwgMiArLQo+ICAxIGZpbGUgY2hhbmdlZCwgMSBpbnNl cnRpb24oKyksIDEgZGVsZXRpb24oLSkKPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9scmMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCj4gaW5k ZXggMGEwOTAyNC4uODFhOWIwYiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9scmMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCj4gQEAg LTE0NTAsNyArMTQ1MCw3IEBAIHN0YXRpYyB2b2lkIHJlc2V0X2NvbW1vbl9yaW5nKHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiAgCj4gIAkvKiBDYXRjaCB1cCB3aXRoIGFueSBtaXNz ZWQgY29udGV4dC1zd2l0Y2ggaW50ZXJydXB0cyAqLwo+ICAJSTkxNV9XUklURShSSU5HX0NPTlRF WFRfU1RBVFVTX1BUUihlbmdpbmUpLCBfTUFTS0VEX0ZJRUxEKDB4ZmZmZiwgMCkpOwo+IC0JaWYg KHJlcXVlc3QtPmN0eCAhPSBwb3J0WzBdLnJlcXVlc3QtPmN0eCkgewo+ICsJaWYgKCFleGVjbGlz dHNfZWxzcF9pZGxlKGVuZ2luZSkgJiYgcmVxdWVzdC0+Y3R4ICE9IHBvcnRbMF0ucmVxdWVzdC0+ Y3R4KSB7Cj4gIAkJaTkxNV9nZW1fcmVxdWVzdF9wdXQocG9ydFswXS5yZXF1ZXN0KTsKPiAgCQlw b3J0WzBdID0gcG9ydFsxXTsKPiAgCQltZW1zZXQoJnBvcnRbMV0sIDAsIHNpemVvZihwb3J0WzFd KSk7CgotLSAKSmFuaSBOaWt1bGEsIEludGVsIE9wZW4gU291cmNlIFRlY2hub2xvZ3kgQ2VudGVy Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdm eCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo= 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