linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 00/11] Fix up liblockdep for 5.6-rc
@ 2020-02-18  2:41 Sasha Levin
  2020-02-18  2:41 ` [PATCH 01/11] tools headers: Add kprobes.h header Sasha Levin
                   ` (10 more replies)
  0 siblings, 11 replies; 12+ messages in thread
From: Sasha Levin @ 2020-02-18  2:41 UTC (permalink / raw)
  To: mingo, peterz
  Cc: linux-kernel, tglx, jolsa, alexey.budankov, songliubraving, acme,
	allison, Sasha Levin

Ingo,

I'm sorry for taking so long on this.

This series fixes up most of liblockdep to work with the recent kernel
changes. There is another failure with threaded lockup detection that
I'll work on fixing this week.

Also available via git-pull:

The following changes since commit 11a48a5a18c63fd7621bb050228cebf13566e4d8:

  Linux 5.6-rc2 (2020-02-16 13:16:59 -0800)

are available in the Git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/sashal/linux.git liblockdep-fixes

Sasha Levin (11):
  tools headers: Add kprobes.h header
  tools headers: Add rcupdate.h header
  tools/kernel.h: extend with dummy RCU functions
  tools bitmap: add bitmap_andnot definition
  tools/lib/lockdep: add definition required for IRQ flag tracing
  tools/kernel.h: add BUILD_BUG_ON_NOT_POWER_OF_2 macro
  tools bitmap: add bitmap_clear definition
  tools/lib/lockdep: Hook up vsprintf, find_bit, hweight libraries
  tools/lib/lockdep: Enable building with CONFIG_TRACE_IRQFLAGS
  tools/lib/lockdep: New stacktrace API
  tools/lib/lockdep: call lockdep_init_task on init

 tools/include/linux/bitmap.h     | 10 +++++++++
 tools/include/linux/kernel.h     | 13 ++++++++++++
 tools/include/linux/kprobes.h    |  7 +++++++
 tools/include/linux/lockdep.h    |  8 ++++++++
 tools/include/linux/rcupdate.h   | 12 +++++++++++
 tools/include/linux/stacktrace.h |  8 ++++++++
 tools/lib/bitmap.c               | 35 ++++++++++++++++++++++++++++++++
 tools/lib/lockdep/Build          |  2 +-
 tools/lib/lockdep/Makefile       |  2 +-
 tools/lib/lockdep/lockdep.c      |  4 ++--
 tools/lib/lockdep/preload.c      |  4 ++++
 11 files changed, 101 insertions(+), 4 deletions(-)
 create mode 100644 tools/include/linux/kprobes.h
 create mode 100644 tools/include/linux/rcupdate.h

-- 
2.20.1


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH 01/11] tools headers: Add kprobes.h header
  2020-02-18  2:41 [PATCH 00/11] Fix up liblockdep for 5.6-rc Sasha Levin
@ 2020-02-18  2:41 ` Sasha Levin
  2020-02-18  2:41 ` [PATCH 02/11] tools headers: Add rcupdate.h header Sasha Levin
                   ` (9 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Sasha Levin @ 2020-02-18  2:41 UTC (permalink / raw)
  To: mingo, peterz
  Cc: linux-kernel, tglx, jolsa, alexey.budankov, songliubraving, acme,
	allison, Sasha Levin

This is now needed by liblockdep as a result of 2f43c6022d84 ("kprobes:
Prohibit probing on lockdep functions").

Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 tools/include/linux/kprobes.h | 7 +++++++
 1 file changed, 7 insertions(+)
 create mode 100644 tools/include/linux/kprobes.h

diff --git a/tools/include/linux/kprobes.h b/tools/include/linux/kprobes.h
new file mode 100644
index 0000000000000..f665725ea4d59
--- /dev/null
+++ b/tools/include/linux/kprobes.h
@@ -0,0 +1,7 @@
+#ifndef _TOOLS_LINUX_KPROBES_H_
+#define _TOOLS_LINUX_KPROBES_H_
+
+#define NOKPROBE_SYMBOL(x)
+#define nokprobe_inline
+
+#endif
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 02/11] tools headers: Add rcupdate.h header
  2020-02-18  2:41 [PATCH 00/11] Fix up liblockdep for 5.6-rc Sasha Levin
  2020-02-18  2:41 ` [PATCH 01/11] tools headers: Add kprobes.h header Sasha Levin
@ 2020-02-18  2:41 ` Sasha Levin
  2020-02-18  2:41 ` [PATCH 03/11] tools/kernel.h: extend with dummy RCU functions Sasha Levin
                   ` (8 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Sasha Levin @ 2020-02-18  2:41 UTC (permalink / raw)
  To: mingo, peterz
  Cc: linux-kernel, tglx, jolsa, alexey.budankov, songliubraving, acme,
	allison, Sasha Levin

This is now needed by liblockdep as a result of a0b0fd53e1e6
("locking/lockdep: Free lock classes that are no longer in use").

Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 tools/include/linux/rcupdate.h | 12 ++++++++++++
 1 file changed, 12 insertions(+)
 create mode 100644 tools/include/linux/rcupdate.h

diff --git a/tools/include/linux/rcupdate.h b/tools/include/linux/rcupdate.h
new file mode 100644
index 0000000000000..100e6edb54af1
--- /dev/null
+++ b/tools/include/linux/rcupdate.h
@@ -0,0 +1,12 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef _LIBLOCKDEP_RCUPDATE_H_
+#define _LIBLOCKDEP_RCUPDATE_H_
+
+#define call_rcu(x, y)
+#define init_rcu_head(x)
+
+struct rcu_head { 
+	char dummy;
+};
+
+#endif
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 03/11] tools/kernel.h: extend with dummy RCU functions
  2020-02-18  2:41 [PATCH 00/11] Fix up liblockdep for 5.6-rc Sasha Levin
  2020-02-18  2:41 ` [PATCH 01/11] tools headers: Add kprobes.h header Sasha Levin
  2020-02-18  2:41 ` [PATCH 02/11] tools headers: Add rcupdate.h header Sasha Levin
@ 2020-02-18  2:41 ` Sasha Levin
  2020-02-18  2:41 ` [PATCH 04/11] tools bitmap: add bitmap_andnot definition Sasha Levin
                   ` (7 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Sasha Levin @ 2020-02-18  2:41 UTC (permalink / raw)
  To: mingo, peterz
  Cc: linux-kernel, tglx, jolsa, alexey.budankov, songliubraving, acme,
	allison, Sasha Levin

These calls were added by 108c14858b9e ("locking/lockdep: Add support
for dynamic keys") and require no special handling in userspace, so just
add empty function definitions.

Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 tools/include/linux/kernel.h | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/tools/include/linux/kernel.h b/tools/include/linux/kernel.h
index cba226948a0ce..d2b3e1cc0218e 100644
--- a/tools/include/linux/kernel.h
+++ b/tools/include/linux/kernel.h
@@ -119,4 +119,11 @@ int scnprintf_pad(char * buf, size_t size, const char * fmt, ...);
 #define current_gfp_context(k) 0
 #define synchronize_rcu()
 
+static __maybe_unused int system_state;
+#define SYSTEM_SCHEDULING 0
+
+#define might_sleep()
+#define rcu_read_lock()
+#define rcu_read_unlock()
+
 #endif
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 04/11] tools bitmap: add bitmap_andnot definition
  2020-02-18  2:41 [PATCH 00/11] Fix up liblockdep for 5.6-rc Sasha Levin
                   ` (2 preceding siblings ...)
  2020-02-18  2:41 ` [PATCH 03/11] tools/kernel.h: extend with dummy RCU functions Sasha Levin
@ 2020-02-18  2:41 ` Sasha Levin
  2020-02-18  2:41 ` [PATCH 05/11] tools/lib/lockdep: add definition required for IRQ flag tracing Sasha Levin
                   ` (6 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Sasha Levin @ 2020-02-18  2:41 UTC (permalink / raw)
  To: mingo, peterz
  Cc: linux-kernel, tglx, jolsa, alexey.budankov, songliubraving, acme,
	allison, Sasha Levin

Add definition of bitmap_andnot() and wire tools/lib/bitmap.c into
liblockdep.

This is needed as a result of de4643a77356 ("locking/lockdep: Reuse lock
chains that have been freed").

Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 tools/include/linux/bitmap.h | 10 ++++++++++
 tools/lib/bitmap.c           | 15 +++++++++++++++
 tools/lib/lockdep/Build      |  2 +-
 3 files changed, 26 insertions(+), 1 deletion(-)

diff --git a/tools/include/linux/bitmap.h b/tools/include/linux/bitmap.h
index 477a1cae513f2..ab5df035f8eda 100644
--- a/tools/include/linux/bitmap.h
+++ b/tools/include/linux/bitmap.h
@@ -18,6 +18,8 @@ int __bitmap_and(unsigned long *dst, const unsigned long *bitmap1,
 int __bitmap_equal(const unsigned long *bitmap1,
 		   const unsigned long *bitmap2, unsigned int bits);
 void bitmap_clear(unsigned long *map, unsigned int start, int len);
+int __bitmap_andnot(unsigned long *dst, const unsigned long *bitmap1,
+			const unsigned long *bitmap2, unsigned int bits);
 
 #define BITMAP_FIRST_WORD_MASK(start) (~0UL << ((start) & (BITS_PER_LONG - 1)))
 
@@ -178,4 +180,12 @@ static inline int bitmap_equal(const unsigned long *src1,
 	return __bitmap_equal(src1, src2, nbits);
 }
 
+static inline int bitmap_andnot(unsigned long *dst, const unsigned long *src1,
+                        const unsigned long *src2, unsigned int nbits)
+{
+	if (small_const_nbits(nbits))
+		return (*dst = *src1 & ~(*src2) & BITMAP_LAST_WORD_MASK(nbits)) != 0;
+	return __bitmap_andnot(dst, src1, src2, nbits);
+}
+
 #endif /* _PERF_BITOPS_H */
diff --git a/tools/lib/bitmap.c b/tools/lib/bitmap.c
index 5043747ef6c5f..b6bc037623fc1 100644
--- a/tools/lib/bitmap.c
+++ b/tools/lib/bitmap.c
@@ -86,3 +86,18 @@ int __bitmap_equal(const unsigned long *bitmap1,
 
 	return 1;
 }
+
+int __bitmap_andnot(unsigned long *dst, const unsigned long *bitmap1,
+                                const unsigned long *bitmap2, unsigned int bits)
+{
+	unsigned int k;
+	unsigned int lim = bits/BITS_PER_LONG;
+	unsigned long result = 0;
+
+	for (k = 0; k < lim; k++)
+		result |= (dst[k] = bitmap1[k] & ~bitmap2[k]);
+	if (bits % BITS_PER_LONG)
+		result |= (dst[k] = bitmap1[k] & ~bitmap2[k] &
+			BITMAP_LAST_WORD_MASK(bits));
+	return result != 0;
+}
diff --git a/tools/lib/lockdep/Build b/tools/lib/lockdep/Build
index 6f667355b0687..219a9e2d9e0ba 100644
--- a/tools/lib/lockdep/Build
+++ b/tools/lib/lockdep/Build
@@ -1 +1 @@
-liblockdep-y += common.o lockdep.o preload.o rbtree.o
+liblockdep-y += common.o lockdep.o preload.o rbtree.o ../../lib/bitmap.o
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 05/11] tools/lib/lockdep: add definition required for IRQ flag tracing
  2020-02-18  2:41 [PATCH 00/11] Fix up liblockdep for 5.6-rc Sasha Levin
                   ` (3 preceding siblings ...)
  2020-02-18  2:41 ` [PATCH 04/11] tools bitmap: add bitmap_andnot definition Sasha Levin
@ 2020-02-18  2:41 ` Sasha Levin
  2020-02-18  2:41 ` [PATCH 06/11] tools/kernel.h: add BUILD_BUG_ON_NOT_POWER_OF_2 macro Sasha Levin
                   ` (5 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Sasha Levin @ 2020-02-18  2:41 UTC (permalink / raw)
  To: mingo, peterz
  Cc: linux-kernel, tglx, jolsa, alexey.budankov, songliubraving, acme,
	allison, Sasha Levin

We are going to start building with CONFIG_TRACE_IRQFLAGS defined, so
let's wire up a few dummy variables in our task_struct.

This isn't needed in userspace, but due to some refactoring in
kernel-side lockdep it's easier to just wire it up and enable
CONFIG_TRACE_IRQFLAGS.

Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 tools/include/linux/lockdep.h | 8 ++++++++
 tools/lib/lockdep/lockdep.c   | 4 ++--
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/tools/include/linux/lockdep.h b/tools/include/linux/lockdep.h
index e56997288f2b0..3a9924d6d3ae8 100644
--- a/tools/include/linux/lockdep.h
+++ b/tools/include/linux/lockdep.h
@@ -23,6 +23,8 @@
 
 #include "../../../include/linux/lockdep.h"
 
+static bool early_boot_irqs_disabled;
+
 struct task_struct {
 	u64 curr_chain_key;
 	int lockdep_depth;
@@ -31,6 +33,12 @@ struct task_struct {
 	gfp_t lockdep_reclaim_gfp;
 	int pid;
 	int state;
+	int softirqs_enabled, hardirqs_enabled, softirqs_disabled, hardirqs_disabled, irq_events;
+	unsigned long softirq_disable_ip, softirq_enable_ip;
+	unsigned int softirq_disable_event, softirq_enable_event;
+	unsigned long hardirq_disable_ip, hardirq_enable_ip;
+	unsigned int hardirq_disable_event, hardirq_enable_event;
+	int softirq_context, hardirq_context;
 	char comm[17];
 };
 
diff --git a/tools/lib/lockdep/lockdep.c b/tools/lib/lockdep/lockdep.c
index 348a9d0fb766a..9be12d233477a 100644
--- a/tools/lib/lockdep/lockdep.c
+++ b/tools/lib/lockdep/lockdep.c
@@ -15,10 +15,10 @@ u32 prandom_u32(void)
 	abort();
 }
 
-void print_irqtrace_events(struct task_struct *curr)
+/*void print_irqtrace_events(struct task_struct *curr)
 {
 	abort();
-}
+}*/
 
 static struct new_utsname *init_utsname(void)
 {
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 06/11] tools/kernel.h: add BUILD_BUG_ON_NOT_POWER_OF_2 macro
  2020-02-18  2:41 [PATCH 00/11] Fix up liblockdep for 5.6-rc Sasha Levin
                   ` (4 preceding siblings ...)
  2020-02-18  2:41 ` [PATCH 05/11] tools/lib/lockdep: add definition required for IRQ flag tracing Sasha Levin
@ 2020-02-18  2:41 ` Sasha Levin
  2020-02-18  2:41 ` [PATCH 07/11] tools bitmap: add bitmap_clear definition Sasha Levin
                   ` (4 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Sasha Levin @ 2020-02-18  2:41 UTC (permalink / raw)
  To: mingo, peterz
  Cc: linux-kernel, tglx, jolsa, alexey.budankov, songliubraving, acme,
	allison, Sasha Levin

This is now needed as a result of 12593b7467f9 ("locking/lockdep: Reduce
space occupied by stack traces").

Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 tools/include/linux/kernel.h | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/tools/include/linux/kernel.h b/tools/include/linux/kernel.h
index d2b3e1cc0218e..cc3d60623ca47 100644
--- a/tools/include/linux/kernel.h
+++ b/tools/include/linux/kernel.h
@@ -38,6 +38,12 @@
 #define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)]))
 #define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); }))
 
+/* Force a compilation error if a constant expression is not a power of 2 */
+#define __BUILD_BUG_ON_NOT_POWER_OF_2(n)        \
+	BUILD_BUG_ON(((n) & ((n) - 1)) != 0)
+#define BUILD_BUG_ON_NOT_POWER_OF_2(n)                  \
+	BUILD_BUG_ON((n) == 0 || (((n) & ((n) - 1)) != 0))
+
 #ifndef max
 #define max(x, y) ({				\
 	typeof(x) _max1 = (x);			\
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 07/11] tools bitmap: add bitmap_clear definition
  2020-02-18  2:41 [PATCH 00/11] Fix up liblockdep for 5.6-rc Sasha Levin
                   ` (5 preceding siblings ...)
  2020-02-18  2:41 ` [PATCH 06/11] tools/kernel.h: add BUILD_BUG_ON_NOT_POWER_OF_2 macro Sasha Levin
@ 2020-02-18  2:41 ` Sasha Levin
  2020-02-18  2:41 ` [PATCH 08/11] tools/lib/lockdep: Hook up vsprintf, find_bit, hweight libraries Sasha Levin
                   ` (3 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Sasha Levin @ 2020-02-18  2:41 UTC (permalink / raw)
  To: mingo, peterz
  Cc: linux-kernel, tglx, jolsa, alexey.budankov, songliubraving, acme,
	allison, Sasha Levin

This is needed as a result of de4643a77356 ("locking/lockdep: Reuse lock
chains that have been freed").

Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 tools/lib/bitmap.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/tools/lib/bitmap.c b/tools/lib/bitmap.c
index b6bc037623fc1..873176c501e43 100644
--- a/tools/lib/bitmap.c
+++ b/tools/lib/bitmap.c
@@ -101,3 +101,23 @@ int __bitmap_andnot(unsigned long *dst, const unsigned long *bitmap1,
 			BITMAP_LAST_WORD_MASK(bits));
 	return result != 0;
 }
+
+void bitmap_clear(unsigned long *map, unsigned int start, int len)
+{
+	unsigned long *p = map + BIT_WORD(start);
+	const unsigned int size = start + len;
+	int bits_to_clear = BITS_PER_LONG - (start % BITS_PER_LONG);
+	unsigned long mask_to_clear = BITMAP_FIRST_WORD_MASK(start);
+
+	while (len - bits_to_clear >= 0) {
+		*p &= ~mask_to_clear;
+		len -= bits_to_clear;
+		bits_to_clear = BITS_PER_LONG;
+		mask_to_clear = ~0UL;
+		p++;
+	}
+	if (len) {
+		mask_to_clear &= BITMAP_LAST_WORD_MASK(size);
+		*p &= ~mask_to_clear;
+	}
+}
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 08/11] tools/lib/lockdep: Hook up vsprintf, find_bit, hweight libraries
  2020-02-18  2:41 [PATCH 00/11] Fix up liblockdep for 5.6-rc Sasha Levin
                   ` (6 preceding siblings ...)
  2020-02-18  2:41 ` [PATCH 07/11] tools bitmap: add bitmap_clear definition Sasha Levin
@ 2020-02-18  2:41 ` Sasha Levin
  2020-02-18  2:41 ` [PATCH 09/11] tools/lib/lockdep: Enable building with CONFIG_TRACE_IRQFLAGS Sasha Levin
                   ` (2 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Sasha Levin @ 2020-02-18  2:41 UTC (permalink / raw)
  To: mingo, peterz
  Cc: linux-kernel, tglx, jolsa, alexey.budankov, songliubraving, acme,
	allison, Sasha Levin

They already exist in tools/lib/, and are now required by liblockdep, so
just add them to the build manifest.

Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 tools/lib/lockdep/Build | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/lib/lockdep/Build b/tools/lib/lockdep/Build
index 219a9e2d9e0ba..1e7c25690b8ea 100644
--- a/tools/lib/lockdep/Build
+++ b/tools/lib/lockdep/Build
@@ -1 +1 @@
-liblockdep-y += common.o lockdep.o preload.o rbtree.o ../../lib/bitmap.o
+liblockdep-y += common.o lockdep.o preload.o rbtree.o ../../lib/bitmap.o ../../lib/vsprintf.o ../../lib/find_bit.o ../../lib/hweight.o
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 09/11] tools/lib/lockdep: Enable building with CONFIG_TRACE_IRQFLAGS
  2020-02-18  2:41 [PATCH 00/11] Fix up liblockdep for 5.6-rc Sasha Levin
                   ` (7 preceding siblings ...)
  2020-02-18  2:41 ` [PATCH 08/11] tools/lib/lockdep: Hook up vsprintf, find_bit, hweight libraries Sasha Levin
@ 2020-02-18  2:41 ` Sasha Levin
  2020-02-18  2:41 ` [PATCH 10/11] tools/lib/lockdep: New stacktrace API Sasha Levin
  2020-02-18  2:41 ` [PATCH 11/11] tools/lib/lockdep: call lockdep_init_task on init Sasha Levin
  10 siblings, 0 replies; 12+ messages in thread
From: Sasha Levin @ 2020-02-18  2:41 UTC (permalink / raw)
  To: mingo, peterz
  Cc: linux-kernel, tglx, jolsa, alexey.budankov, songliubraving, acme,
	allison, Sasha Levin

At this point it's always enabled with CONFIG_PROVE_LOCKING, so it's
easier to enable it in liblockdep as well rather than try and fix up the
lockdep code.

Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 tools/lib/lockdep/Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/lib/lockdep/Makefile b/tools/lib/lockdep/Makefile
index 9dafb8cb752fe..efb6b7980a009 100644
--- a/tools/lib/lockdep/Makefile
+++ b/tools/lib/lockdep/Makefile
@@ -78,7 +78,7 @@ export Q VERBOSE
 INCLUDES = -I. -I./uinclude -I./include -I../../include $(CONFIG_INCLUDES)
 
 # Set compile option CFLAGS if not set elsewhere
-CFLAGS ?= -g -DCONFIG_LOCKDEP -DCONFIG_STACKTRACE -DCONFIG_PROVE_LOCKING -DBITS_PER_LONG=__WORDSIZE -DLIBLOCKDEP_VERSION='"$(LIBLOCKDEP_VERSION)"' -rdynamic -O0 -g
+CFLAGS ?= -g -DCONFIG_LOCKDEP -DCONFIG_STACKTRACE -DCONFIG_PROVE_LOCKING -DCONFIG_TRACE_IRQFLAGS -DBITS_PER_LONG=__WORDSIZE -DLIBLOCKDEP_VERSION='"$(LIBLOCKDEP_VERSION)"' -rdynamic -O0 -g
 CFLAGS += -fPIC
 CFLAGS += -Wall
 
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 10/11] tools/lib/lockdep: New stacktrace API
  2020-02-18  2:41 [PATCH 00/11] Fix up liblockdep for 5.6-rc Sasha Levin
                   ` (8 preceding siblings ...)
  2020-02-18  2:41 ` [PATCH 09/11] tools/lib/lockdep: Enable building with CONFIG_TRACE_IRQFLAGS Sasha Levin
@ 2020-02-18  2:41 ` Sasha Levin
  2020-02-18  2:41 ` [PATCH 11/11] tools/lib/lockdep: call lockdep_init_task on init Sasha Levin
  10 siblings, 0 replies; 12+ messages in thread
From: Sasha Levin @ 2020-02-18  2:41 UTC (permalink / raw)
  To: mingo, peterz
  Cc: linux-kernel, tglx, jolsa, alexey.budankov, songliubraving, acme,
	allison, Sasha Levin

The kernel switched to using kernel/stacktrace.c, and the API slightly
changed.

Adjust it to make stack traces work again.

Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 tools/include/linux/stacktrace.h | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/tools/include/linux/stacktrace.h b/tools/include/linux/stacktrace.h
index ae343ac35bfa7..b290b98d883aa 100644
--- a/tools/include/linux/stacktrace.h
+++ b/tools/include/linux/stacktrace.h
@@ -15,10 +15,18 @@ static inline void print_stack_trace(struct stack_trace *trace, int spaces)
 	backtrace_symbols_fd((void **)trace->entries, trace->nr_entries, 1);
 }
 
+static inline void stack_trace_print(const long unsigned int *entries, unsigned int nr, int spaces)
+{
+	backtrace_symbols_fd((void **)entries, nr, 1);
+}
+
 #define save_stack_trace(trace)	\
 	((trace)->nr_entries =	\
 		backtrace((void **)(trace)->entries, (trace)->max_entries))
 
+#define stack_trace_save(e, m, x) \
+	backtrace((void **)(e), (m))
+
 static inline int dump_stack(void)
 {
 	void *array[64];
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 11/11] tools/lib/lockdep: call lockdep_init_task on init
  2020-02-18  2:41 [PATCH 00/11] Fix up liblockdep for 5.6-rc Sasha Levin
                   ` (9 preceding siblings ...)
  2020-02-18  2:41 ` [PATCH 10/11] tools/lib/lockdep: New stacktrace API Sasha Levin
@ 2020-02-18  2:41 ` Sasha Levin
  10 siblings, 0 replies; 12+ messages in thread
From: Sasha Levin @ 2020-02-18  2:41 UTC (permalink / raw)
  To: mingo, peterz
  Cc: linux-kernel, tglx, jolsa, alexey.budankov, songliubraving, acme,
	allison, Sasha Levin

We now have to explicitly call lockdep_init_task() when starting up.

Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 tools/lib/lockdep/preload.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/tools/lib/lockdep/preload.c b/tools/lib/lockdep/preload.c
index 8f1adbe887b2f..578fdeda9422c 100644
--- a/tools/lib/lockdep/preload.c
+++ b/tools/lib/lockdep/preload.c
@@ -9,6 +9,8 @@
 #include "include/liblockdep/mutex.h"
 #include "../../include/linux/rbtree.h"
 
+extern struct task_struct *__curr(void);
+
 /**
  * struct lock_lookup - liblockdep's view of a single unique lock
  * @orig: pointer to the original pthread lock, used for lookups
@@ -421,6 +423,8 @@ __attribute__((constructor)) static void init_preload(void)
 	if (__init_state == done)
 		return;
 
+	lockdep_init_task(__curr());
+
 #ifndef __GLIBC__
 	__init_state = prepare;
 
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2020-02-18  2:42 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-02-18  2:41 [PATCH 00/11] Fix up liblockdep for 5.6-rc Sasha Levin
2020-02-18  2:41 ` [PATCH 01/11] tools headers: Add kprobes.h header Sasha Levin
2020-02-18  2:41 ` [PATCH 02/11] tools headers: Add rcupdate.h header Sasha Levin
2020-02-18  2:41 ` [PATCH 03/11] tools/kernel.h: extend with dummy RCU functions Sasha Levin
2020-02-18  2:41 ` [PATCH 04/11] tools bitmap: add bitmap_andnot definition Sasha Levin
2020-02-18  2:41 ` [PATCH 05/11] tools/lib/lockdep: add definition required for IRQ flag tracing Sasha Levin
2020-02-18  2:41 ` [PATCH 06/11] tools/kernel.h: add BUILD_BUG_ON_NOT_POWER_OF_2 macro Sasha Levin
2020-02-18  2:41 ` [PATCH 07/11] tools bitmap: add bitmap_clear definition Sasha Levin
2020-02-18  2:41 ` [PATCH 08/11] tools/lib/lockdep: Hook up vsprintf, find_bit, hweight libraries Sasha Levin
2020-02-18  2:41 ` [PATCH 09/11] tools/lib/lockdep: Enable building with CONFIG_TRACE_IRQFLAGS Sasha Levin
2020-02-18  2:41 ` [PATCH 10/11] tools/lib/lockdep: New stacktrace API Sasha Levin
2020-02-18  2:41 ` [PATCH 11/11] tools/lib/lockdep: call lockdep_init_task on init Sasha Levin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).