linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [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).