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

Hi Ingo,

This series fixes up most of liblockdep to work with the current kernel
tree.

Change in v2:

 - Rebase on top of the 5.7 merge window work.

Sasha Levin (12):
  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/lib/lockdep: switch to using lockdep_init_map_waits

 tools/include/linux/bitmap.h                  | 10 ++++++
 tools/include/linux/kernel.h                  | 15 ++++++++
 tools/include/linux/kprobes.h                 |  7 ++++
 tools/include/linux/lockdep.h                 |  9 +++++
 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/include/liblockdep/common.h |  4 +--
 tools/lib/lockdep/include/liblockdep/mutex.h  |  2 +-
 tools/lib/lockdep/include/liblockdep/rwlock.h |  2 +-
 tools/lib/lockdep/lockdep.c                   |  4 +--
 tools/lib/lockdep/preload.c                   |  6 +++-
 14 files changed, 109 insertions(+), 9 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] 14+ messages in thread

* [PATCH v2 01/12] tools headers: Add kprobes.h header
  2020-04-19  1:57 [PATCH v2 00/12] Fix up liblockdep for 5.7-rc Sasha Levin
@ 2020-04-19  1:57 ` Sasha Levin
  2020-04-19  1:57 ` [PATCH v2 02/12] tools headers: Add rcupdate.h header Sasha Levin
                   ` (11 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Sasha Levin @ 2020-04-19  1:57 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] 14+ messages in thread

* [PATCH v2 02/12] tools headers: Add rcupdate.h header
  2020-04-19  1:57 [PATCH v2 00/12] Fix up liblockdep for 5.7-rc Sasha Levin
  2020-04-19  1:57 ` [PATCH v2 01/12] tools headers: Add kprobes.h header Sasha Levin
@ 2020-04-19  1:57 ` Sasha Levin
  2020-04-19  1:57 ` [PATCH v2 03/12] tools/kernel.h: extend with dummy RCU functions Sasha Levin
                   ` (10 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Sasha Levin @ 2020-04-19  1:57 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..1b7abc86f4336
--- /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] 14+ messages in thread

* [PATCH v2 03/12] tools/kernel.h: extend with dummy RCU functions
  2020-04-19  1:57 [PATCH v2 00/12] Fix up liblockdep for 5.7-rc Sasha Levin
  2020-04-19  1:57 ` [PATCH v2 01/12] tools headers: Add kprobes.h header Sasha Levin
  2020-04-19  1:57 ` [PATCH v2 02/12] tools headers: Add rcupdate.h header Sasha Levin
@ 2020-04-19  1:57 ` Sasha Levin
  2020-04-19  1:57 ` [PATCH v2 04/12] tools bitmap: add bitmap_andnot definition Sasha Levin
                   ` (9 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Sasha Levin @ 2020-04-19  1:57 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] 14+ messages in thread

* [PATCH v2 04/12] tools bitmap: add bitmap_andnot definition
  2020-04-19  1:57 [PATCH v2 00/12] Fix up liblockdep for 5.7-rc Sasha Levin
                   ` (2 preceding siblings ...)
  2020-04-19  1:57 ` [PATCH v2 03/12] tools/kernel.h: extend with dummy RCU functions Sasha Levin
@ 2020-04-19  1:57 ` Sasha Levin
  2020-04-19  1:57 ` [PATCH v2 05/12] tools/lib/lockdep: add definition required for IRQ flag tracing Sasha Levin
                   ` (8 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Sasha Levin @ 2020-04-19  1:57 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] 14+ messages in thread

* [PATCH v2 05/12] tools/lib/lockdep: add definition required for IRQ flag tracing
  2020-04-19  1:57 [PATCH v2 00/12] Fix up liblockdep for 5.7-rc Sasha Levin
                   ` (3 preceding siblings ...)
  2020-04-19  1:57 ` [PATCH v2 04/12] tools bitmap: add bitmap_andnot definition Sasha Levin
@ 2020-04-19  1:57 ` Sasha Levin
  2020-04-19  1:57 ` [PATCH v2 06/12] tools/kernel.h: add BUILD_BUG_ON_NOT_POWER_OF_2 macro Sasha Levin
                   ` (7 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Sasha Levin @ 2020-04-19  1:57 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] 14+ messages in thread

* [PATCH v2 06/12] tools/kernel.h: add BUILD_BUG_ON_NOT_POWER_OF_2 macro
  2020-04-19  1:57 [PATCH v2 00/12] Fix up liblockdep for 5.7-rc Sasha Levin
                   ` (4 preceding siblings ...)
  2020-04-19  1:57 ` [PATCH v2 05/12] tools/lib/lockdep: add definition required for IRQ flag tracing Sasha Levin
@ 2020-04-19  1:57 ` Sasha Levin
  2020-04-19  1:57 ` [PATCH v2 07/12] tools bitmap: add bitmap_clear definition Sasha Levin
                   ` (6 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Sasha Levin @ 2020-04-19  1:57 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] 14+ messages in thread

* [PATCH v2 07/12] tools bitmap: add bitmap_clear definition
  2020-04-19  1:57 [PATCH v2 00/12] Fix up liblockdep for 5.7-rc Sasha Levin
                   ` (5 preceding siblings ...)
  2020-04-19  1:57 ` [PATCH v2 06/12] tools/kernel.h: add BUILD_BUG_ON_NOT_POWER_OF_2 macro Sasha Levin
@ 2020-04-19  1:57 ` Sasha Levin
  2020-04-19  1:57 ` [PATCH v2 08/12] tools/lib/lockdep: Hook up vsprintf, find_bit, hweight libraries Sasha Levin
                   ` (5 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Sasha Levin @ 2020-04-19  1:57 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] 14+ messages in thread

* [PATCH v2 08/12] tools/lib/lockdep: Hook up vsprintf, find_bit, hweight libraries
  2020-04-19  1:57 [PATCH v2 00/12] Fix up liblockdep for 5.7-rc Sasha Levin
                   ` (6 preceding siblings ...)
  2020-04-19  1:57 ` [PATCH v2 07/12] tools bitmap: add bitmap_clear definition Sasha Levin
@ 2020-04-19  1:57 ` Sasha Levin
  2020-04-19  1:57 ` [PATCH v2 09/12] tools/lib/lockdep: Enable building with CONFIG_TRACE_IRQFLAGS Sasha Levin
                   ` (4 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Sasha Levin @ 2020-04-19  1:57 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] 14+ messages in thread

* [PATCH v2 09/12] tools/lib/lockdep: Enable building with CONFIG_TRACE_IRQFLAGS
  2020-04-19  1:57 [PATCH v2 00/12] Fix up liblockdep for 5.7-rc Sasha Levin
                   ` (7 preceding siblings ...)
  2020-04-19  1:57 ` [PATCH v2 08/12] tools/lib/lockdep: Hook up vsprintf, find_bit, hweight libraries Sasha Levin
@ 2020-04-19  1:57 ` Sasha Levin
  2020-04-19  1:57 ` [PATCH v2 10/12] tools/lib/lockdep: New stacktrace API Sasha Levin
                   ` (3 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Sasha Levin @ 2020-04-19  1:57 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] 14+ messages in thread

* [PATCH v2 10/12] tools/lib/lockdep: New stacktrace API
  2020-04-19  1:57 [PATCH v2 00/12] Fix up liblockdep for 5.7-rc Sasha Levin
                   ` (8 preceding siblings ...)
  2020-04-19  1:57 ` [PATCH v2 09/12] tools/lib/lockdep: Enable building with CONFIG_TRACE_IRQFLAGS Sasha Levin
@ 2020-04-19  1:57 ` Sasha Levin
  2020-04-19  1:57 ` [PATCH v2 11/12] tools/lib/lockdep: call lockdep_init_task on init Sasha Levin
                   ` (2 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Sasha Levin @ 2020-04-19  1:57 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] 14+ messages in thread

* [PATCH v2 11/12] tools/lib/lockdep: call lockdep_init_task on init
  2020-04-19  1:57 [PATCH v2 00/12] Fix up liblockdep for 5.7-rc Sasha Levin
                   ` (9 preceding siblings ...)
  2020-04-19  1:57 ` [PATCH v2 10/12] tools/lib/lockdep: New stacktrace API Sasha Levin
@ 2020-04-19  1:57 ` Sasha Levin
  2020-04-19  1:57 ` [PATCH v2 12/12] tools/lib/lockdep: switch to using lockdep_init_map_waits Sasha Levin
  2020-06-01 20:52 ` [PATCH v2 00/12] Fix up liblockdep for 5.7-rc Sasha Levin
  12 siblings, 0 replies; 14+ messages in thread
From: Sasha Levin @ 2020-04-19  1:57 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] 14+ messages in thread

* [PATCH v2 12/12] tools/lib/lockdep: switch to using lockdep_init_map_waits
  2020-04-19  1:57 [PATCH v2 00/12] Fix up liblockdep for 5.7-rc Sasha Levin
                   ` (10 preceding siblings ...)
  2020-04-19  1:57 ` [PATCH v2 11/12] tools/lib/lockdep: call lockdep_init_task on init Sasha Levin
@ 2020-04-19  1:57 ` Sasha Levin
  2020-06-01 20:52 ` [PATCH v2 00/12] Fix up liblockdep for 5.7-rc Sasha Levin
  12 siblings, 0 replies; 14+ messages in thread
From: Sasha Levin @ 2020-04-19  1:57 UTC (permalink / raw)
  To: mingo, peterz
  Cc: linux-kernel, tglx, jolsa, alexey.budankov, songliubraving, acme,
	allison, Sasha Levin

As of de8f5e4f2dc1 ("lockdep: Introduce wait-type checks") lockdep
exports lockdep_init_map_waits() instead of lockdep_init_map() for
initialization.

Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 tools/include/linux/kernel.h                  | 2 ++
 tools/include/linux/lockdep.h                 | 1 +
 tools/lib/lockdep/include/liblockdep/common.h | 4 ++--
 tools/lib/lockdep/include/liblockdep/mutex.h  | 2 +-
 tools/lib/lockdep/include/liblockdep/rwlock.h | 2 +-
 tools/lib/lockdep/preload.c                   | 2 +-
 6 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/tools/include/linux/kernel.h b/tools/include/linux/kernel.h
index cc3d60623ca47..046570566e277 100644
--- a/tools/include/linux/kernel.h
+++ b/tools/include/linux/kernel.h
@@ -132,4 +132,6 @@ static __maybe_unused int system_state;
 #define rcu_read_lock()
 #define rcu_read_unlock()
 
+#define in_nmi() 0
+
 #endif
diff --git a/tools/include/linux/lockdep.h b/tools/include/linux/lockdep.h
index 3a9924d6d3ae8..4e5f31f28ca3e 100644
--- a/tools/include/linux/lockdep.h
+++ b/tools/include/linux/lockdep.h
@@ -34,6 +34,7 @@ struct task_struct {
 	int pid;
 	int state;
 	int softirqs_enabled, hardirqs_enabled, softirqs_disabled, hardirqs_disabled, irq_events;
+	int hardirq_threaded, irq_config;
 	unsigned long softirq_disable_ip, softirq_enable_ip;
 	unsigned int softirq_disable_event, softirq_enable_event;
 	unsigned long hardirq_disable_ip, hardirq_enable_ip;
diff --git a/tools/lib/lockdep/include/liblockdep/common.h b/tools/lib/lockdep/include/liblockdep/common.h
index a6d7ee5f18ba9..5f698671f45c2 100644
--- a/tools/lib/lockdep/include/liblockdep/common.h
+++ b/tools/lib/lockdep/include/liblockdep/common.h
@@ -37,8 +37,8 @@ struct lockdep_map {
 #endif
 };
 
-void lockdep_init_map(struct lockdep_map *lock, const char *name,
-			struct lock_class_key *key, int subclass);
+void lockdep_init_map_waits(struct lockdep_map *lock, const char *name,
+	struct lock_class_key *key, int subclass, short inner, short outer);
 void lock_acquire(struct lockdep_map *lock, unsigned int subclass,
 			int trylock, int read, int check,
 			struct lockdep_map *nest_lock, unsigned long ip);
diff --git a/tools/lib/lockdep/include/liblockdep/mutex.h b/tools/lib/lockdep/include/liblockdep/mutex.h
index bd106b82759b7..6106fc73da687 100644
--- a/tools/lib/lockdep/include/liblockdep/mutex.h
+++ b/tools/lib/lockdep/include/liblockdep/mutex.h
@@ -24,7 +24,7 @@ static inline int __mutex_init(liblockdep_pthread_mutex_t *lock,
 				struct lock_class_key *key,
 				const pthread_mutexattr_t *__mutexattr)
 {
-	lockdep_init_map(&lock->dep_map, name, key, 0);
+	lockdep_init_map_waits(&lock->dep_map, name, key, 0, 0, 0);
 	return pthread_mutex_init(&lock->mutex, __mutexattr);
 }
 
diff --git a/tools/lib/lockdep/include/liblockdep/rwlock.h b/tools/lib/lockdep/include/liblockdep/rwlock.h
index 6d5d2932bf4d9..222748d04219d 100644
--- a/tools/lib/lockdep/include/liblockdep/rwlock.h
+++ b/tools/lib/lockdep/include/liblockdep/rwlock.h
@@ -23,7 +23,7 @@ static inline int __rwlock_init(liblockdep_pthread_rwlock_t *lock,
 				struct lock_class_key *key,
 				const pthread_rwlockattr_t *attr)
 {
-	lockdep_init_map(&lock->dep_map, name, key, 0);
+	lockdep_init_map_waits(&lock->dep_map, name, key, 0, 0, 0);
 
 	return pthread_rwlock_init(&lock->rwlock, attr);
 }
diff --git a/tools/lib/lockdep/preload.c b/tools/lib/lockdep/preload.c
index 578fdeda9422c..5bd58c51066c4 100644
--- a/tools/lib/lockdep/preload.c
+++ b/tools/lib/lockdep/preload.c
@@ -199,7 +199,7 @@ static struct lock_lookup *__get_lock(void *lock)
 	 * TODO: Get the real name of the lock using libdwarf
 	 */
 	sprintf(l->name, "%p", lock);
-	lockdep_init_map(&l->dep_map, l->name, &l->key, 0);
+//	lockdep_init_map_waits(&l->dep_map, l->name, &l->key, 0, 0, 0);
 
 	ll_pthread_rwlock_wrlock(&locks_rwlock);
 	/* This might have changed since the last time we fetched it */
-- 
2.20.1


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

* Re: [PATCH v2 00/12] Fix up liblockdep for 5.7-rc
  2020-04-19  1:57 [PATCH v2 00/12] Fix up liblockdep for 5.7-rc Sasha Levin
                   ` (11 preceding siblings ...)
  2020-04-19  1:57 ` [PATCH v2 12/12] tools/lib/lockdep: switch to using lockdep_init_map_waits Sasha Levin
@ 2020-06-01 20:52 ` Sasha Levin
  12 siblings, 0 replies; 14+ messages in thread
From: Sasha Levin @ 2020-06-01 20:52 UTC (permalink / raw)
  To: mingo, peterz
  Cc: linux-kernel, tglx, jolsa, alexey.budankov, songliubraving, acme,
	allison

Ping?

On Sat, Apr 18, 2020 at 09:57:42PM -0400, Sasha Levin wrote:
>Hi Ingo,
>
>This series fixes up most of liblockdep to work with the current kernel
>tree.
>
>Change in v2:
>
> - Rebase on top of the 5.7 merge window work.
>
>Sasha Levin (12):
>  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/lib/lockdep: switch to using lockdep_init_map_waits
>
> tools/include/linux/bitmap.h                  | 10 ++++++
> tools/include/linux/kernel.h                  | 15 ++++++++
> tools/include/linux/kprobes.h                 |  7 ++++
> tools/include/linux/lockdep.h                 |  9 +++++
> 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/include/liblockdep/common.h |  4 +--
> tools/lib/lockdep/include/liblockdep/mutex.h  |  2 +-
> tools/lib/lockdep/include/liblockdep/rwlock.h |  2 +-
> tools/lib/lockdep/lockdep.c                   |  4 +--
> tools/lib/lockdep/preload.c                   |  6 +++-
> 14 files changed, 109 insertions(+), 9 deletions(-)
> create mode 100644 tools/include/linux/kprobes.h
> create mode 100644 tools/include/linux/rcupdate.h
>
>-- 
>2.20.1
>

-- 
Thanks,
Sasha

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

end of thread, other threads:[~2020-06-01 20:52 UTC | newest]

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