From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 58FFFC282E1 for ; Thu, 25 Apr 2019 10:02:51 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 29487206BA for ; Thu, 25 Apr 2019 10:02:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727776AbfDYKCn (ORCPT ); Thu, 25 Apr 2019 06:02:43 -0400 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 Received: from localhost ([127.0.0.1] helo=nanos.tec.linutronix.de) by Galois.linutronix.de with esmtp (Exim 4.80) (envelope-from ) id 1hJbA4-0001to-VQ; Thu, 25 Apr 2019 11:59:25 +0200 Message-Id: <20190425094802.622094226@linutronix.de> User-Agent: quilt/0.65 Date: Thu, 25 Apr 2019 11:45:09 +0200 From: Thomas Gleixner 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 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-btrfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org 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) 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: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id E8E36C10F03 for ; Thu, 25 Apr 2019 10:35:14 +0000 (UTC) Received: from mail.linuxfoundation.org (mail.linuxfoundation.org [140.211.169.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id C014F2084B for ; Thu, 25 Apr 2019 10:35:14 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C014F2084B Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=linutronix.de Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=iommu-bounces@lists.linux-foundation.org Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id 45ECD1D5D; Thu, 25 Apr 2019 10:34:27 +0000 (UTC) Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org [172.17.192.35]) by mail.linuxfoundation.org (Postfix) with ESMTPS id 9EC691D27 for ; Thu, 25 Apr 2019 10:33:55 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from Galois.linutronix.de (Galois.linutronix.de [146.0.238.70]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id DFF1274A for ; Thu, 25 Apr 2019 10:33:54 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=nanos.tec.linutronix.de) by Galois.linutronix.de with esmtp (Exim 4.80) (envelope-from ) id 1hJbA4-0001to-VQ; Thu, 25 Apr 2019 11:59:25 +0200 Message-Id: <20190425094802.622094226@linutronix.de> User-Agent: quilt/0.65 Date: Thu, 25 Apr 2019 11:45:09 +0200 From: Thomas Gleixner To: LKML Subject: [patch V3 16/29] drm: Simplify stacktrace handling References: <20190425094453.875139013@linutronix.de> MIME-Version: 1.0 Cc: Mike Snitzer , David Airlie , Catalin Marinas , Joonas Lahtinen , dri-devel@lists.freedesktop.org, linux-mm@kvack.org, dm-devel@redhat.com, Alexander Potapenko , Christoph Lameter , Miroslav Benes , Christoph Hellwig , Alasdair Kergon , 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 , Maarten Lankhorst , Akinobu Mita , Steven Rostedt , Josef Bacik , Mike Rapoport , Jani Nikula , Andy Lutomirski , Rodrigo Vivi , David Sterba , Dmitry Vyukov , Tom Zanussi , Josh Poimboeuf , Chris Mason , Pekka Enberg , iommu@lists.linux-foundation.org, Daniel Vetter , Andrew Morton , Robin Murphy , linux-btrfs@vger.kernel.org X-BeenThere: iommu@lists.linux-foundation.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: Development issues for Linux IOMMU support List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit Sender: iommu-bounces@lists.linux-foundation.org Errors-To: iommu-bounces@lists.linux-foundation.org Message-ID: <20190425094509.edr3NyN0cmuj3_WF9-dfm8hSH0WN2uPOlO3ml-qSGBU@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) _______________________________________________ iommu mailing list iommu@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/iommu