From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Gleixner Subject: [patch V3 16/29] drm: Simplify stacktrace handling Date: Thu, 25 Apr 2019 11:45:09 +0200 Message-ID: <20190425094802.622094226@linutronix.de> References: <20190425094453.875139013@linutronix.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: LKML Cc: Mike Snitzer , David Airlie , Catalin Marinas , dri-devel@lists.freedesktop.org, linux-mm@kvack.org, dm-devel@redhat.com, Alexander Potapenko , Christoph Lameter , Miroslav Benes , Christoph Hellwig , Alasdair Kergon , Marek Szyprowski , linux-arch@vger.kernel.org, x86@kernel.org, kasan-dev@googlegroups.com, David Rientjes , Andrey Ryabinin , Alexey Dobriyan , intel-gfx@lists.freedesktop.org, Johannes Thumshirn , Akinobu Mita , Steven Rostedt , Josef Bacik , Mike Rapoport , Andy Lutomirski , David Sterba List-Id: linux-arch.vger.kernel.org UmVwbGFjZSB0aGUgaW5kaXJlY3Rpb24gdGhyb3VnaCBzdHJ1Y3Qgc3RhY2tfdHJhY2UgYnkgdXNp bmcgdGhlIHN0b3JhZ2UKYXJyYXkgYmFzZWQgaW50ZXJmYWNlcy4KClRoZSBvcmlnaW5hbCBjb2Rl IGluIGFsbCBwcmludGluZyBmdW5jdGlvbnMgaXMgcmVhbGx5IHdyb25nLiBJdCBhbGxvY2F0ZXMg YQpzdG9yYWdlIGFycmF5IG9uIHN0YWNrIHdoaWNoIGlzIHVudXNlZCBiZWNhdXNlIGRlcG90X2Zl dGNoX3N0YWNrKCkgZG9lcyBub3QKc3RvcmUgYW55dGhpbmcgaW4gaXQuIEl0IG92ZXJ3cml0ZXMg dGhlIGVudHJpZXMgcG9pbnRlciBpbiB0aGUgc3RhY2tfdHJhY2UKc3RydWN0IHNvIGl0IHBvaW50 cyB0byB0aGUgZGVwb3Qgc3RvcmFnZS4KClNpZ25lZC1vZmYtYnk6IFRob21hcyBHbGVpeG5lciA8 dGdseEBsaW51dHJvbml4LmRlPgpBY2tlZC1ieTogRGFuaWVsIFZldHRlciA8ZGFuaWVsQGZmd2xs LmNoPgpDYzogaW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpDYzogSm9vbmFzIExhaHRp bmVuIDxqb29uYXMubGFodGluZW5AbGludXguaW50ZWwuY29tPgpDYzogTWFhcnRlbiBMYW5raG9y c3QgPG1hYXJ0ZW4ubGFua2hvcnN0QGxpbnV4LmludGVsLmNvbT4KQ2M6IGRyaS1kZXZlbEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKQ2M6IERhdmlkIEFpcmxpZSA8YWlybGllZEBsaW51eC5pZT4KQ2M6 IEphbmkgTmlrdWxhIDxqYW5pLm5pa3VsYUBsaW51eC5pbnRlbC5jb20+CkNjOiBSb2RyaWdvIFZp dmkgPHJvZHJpZ28udml2aUBpbnRlbC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2RybV9tbS5j ICAgICAgICAgICAgICAgIHwgICAyMiArKysrKysrLS0tLS0tLS0tLS0tLS0tCiBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X3ZtYS5jICAgICAgICAgfCAgIDExICsrKystLS0tLS0tCiBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9ydW50aW1lX3BtLmMgfCAgIDIxICsrKysrKystLS0tLS0tLS0t LS0tLQogMyBmaWxlcyBjaGFuZ2VkLCAxOCBpbnNlcnRpb25zKCspLCAzNiBkZWxldGlvbnMoLSkK Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fbW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJt X21tLmMKQEAgLTEwNiwyMiArMTA2LDE5IEBACiBzdGF0aWMgbm9pbmxpbmUgdm9pZCBzYXZlX3N0 YWNrKHN0cnVjdCBkcm1fbW1fbm9kZSAqbm9kZSkKIHsKIAl1bnNpZ25lZCBsb25nIGVudHJpZXNb U1RBQ0tERVBUSF07Ci0Jc3RydWN0IHN0YWNrX3RyYWNlIHRyYWNlID0gewotCQkuZW50cmllcyA9 IGVudHJpZXMsCi0JCS5tYXhfZW50cmllcyA9IFNUQUNLREVQVEgsCi0JCS5za2lwID0gMQotCX07 CisJdW5zaWduZWQgaW50IG47CiAKLQlzYXZlX3N0YWNrX3RyYWNlKCZ0cmFjZSk7CisJbiA9IHN0 YWNrX3RyYWNlX3NhdmUoZW50cmllcywgQVJSQVlfU0laRShlbnRyaWVzKSwgMSk7CiAKIAkvKiBN YXkgYmUgY2FsbGVkIHVuZGVyIHNwaW5sb2NrLCBzbyBhdm9pZCBzbGVlcGluZyAqLwotCW5vZGUt PnN0YWNrID0gZGVwb3Rfc2F2ZV9zdGFjaygmdHJhY2UsIEdGUF9OT1dBSVQpOworCW5vZGUtPnN0 YWNrID0gc3RhY2tfZGVwb3Rfc2F2ZShlbnRyaWVzLCBuLCBHRlBfTk9XQUlUKTsKIH0KIAogc3Rh dGljIHZvaWQgc2hvd19sZWFrcyhzdHJ1Y3QgZHJtX21tICptbSkKIHsKIAlzdHJ1Y3QgZHJtX21t X25vZGUgKm5vZGU7Ci0JdW5zaWduZWQgbG9uZyBlbnRyaWVzW1NUQUNLREVQVEhdOworCXVuc2ln bmVkIGxvbmcgKmVudHJpZXM7CisJdW5zaWduZWQgaW50IG5yX2VudHJpZXM7CiAJY2hhciAqYnVm OwogCiAJYnVmID0ga21hbGxvYyhCVUZTWiwgR0ZQX0tFUk5FTCk7CkBAIC0xMjksMTkgKzEyNiwx NCBAQCBzdGF0aWMgdm9pZCBzaG93X2xlYWtzKHN0cnVjdCBkcm1fbW0gKm1tCiAJCXJldHVybjsK IAogCWxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgZHJtX21tX25vZGVzKG1tKSwgbm9kZV9saXN0 KSB7Ci0JCXN0cnVjdCBzdGFja190cmFjZSB0cmFjZSA9IHsKLQkJCS5lbnRyaWVzID0gZW50cmll cywKLQkJCS5tYXhfZW50cmllcyA9IFNUQUNLREVQVEgKLQkJfTsKLQogCQlpZiAoIW5vZGUtPnN0 YWNrKSB7CiAJCQlEUk1fRVJST1IoIm5vZGUgWyUwOGxseCArICUwOGxseF06IHVua25vd24gb3du ZXJcbiIsCiAJCQkJICBub2RlLT5zdGFydCwgbm9kZS0+c2l6ZSk7CiAJCQljb250aW51ZTsKIAkJ fQogCi0JCWRlcG90X2ZldGNoX3N0YWNrKG5vZGUtPnN0YWNrLCAmdHJhY2UpOwotCQlzbnByaW50 X3N0YWNrX3RyYWNlKGJ1ZiwgQlVGU1osICZ0cmFjZSwgMCk7CisJCW5yX2VudHJpZXMgPSBzdGFj a19kZXBvdF9mZXRjaChub2RlLT5zdGFjaywgJmVudHJpZXMpOworCQlzdGFja190cmFjZV9zbnBy aW50KGJ1ZiwgQlVGU1osIGVudHJpZXMsIG5yX2VudHJpZXMsIDApOwogCQlEUk1fRVJST1IoIm5v ZGUgWyUwOGxseCArICUwOGxseF06IGluc2VydGVkIGF0XG4lcyIsCiAJCQkgIG5vZGUtPnN0YXJ0 LCBub2RlLT5zaXplLCBidWYpOwogCX0KLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV92 bWEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3ZtYS5jCkBAIC0zNiwxMSArMzYs OCBAQAogCiBzdGF0aWMgdm9pZCB2bWFfcHJpbnRfYWxsb2NhdG9yKHN0cnVjdCBpOTE1X3ZtYSAq dm1hLCBjb25zdCBjaGFyICpyZWFzb24pCiB7Ci0JdW5zaWduZWQgbG9uZyBlbnRyaWVzWzEyXTsK LQlzdHJ1Y3Qgc3RhY2tfdHJhY2UgdHJhY2UgPSB7Ci0JCS5lbnRyaWVzID0gZW50cmllcywKLQkJ Lm1heF9lbnRyaWVzID0gQVJSQVlfU0laRShlbnRyaWVzKSwKLQl9OworCXVuc2lnbmVkIGxvbmcg KmVudHJpZXM7CisJdW5zaWduZWQgaW50IG5yX2VudHJpZXM7CiAJY2hhciBidWZbNTEyXTsKIAog CWlmICghdm1hLT5ub2RlLnN0YWNrKSB7CkBAIC00OSw4ICs0Niw4IEBAIHN0YXRpYyB2b2lkIHZt YV9wcmludF9hbGxvY2F0b3Ioc3RydWN0IGkKIAkJcmV0dXJuOwogCX0KIAotCWRlcG90X2ZldGNo X3N0YWNrKHZtYS0+bm9kZS5zdGFjaywgJnRyYWNlKTsKLQlzbnByaW50X3N0YWNrX3RyYWNlKGJ1 Ziwgc2l6ZW9mKGJ1ZiksICZ0cmFjZSwgMCk7CisJbnJfZW50cmllcyA9IHN0YWNrX2RlcG90X2Zl dGNoKHZtYS0+bm9kZS5zdGFjaywgJmVudHJpZXMpOworCXN0YWNrX3RyYWNlX3NucHJpbnQoYnVm LCBzaXplb2YoYnVmKSwgZW50cmllcywgbnJfZW50cmllcywgMCk7CiAJRFJNX0RFQlVHX0RSSVZF Uigidm1hLm5vZGUgWyUwOGxseCArICUwOGxseF0gJXM6IGluc2VydGVkIGF0ICVzXG4iLAogCQkJ IHZtYS0+bm9kZS5zdGFydCwgdm1hLT5ub2RlLnNpemUsIHJlYXNvbiwgYnVmKTsKIH0KLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcnVudGltZV9wbS5jCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX3J1bnRpbWVfcG0uYwpAQCAtNjAsMjcgKzYwLDIwIEBACiBzdGF0aWMg bm9pbmxpbmUgZGVwb3Rfc3RhY2tfaGFuZGxlX3QgX19zYXZlX2RlcG90X3N0YWNrKHZvaWQpCiB7 CiAJdW5zaWduZWQgbG9uZyBlbnRyaWVzW1NUQUNLREVQVEhdOwotCXN0cnVjdCBzdGFja190cmFj ZSB0cmFjZSA9IHsKLQkJLmVudHJpZXMgPSBlbnRyaWVzLAotCQkubWF4X2VudHJpZXMgPSBBUlJB WV9TSVpFKGVudHJpZXMpLAotCQkuc2tpcCA9IDEsCi0JfTsKKwl1bnNpZ25lZCBpbnQgbjsKIAot CXNhdmVfc3RhY2tfdHJhY2UoJnRyYWNlKTsKLQlyZXR1cm4gZGVwb3Rfc2F2ZV9zdGFjaygmdHJh Y2UsIEdGUF9OT1dBSVQgfCBfX0dGUF9OT1dBUk4pOworCW4gPSBzdGFja190cmFjZV9zYXZlKGVu dHJpZXMsIEFSUkFZX1NJWkUoZW50cmllcyksIDEpOworCXJldHVybiBzdGFja19kZXBvdF9zYXZl KGVudHJpZXMsIG4sIEdGUF9OT1dBSVQgfCBfX0dGUF9OT1dBUk4pOwogfQogCiBzdGF0aWMgdm9p ZCBfX3ByaW50X2RlcG90X3N0YWNrKGRlcG90X3N0YWNrX2hhbmRsZV90IHN0YWNrLAogCQkJCWNo YXIgKmJ1ZiwgaW50IHN6LCBpbnQgaW5kZW50KQogewotCXVuc2lnbmVkIGxvbmcgZW50cmllc1tT VEFDS0RFUFRIXTsKLQlzdHJ1Y3Qgc3RhY2tfdHJhY2UgdHJhY2UgPSB7Ci0JCS5lbnRyaWVzID0g ZW50cmllcywKLQkJLm1heF9lbnRyaWVzID0gQVJSQVlfU0laRShlbnRyaWVzKSwKLQl9OworCXVu c2lnbmVkIGxvbmcgKmVudHJpZXM7CisJdW5zaWduZWQgaW50IG5yX2VudHJpZXM7CiAKLQlkZXBv dF9mZXRjaF9zdGFjayhzdGFjaywgJnRyYWNlKTsKLQlzbnByaW50X3N0YWNrX3RyYWNlKGJ1Ziwg c3osICZ0cmFjZSwgaW5kZW50KTsKKwlucl9lbnRyaWVzID0gc3RhY2tfZGVwb3RfZmV0Y2goc3Rh Y2ssICZlbnRyaWVzKTsKKwlzdGFja190cmFjZV9zbnByaW50KGJ1Ziwgc3osIGVudHJpZXMsIG5y X2VudHJpZXMsIGluZGVudCk7CiB9CiAKIHN0YXRpYyB2b2lkIGluaXRfaW50ZWxfcnVudGltZV9w bV93YWtlcmVmKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQoKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QK SW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9w Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeA== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from Galois.linutronix.de ([146.0.238.70]:57939 "EHLO Galois.linutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729371AbfDYKAN (ORCPT ); Thu, 25 Apr 2019 06:00:13 -0400 Message-ID: <20190425094802.622094226@linutronix.de> Date: Thu, 25 Apr 2019 11:45:09 +0200 From: Thomas Gleixner Subject: [patch V3 16/29] drm: Simplify stacktrace handling References: <20190425094453.875139013@linutronix.de> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-arch-owner@vger.kernel.org List-ID: To: LKML Cc: Josh Poimboeuf , x86@kernel.org, Andy Lutomirski , Daniel Vetter , intel-gfx@lists.freedesktop.org, Joonas Lahtinen , Maarten Lankhorst , dri-devel@lists.freedesktop.org, David Airlie , Jani Nikula , Rodrigo Vivi , Steven Rostedt , Alexander Potapenko , Alexey Dobriyan , Andrew Morton , Christoph Lameter , Pekka Enberg , linux-mm@kvack.org, David Rientjes , Catalin Marinas , Dmitry Vyukov , Andrey Ryabinin , kasan-dev@googlegroups.com, Mike Rapoport , Akinobu Mita , Christoph Hellwig , iommu@lists.linux-foundation.org, Robin Murphy , Marek Szyprowski , Johannes Thumshirn , David Sterba , Chris Mason , Josef Bacik , linux-btrfs@vger.kernel.org, dm-devel@redhat.com, Mike Snitzer , Alasdair Kergon , Tom Zanussi , Miroslav Benes , linux-arch@vger.kernel.org Message-ID: <20190425094509.KEtp7l6v6_Ng_t5Mw_ZUJbT_mjC4q26hIu9ALj_GReU@z> Replace the indirection through struct stack_trace by using the storage array based interfaces. The original code in all printing functions is really wrong. It allocates a storage array on stack which is unused because depot_fetch_stack() does not store anything in it. It overwrites the entries pointer in the stack_trace struct so it points to the depot storage. Signed-off-by: Thomas Gleixner Acked-by: Daniel Vetter Cc: intel-gfx@lists.freedesktop.org Cc: Joonas Lahtinen Cc: Maarten Lankhorst Cc: dri-devel@lists.freedesktop.org Cc: David Airlie Cc: Jani Nikula Cc: Rodrigo Vivi --- drivers/gpu/drm/drm_mm.c | 22 +++++++--------------- drivers/gpu/drm/i915/i915_vma.c | 11 ++++------- drivers/gpu/drm/i915/intel_runtime_pm.c | 21 +++++++-------------- 3 files changed, 18 insertions(+), 36 deletions(-) --- a/drivers/gpu/drm/drm_mm.c +++ b/drivers/gpu/drm/drm_mm.c @@ -106,22 +106,19 @@ static noinline void save_stack(struct drm_mm_node *node) { unsigned long entries[STACKDEPTH]; - struct stack_trace trace = { - .entries = entries, - .max_entries = STACKDEPTH, - .skip = 1 - }; + unsigned int n; - save_stack_trace(&trace); + n = stack_trace_save(entries, ARRAY_SIZE(entries), 1); /* May be called under spinlock, so avoid sleeping */ - node->stack = depot_save_stack(&trace, GFP_NOWAIT); + node->stack = stack_depot_save(entries, n, GFP_NOWAIT); } static void show_leaks(struct drm_mm *mm) { struct drm_mm_node *node; - unsigned long entries[STACKDEPTH]; + unsigned long *entries; + unsigned int nr_entries; char *buf; buf = kmalloc(BUFSZ, GFP_KERNEL); @@ -129,19 +126,14 @@ static void show_leaks(struct drm_mm *mm return; list_for_each_entry(node, drm_mm_nodes(mm), node_list) { - struct stack_trace trace = { - .entries = entries, - .max_entries = STACKDEPTH - }; - if (!node->stack) { DRM_ERROR("node [%08llx + %08llx]: unknown owner\n", node->start, node->size); continue; } - depot_fetch_stack(node->stack, &trace); - snprint_stack_trace(buf, BUFSZ, &trace, 0); + nr_entries = stack_depot_fetch(node->stack, &entries); + stack_trace_snprint(buf, BUFSZ, entries, nr_entries, 0); DRM_ERROR("node [%08llx + %08llx]: inserted at\n%s", node->start, node->size, buf); } --- a/drivers/gpu/drm/i915/i915_vma.c +++ b/drivers/gpu/drm/i915/i915_vma.c @@ -36,11 +36,8 @@ static void vma_print_allocator(struct i915_vma *vma, const char *reason) { - unsigned long entries[12]; - struct stack_trace trace = { - .entries = entries, - .max_entries = ARRAY_SIZE(entries), - }; + unsigned long *entries; + unsigned int nr_entries; char buf[512]; if (!vma->node.stack) { @@ -49,8 +46,8 @@ static void vma_print_allocator(struct i return; } - depot_fetch_stack(vma->node.stack, &trace); - snprint_stack_trace(buf, sizeof(buf), &trace, 0); + nr_entries = stack_depot_fetch(vma->node.stack, &entries); + stack_trace_snprint(buf, sizeof(buf), entries, nr_entries, 0); DRM_DEBUG_DRIVER("vma.node [%08llx + %08llx] %s: inserted at %s\n", vma->node.start, vma->node.size, reason, buf); } --- a/drivers/gpu/drm/i915/intel_runtime_pm.c +++ b/drivers/gpu/drm/i915/intel_runtime_pm.c @@ -60,27 +60,20 @@ static noinline depot_stack_handle_t __save_depot_stack(void) { unsigned long entries[STACKDEPTH]; - struct stack_trace trace = { - .entries = entries, - .max_entries = ARRAY_SIZE(entries), - .skip = 1, - }; + unsigned int n; - save_stack_trace(&trace); - return depot_save_stack(&trace, GFP_NOWAIT | __GFP_NOWARN); + n = stack_trace_save(entries, ARRAY_SIZE(entries), 1); + return stack_depot_save(entries, n, GFP_NOWAIT | __GFP_NOWARN); } static void __print_depot_stack(depot_stack_handle_t stack, char *buf, int sz, int indent) { - unsigned long entries[STACKDEPTH]; - struct stack_trace trace = { - .entries = entries, - .max_entries = ARRAY_SIZE(entries), - }; + unsigned long *entries; + unsigned int nr_entries; - depot_fetch_stack(stack, &trace); - snprint_stack_trace(buf, sz, &trace, indent); + nr_entries = stack_depot_fetch(stack, &entries); + stack_trace_snprint(buf, sz, entries, nr_entries, indent); } static void init_intel_runtime_pm_wakeref(struct drm_i915_private *i915)