public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Thomas Gleixner <tglx@linutronix.de>
To: LKML <linux-kernel@vger.kernel.org>
Cc: Josh Poimboeuf <jpoimboe@redhat.com>,
	x86@kernel.org, Andy Lutomirski <luto@kernel.org>,
	Steven Rostedt <rostedt@goodmis.org>,
	Alexander Potapenko <glider@google.com>,
	intel-gfx@lists.freedesktop.org,
	Joonas Lahtinen <joonas.lahtinen@linux.intel.com>,
	Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
	dri-devel@lists.freedesktop.org, David Airlie <airlied@linux.ie>,
	Jani Nikula <jani.nikula@linux.intel.com>,
	Daniel Vetter <daniel@ffwll.ch>,
	Rodrigo Vivi <rodrigo.vivi@intel.com>
Subject: [RFC patch 32/41] drm: Simplify stacktrace handling
Date: Wed, 10 Apr 2019 12:28:26 +0200	[thread overview]
Message-ID: <20190410103646.490627111@linutronix.de> (raw)
In-Reply-To: 20190410102754.387743324@linutronix.de

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 <tglx@linutronix.de>
Cc: intel-gfx@lists.freedesktop.org
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: dri-devel@lists.freedesktop.org
Cc: David Airlie <airlied@linux.ie>
Cc: Jani Nikula <jani.nikula@linux.intel.com>
Cc: Daniel Vetter <daniel@ffwll.ch>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
 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 nent;
 	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);
+		nent = stack_depot_fetch(node->stack, &entries);
+		stack_trace_snprintf(buf, BUFSZ, entries, nent, 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 nent;
 	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);
+	nent = stack_depot_fetch(vma->node.stack, &entries);
+	stack_trace_snprint(buf, sizeof(buf), entries, nent, 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 nent;
 
-	depot_fetch_stack(stack, &trace);
-	snprint_stack_trace(buf, sz, &trace, indent);
+	nent = stack_depot_fetch(stack, &entries);
+	stack_trace_snprint(buf, sz, entries, nent, indent);
 }
 
 static void init_intel_runtime_pm_wakeref(struct drm_i915_private *i915)



  parent reply	other threads:[~2019-04-10 11:07 UTC|newest]

Thread overview: 88+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-04-10 10:27 [RFC patch 00/41] stacktrace: Avoid the pointless redirection through struct stack_trace Thomas Gleixner
2019-04-10 10:27 ` [RFC patch 01/41] um/stacktrace: Remove the pointless ULONG_MAX marker Thomas Gleixner
2019-04-14 20:34   ` [tip:core/stacktrace] " tip-bot for Thomas Gleixner
2019-04-10 10:27 ` [RFC patch 02/41] x86/stacktrace: " Thomas Gleixner
2019-04-14 20:34   ` [tip:core/stacktrace] " tip-bot for Thomas Gleixner
2019-04-10 10:27 ` [RFC patch 03/41] arm/stacktrace: " Thomas Gleixner
2019-04-14 20:35   ` [tip:core/stacktrace] " tip-bot for Thomas Gleixner
2019-04-10 10:27 ` [RFC patch 04/41] sh/stacktrace: " Thomas Gleixner
2019-04-14 20:36   ` [tip:core/stacktrace] " tip-bot for Thomas Gleixner
2019-04-10 10:27 ` [RFC patch 05/41] unicore32/stacktrace: " Thomas Gleixner
2019-04-14 20:36   ` [tip:core/stacktrace] " tip-bot for Thomas Gleixner
2019-04-10 10:28 ` [RFC patch 06/41] riscv/stacktrace: " Thomas Gleixner
2019-04-14 20:37   ` [tip:core/stacktrace] " tip-bot for Thomas Gleixner
2019-04-10 10:28 ` [RFC patch 07/41] arm64/stacktrace: " Thomas Gleixner
2019-04-14 20:38   ` [tip:core/stacktrace] " tip-bot for Thomas Gleixner
2019-04-10 10:28 ` [RFC patch 08/41] parisc/stacktrace: " Thomas Gleixner
2019-04-14 20:38   ` [tip:core/stacktrace] " tip-bot for Thomas Gleixner
2019-04-10 10:28 ` [RFC patch 09/41] s390/stacktrace: " Thomas Gleixner
2019-04-14 20:39   ` [tip:core/stacktrace] " tip-bot for Thomas Gleixner
2019-04-10 10:28 ` [RFC patch 10/41] lockdep: Remove the ULONG_MAX stack trace hackery Thomas Gleixner
2019-04-14 20:40   ` [tip:core/stacktrace] " tip-bot for Thomas Gleixner
2019-04-10 10:28 ` [RFC patch 11/41] mm/slub: " Thomas Gleixner
2019-04-14 20:40   ` [tip:core/stacktrace] " tip-bot for Thomas Gleixner
2019-04-10 10:28 ` [RFC patch 12/41] mm/page_owner: " Thomas Gleixner
2019-04-14 20:41   ` [tip:core/stacktrace] " tip-bot for Thomas Gleixner
2019-04-10 10:28 ` [RFC patch 13/41] mm/kasan: " Thomas Gleixner
2019-04-10 11:31   ` Dmitry Vyukov
2019-04-14 20:42   ` [tip:core/stacktrace] " tip-bot for Thomas Gleixner
2019-04-10 10:28 ` [RFC patch 14/41] latency_top: " Thomas Gleixner
2019-04-14 20:42   ` [tip:core/stacktrace] " tip-bot for Thomas Gleixner
2019-04-10 10:28 ` [RFC patch 15/41] drm: " Thomas Gleixner
2019-04-14 20:43   ` [tip:core/stacktrace] " tip-bot for Thomas Gleixner
2019-04-10 10:28 ` [RFC patch 16/41] tracing: " Thomas Gleixner
2019-04-11  2:34   ` Josh Poimboeuf
2019-04-11  3:07     ` Steven Rostedt
2019-04-14 20:44   ` [tip:core/stacktrace] " tip-bot for Thomas Gleixner
2019-04-10 10:28 ` [RFC patch 17/41] tracing: Make stack_trace_print() static and rename it Thomas Gleixner
2019-04-10 12:47   ` Steven Rostedt
2019-04-11  0:19     ` AKASHI Takahiro
2019-04-10 10:28 ` [RFC patch 18/41] stacktrace: Provide helpers for common stack trace operations Thomas Gleixner
2019-04-10 10:28 ` [RFC patch 19/41] lib/stackdepot: Provide functions which operate on plain storage arrays Thomas Gleixner
2019-04-10 13:39   ` Alexander Potapenko
2019-04-10 10:28 ` [RFC patch 20/41] backtrace-test: Simplify stack trace handling Thomas Gleixner
2019-04-11  2:47   ` Josh Poimboeuf
2019-04-10 10:28 ` [RFC patch 21/41] proc: Simplify task stack retrieval Thomas Gleixner
2019-04-14 14:49   ` Alexey Dobriyan
2019-04-10 10:28 ` [RFC patch 22/41] latency_top: Simplify stack trace handling Thomas Gleixner
2019-04-10 10:28 ` [RFC patch 23/41] mm/slub: Simplify stack trace retrieval Thomas Gleixner
2019-04-10 10:28 ` [RFC patch 24/41] mm/kmemleak: Simplify stacktrace handling Thomas Gleixner
2019-04-10 10:28 ` [RFC patch 25/41] mm/kasan: " Thomas Gleixner
2019-04-10 11:33   ` Dmitry Vyukov
2019-04-11  2:55   ` Josh Poimboeuf
2019-04-14 16:54     ` Thomas Gleixner
2019-04-14 17:00       ` Thomas Gleixner
2019-04-10 10:28 ` [RFC patch 26/41] mm/page_owner: Simplify stack trace handling Thomas Gleixner
2019-04-10 10:28 ` [RFC patch 27/41] fault-inject: Simplify stacktrace retrieval Thomas Gleixner
2019-04-10 10:28 ` [RFC patch 28/41] dma/debug: Simplify stracktrace retrieval Thomas Gleixner
2019-04-10 11:08   ` Christoph Hellwig
2019-04-10 12:08     ` Thomas Gleixner
2019-04-10 12:25       ` Steven Rostedt
2019-04-11 17:21       ` Christoph Hellwig
2019-04-11 17:36         ` Steven Rostedt
2019-04-11 17:44           ` Christoph Hellwig
2019-04-11  3:02   ` Josh Poimboeuf
2019-04-11  3:09     ` Steven Rostedt
2019-04-10 10:28 ` [RFC patch 29/41] btrfs: ref-verify: Simplify stack trace retrieval Thomas Gleixner
2019-04-10 11:31   ` Johannes Thumshirn
2019-04-10 12:05     ` Thomas Gleixner
2019-04-10 12:38       ` Johannes Thumshirn
2019-04-10 12:50   ` David Sterba
2019-04-10 13:47   ` Alexander Potapenko
2019-04-10 10:28 ` [RFC patch 30/41] dm bufio: " Thomas Gleixner
2019-04-10 10:28 ` [RFC patch 31/41] dm persistent data: Simplify stack trace handling Thomas Gleixner
2019-04-10 10:28 ` Thomas Gleixner [this message]
2019-04-10 10:28 ` [RFC patch 33/41] lockdep: Remove unused trace argument from print_circular_bug() Thomas Gleixner
2019-04-10 10:28 ` [RFC patch 34/41] lockdep: Move stack trace logic into check_prev_add() Thomas Gleixner
2019-04-10 10:28 ` [RFC patch 35/41] lockdep: Simplify stack trace handling Thomas Gleixner
2019-04-10 10:28 ` [RFC patch 36/41] tracing: Simplify stacktrace retrieval in histograms Thomas Gleixner
2019-04-10 10:28 ` [RFC patch 37/41] tracing: Use percpu stack trace buffer more intelligently Thomas Gleixner
2019-04-10 10:28 ` [RFC patch 38/41] tracing: Make ftrace_trace_userstack() static and conditional Thomas Gleixner
2019-04-10 10:28 ` [RFC patch 39/41] tracing: Simplify stack trace retrieval Thomas Gleixner
2019-04-10 10:28 ` [RFC patch 40/41] stacktrace: Remove obsolete functions Thomas Gleixner
2019-04-11  3:33   ` Josh Poimboeuf
2019-04-11  9:13     ` Peter Zijlstra
2019-04-11 13:00     ` Josh Poimboeuf
2019-04-10 10:28 ` [RFC patch 41/41] lib/stackdepot: " Thomas Gleixner
2019-04-10 13:49   ` Alexander Potapenko
2019-04-10 11:49 ` [RFC patch 00/41] stacktrace: Avoid the pointless redirection through struct stack_trace Peter Zijlstra

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190410103646.490627111@linutronix.de \
    --to=tglx@linutronix.de \
    --cc=airlied@linux.ie \
    --cc=daniel@ffwll.ch \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=glider@google.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=jani.nikula@linux.intel.com \
    --cc=joonas.lahtinen@linux.intel.com \
    --cc=jpoimboe@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luto@kernel.org \
    --cc=maarten.lankhorst@linux.intel.com \
    --cc=rodrigo.vivi@intel.com \
    --cc=rostedt@goodmis.org \
    --cc=x86@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox