* [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