* [PATCH v3 00/14] Fix up liblockdep for 5.8-rc
@ 2020-06-22 22:42 Sasha Levin
2020-06-22 22:42 ` [PATCH v3 01/14] tools headers: Add kprobes.h header Sasha Levin
` (13 more replies)
0 siblings, 14 replies; 16+ messages in thread
From: Sasha Levin @ 2020-06-22 22:42 UTC (permalink / raw)
To: peterz
Cc: mingo, linux-kernel, tglx, jolsa, alexey.budankov,
songliubraving, acme, allison, sashal
Hi Peter,
This series fixes up most of liblockdep to work with the current kernel
tree.
Change in v3:
- Rebase on top of the 5.8 merge window work.
Sasha Levin (14):
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 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/kernel.h: hide noinstr
tools/lib/lockdep: explicitly declare lockdep_init_task()
tools/kernel.h: hide task_struct.hardirq_chain_key
tools/include/linux/bitmap.h | 10 ++++++
tools/include/linux/kernel.h | 11 ++++++
tools/include/linux/kprobes.h | 7 ++++
tools/include/linux/lockdep.h | 10 ++++++
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 | 8 ++++-
14 files changed, 108 insertions(+), 9 deletions(-)
create mode 100644 tools/include/linux/kprobes.h
create mode 100644 tools/include/linux/rcupdate.h
--
2.25.1
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH v3 01/14] tools headers: Add kprobes.h header
2020-06-22 22:42 [PATCH v3 00/14] Fix up liblockdep for 5.8-rc Sasha Levin
@ 2020-06-22 22:42 ` Sasha Levin
2020-06-22 22:42 ` [PATCH v3 02/14] tools headers: Add rcupdate.h header Sasha Levin
` (12 subsequent siblings)
13 siblings, 0 replies; 16+ messages in thread
From: Sasha Levin @ 2020-06-22 22:42 UTC (permalink / raw)
To: peterz
Cc: mingo, linux-kernel, tglx, jolsa, alexey.budankov,
songliubraving, acme, allison, sashal
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.25.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v3 02/14] tools headers: Add rcupdate.h header
2020-06-22 22:42 [PATCH v3 00/14] Fix up liblockdep for 5.8-rc Sasha Levin
2020-06-22 22:42 ` [PATCH v3 01/14] tools headers: Add kprobes.h header Sasha Levin
@ 2020-06-22 22:42 ` Sasha Levin
2020-06-22 22:42 ` [PATCH v3 03/14] tools/kernel.h: extend with dummy RCU functions Sasha Levin
` (11 subsequent siblings)
13 siblings, 0 replies; 16+ messages in thread
From: Sasha Levin @ 2020-06-22 22:42 UTC (permalink / raw)
To: peterz
Cc: mingo, linux-kernel, tglx, jolsa, alexey.budankov,
songliubraving, acme, allison, sashal
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.25.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v3 03/14] tools/kernel.h: extend with dummy RCU functions
2020-06-22 22:42 [PATCH v3 00/14] Fix up liblockdep for 5.8-rc Sasha Levin
2020-06-22 22:42 ` [PATCH v3 01/14] tools headers: Add kprobes.h header Sasha Levin
2020-06-22 22:42 ` [PATCH v3 02/14] tools headers: Add rcupdate.h header Sasha Levin
@ 2020-06-22 22:42 ` Sasha Levin
2020-06-22 22:42 ` [PATCH v3 04/14] tools bitmap: add bitmap_andnot definition Sasha Levin
` (10 subsequent siblings)
13 siblings, 0 replies; 16+ messages in thread
From: Sasha Levin @ 2020-06-22 22:42 UTC (permalink / raw)
To: peterz
Cc: mingo, linux-kernel, tglx, jolsa, alexey.budankov,
songliubraving, acme, allison, sashal
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 a7e54a08fb54c..902d3b9ab4c17 100644
--- a/tools/include/linux/kernel.h
+++ b/tools/include/linux/kernel.h
@@ -117,4 +117,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.25.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v3 04/14] tools bitmap: add bitmap_andnot definition
2020-06-22 22:42 [PATCH v3 00/14] Fix up liblockdep for 5.8-rc Sasha Levin
` (2 preceding siblings ...)
2020-06-22 22:42 ` [PATCH v3 03/14] tools/kernel.h: extend with dummy RCU functions Sasha Levin
@ 2020-06-22 22:42 ` Sasha Levin
2020-06-22 22:42 ` [PATCH v3 05/14] tools/lib/lockdep: add definition required for IRQ flag tracing Sasha Levin
` (9 subsequent siblings)
13 siblings, 0 replies; 16+ messages in thread
From: Sasha Levin @ 2020-06-22 22:42 UTC (permalink / raw)
To: peterz
Cc: mingo, linux-kernel, tglx, jolsa, alexey.budankov,
songliubraving, acme, allison, sashal
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.25.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v3 05/14] tools/lib/lockdep: add definition required for IRQ flag tracing
2020-06-22 22:42 [PATCH v3 00/14] Fix up liblockdep for 5.8-rc Sasha Levin
` (3 preceding siblings ...)
2020-06-22 22:42 ` [PATCH v3 04/14] tools bitmap: add bitmap_andnot definition Sasha Levin
@ 2020-06-22 22:42 ` Sasha Levin
2020-06-22 22:42 ` [PATCH v3 06/14] tools bitmap: add bitmap_clear definition Sasha Levin
` (8 subsequent siblings)
13 siblings, 0 replies; 16+ messages in thread
From: Sasha Levin @ 2020-06-22 22:42 UTC (permalink / raw)
To: peterz
Cc: mingo, linux-kernel, tglx, jolsa, alexey.budankov,
songliubraving, acme, allison, sashal
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.25.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v3 06/14] tools bitmap: add bitmap_clear definition
2020-06-22 22:42 [PATCH v3 00/14] Fix up liblockdep for 5.8-rc Sasha Levin
` (4 preceding siblings ...)
2020-06-22 22:42 ` [PATCH v3 05/14] tools/lib/lockdep: add definition required for IRQ flag tracing Sasha Levin
@ 2020-06-22 22:42 ` Sasha Levin
2020-06-22 22:42 ` [PATCH v3 07/14] tools/lib/lockdep: Hook up vsprintf, find_bit, hweight libraries Sasha Levin
` (7 subsequent siblings)
13 siblings, 0 replies; 16+ messages in thread
From: Sasha Levin @ 2020-06-22 22:42 UTC (permalink / raw)
To: peterz
Cc: mingo, linux-kernel, tglx, jolsa, alexey.budankov,
songliubraving, acme, allison, sashal
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.25.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v3 07/14] tools/lib/lockdep: Hook up vsprintf, find_bit, hweight libraries
2020-06-22 22:42 [PATCH v3 00/14] Fix up liblockdep for 5.8-rc Sasha Levin
` (5 preceding siblings ...)
2020-06-22 22:42 ` [PATCH v3 06/14] tools bitmap: add bitmap_clear definition Sasha Levin
@ 2020-06-22 22:42 ` Sasha Levin
2020-06-22 22:42 ` [PATCH v3 08/14] tools/lib/lockdep: Enable building with CONFIG_TRACE_IRQFLAGS Sasha Levin
` (6 subsequent siblings)
13 siblings, 0 replies; 16+ messages in thread
From: Sasha Levin @ 2020-06-22 22:42 UTC (permalink / raw)
To: peterz
Cc: mingo, linux-kernel, tglx, jolsa, alexey.budankov,
songliubraving, acme, allison, sashal
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.25.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v3 08/14] tools/lib/lockdep: Enable building with CONFIG_TRACE_IRQFLAGS
2020-06-22 22:42 [PATCH v3 00/14] Fix up liblockdep for 5.8-rc Sasha Levin
` (6 preceding siblings ...)
2020-06-22 22:42 ` [PATCH v3 07/14] tools/lib/lockdep: Hook up vsprintf, find_bit, hweight libraries Sasha Levin
@ 2020-06-22 22:42 ` Sasha Levin
2020-06-22 22:42 ` [PATCH v3 09/14] tools/lib/lockdep: New stacktrace API Sasha Levin
` (5 subsequent siblings)
13 siblings, 0 replies; 16+ messages in thread
From: Sasha Levin @ 2020-06-22 22:42 UTC (permalink / raw)
To: peterz
Cc: mingo, linux-kernel, tglx, jolsa, alexey.budankov,
songliubraving, acme, allison, sashal
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.25.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v3 09/14] tools/lib/lockdep: New stacktrace API
2020-06-22 22:42 [PATCH v3 00/14] Fix up liblockdep for 5.8-rc Sasha Levin
` (7 preceding siblings ...)
2020-06-22 22:42 ` [PATCH v3 08/14] tools/lib/lockdep: Enable building with CONFIG_TRACE_IRQFLAGS Sasha Levin
@ 2020-06-22 22:42 ` Sasha Levin
2020-06-22 22:42 ` [PATCH v3 10/14] tools/lib/lockdep: call lockdep_init_task on init Sasha Levin
` (4 subsequent siblings)
13 siblings, 0 replies; 16+ messages in thread
From: Sasha Levin @ 2020-06-22 22:42 UTC (permalink / raw)
To: peterz
Cc: mingo, linux-kernel, tglx, jolsa, alexey.budankov,
songliubraving, acme, allison, sashal
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.25.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v3 10/14] tools/lib/lockdep: call lockdep_init_task on init
2020-06-22 22:42 [PATCH v3 00/14] Fix up liblockdep for 5.8-rc Sasha Levin
` (8 preceding siblings ...)
2020-06-22 22:42 ` [PATCH v3 09/14] tools/lib/lockdep: New stacktrace API Sasha Levin
@ 2020-06-22 22:42 ` Sasha Levin
2020-06-22 22:42 ` [PATCH v3 11/14] tools/lib/lockdep: switch to using lockdep_init_map_waits Sasha Levin
` (3 subsequent siblings)
13 siblings, 0 replies; 16+ messages in thread
From: Sasha Levin @ 2020-06-22 22:42 UTC (permalink / raw)
To: peterz
Cc: mingo, linux-kernel, tglx, jolsa, alexey.budankov,
songliubraving, acme, allison, sashal
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.25.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v3 11/14] tools/lib/lockdep: switch to using lockdep_init_map_waits
2020-06-22 22:42 [PATCH v3 00/14] Fix up liblockdep for 5.8-rc Sasha Levin
` (9 preceding siblings ...)
2020-06-22 22:42 ` [PATCH v3 10/14] tools/lib/lockdep: call lockdep_init_task on init Sasha Levin
@ 2020-06-22 22:42 ` Sasha Levin
2020-06-22 22:42 ` [PATCH v3 12/14] tools/kernel.h: hide noinstr Sasha Levin
` (2 subsequent siblings)
13 siblings, 0 replies; 16+ messages in thread
From: Sasha Levin @ 2020-06-22 22:42 UTC (permalink / raw)
To: peterz
Cc: mingo, linux-kernel, tglx, jolsa, alexey.budankov,
songliubraving, acme, allison, sashal
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 902d3b9ab4c17..5ac493eef4237 100644
--- a/tools/include/linux/kernel.h
+++ b/tools/include/linux/kernel.h
@@ -124,4 +124,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.25.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v3 12/14] tools/kernel.h: hide noinstr
2020-06-22 22:42 [PATCH v3 00/14] Fix up liblockdep for 5.8-rc Sasha Levin
` (10 preceding siblings ...)
2020-06-22 22:42 ` [PATCH v3 11/14] tools/lib/lockdep: switch to using lockdep_init_map_waits Sasha Levin
@ 2020-06-22 22:42 ` Sasha Levin
2020-06-23 3:12 ` kernel test robot
2020-06-22 22:42 ` [PATCH v3 13/14] tools/lib/lockdep: explicitly declare lockdep_init_task() Sasha Levin
2020-06-22 22:42 ` [PATCH v3 14/14] tools/kernel.h: hide task_struct.hardirq_chain_key Sasha Levin
13 siblings, 1 reply; 16+ messages in thread
From: Sasha Levin @ 2020-06-22 22:42 UTC (permalink / raw)
To: peterz
Cc: mingo, linux-kernel, tglx, jolsa, alexey.budankov,
songliubraving, acme, allison, sashal
After 655389666643 ("vmlinux.lds.h: Create section for protection against
instrumentation") we need to ignore "noinstr" in userspace.
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
tools/include/linux/kernel.h | 2 ++
1 file changed, 2 insertions(+)
diff --git a/tools/include/linux/kernel.h b/tools/include/linux/kernel.h
index 5ac493eef4237..39fcbb144a34a 100644
--- a/tools/include/linux/kernel.h
+++ b/tools/include/linux/kernel.h
@@ -126,4 +126,6 @@ static __maybe_unused int system_state;
#define in_nmi() 0
+#define noinstr
+
#endif
--
2.25.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v3 13/14] tools/lib/lockdep: explicitly declare lockdep_init_task()
2020-06-22 22:42 [PATCH v3 00/14] Fix up liblockdep for 5.8-rc Sasha Levin
` (11 preceding siblings ...)
2020-06-22 22:42 ` [PATCH v3 12/14] tools/kernel.h: hide noinstr Sasha Levin
@ 2020-06-22 22:42 ` Sasha Levin
2020-06-22 22:42 ` [PATCH v3 14/14] tools/kernel.h: hide task_struct.hardirq_chain_key Sasha Levin
13 siblings, 0 replies; 16+ messages in thread
From: Sasha Levin @ 2020-06-22 22:42 UTC (permalink / raw)
To: peterz
Cc: mingo, linux-kernel, tglx, jolsa, alexey.budankov,
songliubraving, acme, allison, sashal
Avoid a warning as we can't pull the decleration for lockdep's header.
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
tools/lib/lockdep/preload.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/tools/lib/lockdep/preload.c b/tools/lib/lockdep/preload.c
index 5bd58c51066c4..2928c712f87f8 100644
--- a/tools/lib/lockdep/preload.c
+++ b/tools/lib/lockdep/preload.c
@@ -92,6 +92,8 @@ static int (*ll_pthread_rwlock_trywrlock)(pthread_rwlock_t *rwlock) = __pthread_
static int (*ll_pthread_rwlock_wrlock)(pthread_rwlock_t *rwlock) = __pthread_rwlock_wrlock;
static int (*ll_pthread_rwlock_unlock)(pthread_rwlock_t *rwlock) = __pthread_rwlock_unlock;
+extern void lockdep_init_task(struct task_struct *task);
+
enum { none, prepare, done, } __init_state;
static void init_preload(void);
static void try_init_preload(void)
--
2.25.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v3 14/14] tools/kernel.h: hide task_struct.hardirq_chain_key
2020-06-22 22:42 [PATCH v3 00/14] Fix up liblockdep for 5.8-rc Sasha Levin
` (12 preceding siblings ...)
2020-06-22 22:42 ` [PATCH v3 13/14] tools/lib/lockdep: explicitly declare lockdep_init_task() Sasha Levin
@ 2020-06-22 22:42 ` Sasha Levin
13 siblings, 0 replies; 16+ messages in thread
From: Sasha Levin @ 2020-06-22 22:42 UTC (permalink / raw)
To: peterz
Cc: mingo, linux-kernel, tglx, jolsa, alexey.budankov,
songliubraving, acme, allison, sashal
As a result of c86e9b987cea ("lockdep: Prepare for noinstr sections") we need
to hide hardirq_chain_key from userspace to avoid a build error.
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
tools/include/linux/lockdep.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/tools/include/linux/lockdep.h b/tools/include/linux/lockdep.h
index 4e5f31f28ca3e..b6c9e81eb45e5 100644
--- a/tools/include/linux/lockdep.h
+++ b/tools/include/linux/lockdep.h
@@ -40,6 +40,7 @@ struct task_struct {
unsigned long hardirq_disable_ip, hardirq_enable_ip;
unsigned int hardirq_disable_event, hardirq_enable_event;
int softirq_context, hardirq_context;
+ unsigned long hardirq_chain_key;
char comm[17];
};
--
2.25.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH v3 12/14] tools/kernel.h: hide noinstr
2020-06-22 22:42 ` [PATCH v3 12/14] tools/kernel.h: hide noinstr Sasha Levin
@ 2020-06-23 3:12 ` kernel test robot
0 siblings, 0 replies; 16+ messages in thread
From: kernel test robot @ 2020-06-23 3:12 UTC (permalink / raw)
To: Sasha Levin, peterz
Cc: kbuild-all, mingo, linux-kernel, tglx, jolsa, alexey.budankov,
songliubraving, acme, allison, sashal
[-- Attachment #1: Type: text/plain, Size: 8077 bytes --]
Hi Sasha,
I love your patch! Yet something to improve:
[auto build test ERROR on linus/master]
[also build test ERROR on v5.8-rc2 next-20200622]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Sasha-Levin/Fix-up-liblockdep-for-5-8-rc/20200623-064735
base: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git dd0d718152e4c65b173070d48ea9dfc06894c3e5
config: x86_64-rhel (attached as .config)
compiler: gcc-9 (Debian 9.3.0-13) 9.3.0
reproduce (this is a W=1 build):
# save the attached .config to linux build tree
make W=1 ARCH=x86_64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
In file included from objtool.h:13,
from weak.c:10:
>> elf.h:42:37: error: expected identifier or '(' before ';' token
42 | bool changed, text, rodata, noinstr;
| ^
elf.h:43:1: error: no semicolon at end of struct or union [-Werror]
43 | };
| ^
cc1: all warnings being treated as errors
In file included from objtool.h:13,
from orc_dump.c:8:
>> elf.h:42:37: error: expected identifier or '(' before ';' token
42 | bool changed, text, rodata, noinstr;
| ^
elf.h:43:1: error: no semicolon at end of struct or union [-Werror]
43 | };
| ^
In file included from objtool.h:13,
from builtin-orc.c:17:
>> elf.h:42:37: error: expected identifier or '(' before ';' token
42 | bool changed, text, rodata, noinstr;
| ^
elf.h:43:1: error: no semicolon at end of struct or union [-Werror]
43 | };
| ^
In file included from objtool.h:13,
from arch.h:11,
from check.h:11,
from orc_gen.c:9:
>> elf.h:42:37: error: expected identifier or '(' before ';' token
42 | bool changed, text, rodata, noinstr;
| ^
elf.h:43:1: error: no semicolon at end of struct or union [-Werror]
43 | };
| ^
In file included from orc_gen.c:9:
check.h:18:14: error: declaration does not declare anything [-Werror]
18 | bool noinstr;
| ^
cc1: all warnings being treated as errors
mv: cannot stat 'tools/objtool/.weak.o.tmp': No such file or directory
make[4]: *** [tools/build/Makefile.build:97: tools/objtool/weak.o] Error 1
make[4]: *** Waiting for unfinished jobs....
In file included from objtool.h:13,
from builtin-check.c:19:
>> elf.h:42:37: error: expected identifier or '(' before ';' token
42 | bool changed, text, rodata, noinstr;
| ^
elf.h:43:1: error: no semicolon at end of struct or union [-Werror]
43 | };
| ^
In file included from objtool.h:13,
from arch.h:11,
from check.c:11:
>> elf.h:42:37: error: expected identifier or '(' before ';' token
42 | bool changed, text, rodata, noinstr;
| ^
elf.h:43:1: error: no semicolon at end of struct or union [-Werror]
43 | };
| ^
In file included from special.h:10,
from special.c:15:
>> elf.h:42:37: error: expected identifier or '(' before ';' token
42 | bool changed, text, rodata, noinstr;
| ^
elf.h:43:1: error: no semicolon at end of struct or union [-Werror]
43 | };
| ^
In file included from check.c:12:
check.h:18:14: error: declaration does not declare anything [-Werror]
18 | bool noinstr;
| ^
cc1: all warnings being treated as errors
mv: cannot stat 'tools/objtool/.builtin-orc.o.tmp': No such file or directory
In file included from elf.c:20:
>> elf.h:42:37: error: expected identifier or '(' before ';' token
42 | bool changed, text, rodata, noinstr;
| ^
elf.h:43:1: error: no semicolon at end of struct or union [-Werror]
43 | };
| ^
make[4]: *** [tools/build/Makefile.build:97: tools/objtool/builtin-orc.o] Error 1
cc1: all warnings being treated as errors
mv: cannot stat 'tools/objtool/.builtin-check.o.tmp': No such file or directory
make[4]: *** [tools/build/Makefile.build:97: tools/objtool/builtin-check.o] Error 1
mv: cannot stat 'tools/objtool/.orc_gen.o.tmp': No such file or directory
cc1: all warnings being treated as errors
make[4]: *** [tools/build/Makefile.build:97: tools/objtool/orc_gen.o] Error 1
cc1: all warnings being treated as errors
mv: cannot stat 'tools/objtool/.orc_dump.o.tmp': No such file or directory
mv: cannot stat 'tools/objtool/.special.o.tmp': No such file or directory
make[4]: *** [tools/build/Makefile.build:97: tools/objtool/orc_dump.o] Error 1
make[4]: *** [tools/build/Makefile.build:97: tools/objtool/special.o] Error 1
cc1: all warnings being treated as errors
check.c: In function 'init_insn_state':
>> check.c:254:18: error: expected identifier before '=' token
254 | state->noinstr = sec->noinstr;
| ^
check.c: In function 'decode_instructions':
check.c:282:17: error: expected identifier before '=' token
282 | sec->noinstr = true;
| ^
mv: cannot stat 'tools/objtool/.elf.o.tmp': No such file or directory
make[4]: *** [tools/build/Makefile.build:97: tools/objtool/elf.o] Error 1
check.c: In function 'validate_call':
check.c:2195:21: error: expected identifier before '&&' token
2195 | if (state->noinstr && state->instr <= 0 &&
| ^~
check.c: In function 'validate_return':
check.c:2230:21: error: expected identifier before '&&' token
2230 | if (state->noinstr && state->instr > 0) {
| ^~
check.c: In function 'validate_branch':
>> check.c:2334:20: error: expected identifier before ')' token
2334 | if (state.noinstr)
| ^
In file included from arch/x86/../../objtool.h:13,
from arch/x86/../../arch.h:11,
from arch/x86/../../check.h:11,
from arch/x86/decode.c:14:
>> arch/x86/../../elf.h:42:37: error: expected identifier or '(' before ';' token
42 | bool changed, text, rodata, noinstr;
| ^
arch/x86/../../elf.h:43:1: error: no semicolon at end of struct or union [-Werror]
43 | };
| ^
In file included from arch/x86/decode.c:14:
arch/x86/../../check.h:18:14: error: declaration does not declare anything [-Werror]
18 | bool noinstr;
| ^
cc1: all warnings being treated as errors
cc1: all warnings being treated as errors
mv: cannot stat 'tools/objtool/.check.o.tmp': No such file or directory
mv: cannot stat 'tools/objtool/arch/x86/.decode.o.tmp': No such file or directory
make[4]: *** [tools/build/Makefile.build:96: tools/objtool/check.o] Error 1
make[5]: *** [tools/build/Makefile.build:97: tools/objtool/arch/x86/decode.o] Error 1
make[4]: *** [tools/build/Makefile.build:139: arch/x86] Error 2
make[3]: *** [Makefile:64: tools/objtool/objtool-in.o] Error 2
make[3]: *** Waiting for unfinished jobs....
make[2]: *** [Makefile:68: objtool] Error 2
make[1]: *** [Makefile:1858: tools/objtool] Error 2
make[1]: Target 'prepare' not remade because of errors.
make: *** [Makefile:185: __sub-make] Error 2
make: Target 'prepare' not remade because of errors.
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 45449 bytes --]
^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2020-06-23 3:49 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-06-22 22:42 [PATCH v3 00/14] Fix up liblockdep for 5.8-rc Sasha Levin
2020-06-22 22:42 ` [PATCH v3 01/14] tools headers: Add kprobes.h header Sasha Levin
2020-06-22 22:42 ` [PATCH v3 02/14] tools headers: Add rcupdate.h header Sasha Levin
2020-06-22 22:42 ` [PATCH v3 03/14] tools/kernel.h: extend with dummy RCU functions Sasha Levin
2020-06-22 22:42 ` [PATCH v3 04/14] tools bitmap: add bitmap_andnot definition Sasha Levin
2020-06-22 22:42 ` [PATCH v3 05/14] tools/lib/lockdep: add definition required for IRQ flag tracing Sasha Levin
2020-06-22 22:42 ` [PATCH v3 06/14] tools bitmap: add bitmap_clear definition Sasha Levin
2020-06-22 22:42 ` [PATCH v3 07/14] tools/lib/lockdep: Hook up vsprintf, find_bit, hweight libraries Sasha Levin
2020-06-22 22:42 ` [PATCH v3 08/14] tools/lib/lockdep: Enable building with CONFIG_TRACE_IRQFLAGS Sasha Levin
2020-06-22 22:42 ` [PATCH v3 09/14] tools/lib/lockdep: New stacktrace API Sasha Levin
2020-06-22 22:42 ` [PATCH v3 10/14] tools/lib/lockdep: call lockdep_init_task on init Sasha Levin
2020-06-22 22:42 ` [PATCH v3 11/14] tools/lib/lockdep: switch to using lockdep_init_map_waits Sasha Levin
2020-06-22 22:42 ` [PATCH v3 12/14] tools/kernel.h: hide noinstr Sasha Levin
2020-06-23 3:12 ` kernel test robot
2020-06-22 22:42 ` [PATCH v3 13/14] tools/lib/lockdep: explicitly declare lockdep_init_task() Sasha Levin
2020-06-22 22:42 ` [PATCH v3 14/14] tools/kernel.h: hide task_struct.hardirq_chain_key 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).