* [RFC patch 01/21] LTTng Kernel Trace Thread Flag Alpha
2009-03-15 19:03 [RFC patch 00/21] TIF_KERNEL_TRACE thread flags Mathieu Desnoyers
@ 2009-03-15 19:03 ` Mathieu Desnoyers
2009-03-15 19:03 ` [RFC patch 02/21] LTTng Kernel Trace Thread Flag ARM Mathieu Desnoyers
` (19 subsequent siblings)
20 siblings, 0 replies; 28+ messages in thread
From: Mathieu Desnoyers @ 2009-03-15 19:03 UTC (permalink / raw)
To: Ingo Molnar, akpm, Frederic Weisbecker, Steven Rostedt, LKML
Cc: Mathieu Desnoyers
[-- Attachment #1: lttng-kernel-trace-thread-flag-alpha.patch --]
[-- Type: text/plain, Size: 1680 bytes --]
Add a thread flag to activate system-wide syscall tracing.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
---
arch/alpha/include/asm/thread_info.h | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
Index: linux-2.6-lttng/arch/alpha/include/asm/thread_info.h
===================================================================
--- linux-2.6-lttng.orig/arch/alpha/include/asm/thread_info.h 2009-01-09 18:15:55.000000000 -0500
+++ linux-2.6-lttng/arch/alpha/include/asm/thread_info.h 2009-01-09 18:17:45.000000000 -0500
@@ -74,6 +74,7 @@ register struct thread_info *__current_t
#define TIF_UAC_SIGBUS 7
#define TIF_MEMDIE 8
#define TIF_RESTORE_SIGMASK 9 /* restore signal mask in do_signal */
+#define TIF_KERNEL_TRACE 10 /* Kernel tracing of syscalls */
#define TIF_FREEZE 16 /* is freezing for suspend */
#define _TIF_SYSCALL_TRACE (1<<TIF_SYSCALL_TRACE)
@@ -81,6 +82,7 @@ register struct thread_info *__current_t
#define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED)
#define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG)
#define _TIF_RESTORE_SIGMASK (1<<TIF_RESTORE_SIGMASK)
+#define _TIF_KERNEL_TRACE (1<<TIF_KERNEL_TRACE)
#define _TIF_FREEZE (1<<TIF_FREEZE)
/* Work to do on interrupt/exception return. */
@@ -88,7 +90,7 @@ register struct thread_info *__current_t
/* Work to do on any return to userspace. */
#define _TIF_ALLWORK_MASK (_TIF_WORK_MASK \
- | _TIF_SYSCALL_TRACE)
+ | _TIF_SYSCALL_TRACE | _TIF_KERNEL_TRACE)
#define ALPHA_UAC_SHIFT 6
#define ALPHA_UAC_MASK (1 << TIF_UAC_NOPRINT | 1 << TIF_UAC_NOFIX | \
--
Mathieu Desnoyers
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
^ permalink raw reply [flat|nested] 28+ messages in thread* [RFC patch 02/21] LTTng Kernel Trace Thread Flag ARM
2009-03-15 19:03 [RFC patch 00/21] TIF_KERNEL_TRACE thread flags Mathieu Desnoyers
2009-03-15 19:03 ` [RFC patch 01/21] LTTng Kernel Trace Thread Flag Alpha Mathieu Desnoyers
@ 2009-03-15 19:03 ` Mathieu Desnoyers
2009-03-15 19:35 ` [RFC patch 02/21] LTTng Kernel Trace Thread Flag ARM fix syscall exit Mathieu Desnoyers
2009-03-15 19:03 ` [RFC patch 03/21] LTTng Kernel Trace Thread Flag AVR32 Mathieu Desnoyers
` (18 subsequent siblings)
20 siblings, 1 reply; 28+ messages in thread
From: Mathieu Desnoyers @ 2009-03-15 19:03 UTC (permalink / raw)
To: Ingo Molnar, akpm, Frederic Weisbecker, Steven Rostedt, LKML
Cc: Mathieu Desnoyers
[-- Attachment #1: lttng-kernel-trace-thread-flag-arm.patch --]
[-- Type: text/plain, Size: 1565 bytes --]
Add a thread flag to activate system-wide syscall tracing.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
---
arch/arm/include/asm/thread_info.h | 3 +++
1 file changed, 3 insertions(+)
Index: linux-2.6-lttng/arch/arm/include/asm/thread_info.h
===================================================================
--- linux-2.6-lttng.orig/arch/arm/include/asm/thread_info.h 2009-01-09 18:15:55.000000000 -0500
+++ linux-2.6-lttng/arch/arm/include/asm/thread_info.h 2009-01-09 18:17:45.000000000 -0500
@@ -124,6 +124,7 @@ extern void iwmmxt_task_switch(struct th
/*
* thread information flags:
* TIF_SYSCALL_TRACE - syscall trace active
+ * TIF_KERNEL_TRACE - kernel trace active
* TIF_SIGPENDING - signal pending
* TIF_NEED_RESCHED - rescheduling necessary
* TIF_USEDFPU - FPU was used by this task this quantum (SMP)
@@ -131,6 +132,7 @@ extern void iwmmxt_task_switch(struct th
*/
#define TIF_SIGPENDING 0
#define TIF_NEED_RESCHED 1
+#define TIF_KERNEL_TRACE 7
#define TIF_SYSCALL_TRACE 8
#define TIF_POLLING_NRFLAG 16
#define TIF_USING_IWMMXT 17
@@ -139,6 +141,7 @@ extern void iwmmxt_task_switch(struct th
#define _TIF_SIGPENDING (1 << TIF_SIGPENDING)
#define _TIF_NEED_RESCHED (1 << TIF_NEED_RESCHED)
+#define _TIF_KERNEL_TRACE (1 << TIF_KERNEL_TRACE)
#define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE)
#define _TIF_POLLING_NRFLAG (1 << TIF_POLLING_NRFLAG)
#define _TIF_USING_IWMMXT (1 << TIF_USING_IWMMXT)
--
Mathieu Desnoyers
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
^ permalink raw reply [flat|nested] 28+ messages in thread* Re: [RFC patch 02/21] LTTng Kernel Trace Thread Flag ARM fix syscall exit
2009-03-15 19:03 ` [RFC patch 02/21] LTTng Kernel Trace Thread Flag ARM Mathieu Desnoyers
@ 2009-03-15 19:35 ` Mathieu Desnoyers
0 siblings, 0 replies; 28+ messages in thread
From: Mathieu Desnoyers @ 2009-03-15 19:35 UTC (permalink / raw)
To: Ingo Molnar, akpm, Frederic Weisbecker, Steven Rostedt, LKML
(sorry, forgot to pick this one from my tree in the original post)
Make sure we re-test the kernel trace thread flag at syscall exit even if we
were not tracing at syscall entry. This fixes syscall exit tracing early in the
trace.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
---
arch/arm/kernel/entry-common.S | 2 ++
1 file changed, 2 insertions(+)
Index: linux-omap-2.6/arch/arm/kernel/entry-common.S
===================================================================
--- linux-omap-2.6.orig/arch/arm/kernel/entry-common.S 2009-02-21 16:31:10.000000000 +0000
+++ linux-omap-2.6/arch/arm/kernel/entry-common.S 2009-02-21 16:32:18.000000000 +0000
@@ -43,6 +43,8 @@
* Ok, we need to do extra processing, enter the slow path.
*/
fast_work_pending:
+ tst r1, #_TIF_KERNEL_TRACE @ flag can be set asynchronously
+ bne __sys_trace_return
str r0, [sp, #S_R0+S_OFF]! @ returned r0
work_pending:
tst r1, #_TIF_NEED_RESCHED
--
Mathieu Desnoyers
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
^ permalink raw reply [flat|nested] 28+ messages in thread
* [RFC patch 03/21] LTTng Kernel Trace Thread Flag AVR32
2009-03-15 19:03 [RFC patch 00/21] TIF_KERNEL_TRACE thread flags Mathieu Desnoyers
2009-03-15 19:03 ` [RFC patch 01/21] LTTng Kernel Trace Thread Flag Alpha Mathieu Desnoyers
2009-03-15 19:03 ` [RFC patch 02/21] LTTng Kernel Trace Thread Flag ARM Mathieu Desnoyers
@ 2009-03-15 19:03 ` Mathieu Desnoyers
2009-03-15 19:03 ` [RFC patch 04/21] LTTng Kernel Trace Thread Flag Blackfin Mathieu Desnoyers
` (17 subsequent siblings)
20 siblings, 0 replies; 28+ messages in thread
From: Mathieu Desnoyers @ 2009-03-15 19:03 UTC (permalink / raw)
To: Ingo Molnar, akpm, Frederic Weisbecker, Steven Rostedt, LKML
Cc: Mathieu Desnoyers
[-- Attachment #1: lttng-kernel-trace-thread-flag-avr32.patch --]
[-- Type: text/plain, Size: 1843 bytes --]
Add a thread flag to activate system-wide syscall tracing.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
---
arch/avr32/include/asm/thread_info.h | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
Index: linux-2.6-lttng/arch/avr32/include/asm/thread_info.h
===================================================================
--- linux-2.6-lttng.orig/arch/avr32/include/asm/thread_info.h 2009-01-09 18:15:55.000000000 -0500
+++ linux-2.6-lttng/arch/avr32/include/asm/thread_info.h 2009-01-09 18:17:45.000000000 -0500
@@ -84,6 +84,7 @@ static inline struct thread_info *curren
#define TIF_MEMDIE 6
#define TIF_RESTORE_SIGMASK 7 /* restore signal mask in do_signal */
#define TIF_CPU_GOING_TO_SLEEP 8 /* CPU is entering sleep 0 mode */
+#define TIF_KERNEL_TRACE 9 /* kernel trace active */
#define TIF_FREEZE 29
#define TIF_DEBUG 30 /* debugging enabled */
#define TIF_USERSPACE 31 /* true if FS sets userspace */
@@ -96,6 +97,7 @@ static inline struct thread_info *curren
#define _TIF_MEMDIE (1 << TIF_MEMDIE)
#define _TIF_RESTORE_SIGMASK (1 << TIF_RESTORE_SIGMASK)
#define _TIF_CPU_GOING_TO_SLEEP (1 << TIF_CPU_GOING_TO_SLEEP)
+#define _TIF_KERNEL_TRACE (1 << TIF_KERNEL_TRACE)
#define _TIF_FREEZE (1 << TIF_FREEZE)
/* Note: The masks below must never span more than 16 bits! */
@@ -109,7 +111,7 @@ static inline struct thread_info *curren
| (1 << TIF_RESTORE_SIGMASK))
/* work to do on any return to userspace */
-#define _TIF_ALLWORK_MASK (_TIF_WORK_MASK | (1 << TIF_SYSCALL_TRACE))
+#define _TIF_ALLWORK_MASK (_TIF_WORK_MASK | _TIF_SYSCALL_TRACE | _TIF_KERNEL_TRACE)
/* work to do on return from debug mode */
#define _TIF_DBGWORK_MASK (_TIF_WORK_MASK & ~(1 << TIF_BREAKPOINT))
--
Mathieu Desnoyers
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
^ permalink raw reply [flat|nested] 28+ messages in thread* [RFC patch 04/21] LTTng Kernel Trace Thread Flag Blackfin
2009-03-15 19:03 [RFC patch 00/21] TIF_KERNEL_TRACE thread flags Mathieu Desnoyers
` (2 preceding siblings ...)
2009-03-15 19:03 ` [RFC patch 03/21] LTTng Kernel Trace Thread Flag AVR32 Mathieu Desnoyers
@ 2009-03-15 19:03 ` Mathieu Desnoyers
2009-03-15 19:03 ` [RFC patch 05/21] LTTng Kernel Trace Thread Flag Cris Mathieu Desnoyers
` (16 subsequent siblings)
20 siblings, 0 replies; 28+ messages in thread
From: Mathieu Desnoyers @ 2009-03-15 19:03 UTC (permalink / raw)
To: Ingo Molnar, akpm, Frederic Weisbecker, Steven Rostedt, LKML
Cc: Mathieu Desnoyers
[-- Attachment #1: lttng-kernel-trace-thread-flag-blackfin.patch --]
[-- Type: text/plain, Size: 1505 bytes --]
Add a thread flag to activate system-wide syscall tracing.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
---
arch/blackfin/include/asm/thread_info.h | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
Index: linux-2.6-lttng/arch/blackfin/include/asm/thread_info.h
===================================================================
--- linux-2.6-lttng.orig/arch/blackfin/include/asm/thread_info.h 2009-03-15 14:56:28.000000000 -0400
+++ linux-2.6-lttng/arch/blackfin/include/asm/thread_info.h 2009-03-15 14:57:30.000000000 -0400
@@ -122,6 +122,7 @@ static inline struct thread_info *curren
#define TIF_MEMDIE 4
#define TIF_RESTORE_SIGMASK 5 /* restore signal mask in do_signal() */
#define TIF_FREEZE 6 /* is freezing for suspend */
+#define TIF_KERNEL_TRACE 7 /* kernel trace active */
/* as above, but as bit values */
#define _TIF_SYSCALL_TRACE (1<<TIF_SYSCALL_TRACE)
@@ -130,8 +131,9 @@ static inline struct thread_info *curren
#define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG)
#define _TIF_RESTORE_SIGMASK (1<<TIF_RESTORE_SIGMASK)
#define _TIF_FREEZE (1<<TIF_FREEZE)
+#define _TIF_KERNEL_TRACE (1<<TIF_KERNEL_TRACE)
-#define _TIF_WORK_MASK 0x0000FFFE /* work to do on interrupt/exception return */
+#define _TIF_WORK_MASK 0x0000FF7E /* work to do on interrupt/exception return */
#endif /* __KERNEL__ */
--
Mathieu Desnoyers
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
^ permalink raw reply [flat|nested] 28+ messages in thread* [RFC patch 05/21] LTTng Kernel Trace Thread Flag Cris
2009-03-15 19:03 [RFC patch 00/21] TIF_KERNEL_TRACE thread flags Mathieu Desnoyers
` (3 preceding siblings ...)
2009-03-15 19:03 ` [RFC patch 04/21] LTTng Kernel Trace Thread Flag Blackfin Mathieu Desnoyers
@ 2009-03-15 19:03 ` Mathieu Desnoyers
2009-03-15 19:03 ` [RFC patch 06/21] LTTng Kernel Trace Thread Flag Frv Mathieu Desnoyers
` (15 subsequent siblings)
20 siblings, 0 replies; 28+ messages in thread
From: Mathieu Desnoyers @ 2009-03-15 19:03 UTC (permalink / raw)
To: Ingo Molnar, akpm, Frederic Weisbecker, Steven Rostedt, LKML
Cc: Mathieu Desnoyers
[-- Attachment #1: lttng-kernel-trace-thread-flag-cris.patch --]
[-- Type: text/plain, Size: 1886 bytes --]
Add a thread flag to activate system-wide syscall tracing.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
---
arch/cris/include/asm/thread_info.h | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
Index: linux-2.6-lttng/arch/cris/include/asm/thread_info.h
===================================================================
--- linux-2.6-lttng.orig/arch/cris/include/asm/thread_info.h 2009-01-09 18:15:55.000000000 -0500
+++ linux-2.6-lttng/arch/cris/include/asm/thread_info.h 2009-01-09 18:17:46.000000000 -0500
@@ -85,6 +85,7 @@ struct thread_info {
#define TIF_NOTIFY_RESUME 1 /* resumption notification requested */
#define TIF_SIGPENDING 2 /* signal pending */
#define TIF_NEED_RESCHED 3 /* rescheduling necessary */
+#define TIF_KERNEL_TRACE 4 /* kernel trace active */
#define TIF_RESTORE_SIGMASK 9 /* restore signal mask in do_signal() */
#define TIF_POLLING_NRFLAG 16 /* true if poll_idle() is polling TIF_NEED_RESCHED */
#define TIF_MEMDIE 17
@@ -94,12 +95,16 @@ struct thread_info {
#define _TIF_NOTIFY_RESUME (1<<TIF_NOTIFY_RESUME)
#define _TIF_SIGPENDING (1<<TIF_SIGPENDING)
#define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED)
+#define _TIF_KERNEL_TRACE (1<<TIF_KERNEL_TRACE)
#define _TIF_RESTORE_SIGMASK (1<<TIF_RESTORE_SIGMASK)
#define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG)
#define _TIF_FREEZE (1<<TIF_FREEZE)
-#define _TIF_WORK_MASK 0x0000FFFE /* work to do on interrupt/exception return */
-#define _TIF_ALLWORK_MASK 0x0000FFFF /* work to do on any return to u-space */
+/* work to do on interrupt/exception return */
+#define _TIF_WORK_MASK 0x0000FFFF & \
+ (~_TIF_SYSCALL_TRACE | ~_TIF_KERNEL_TRACE)
+/* work to do on any return to u-space */
+#define _TIF_ALLWORK_MASK 0x0000FFFF
#endif /* __KERNEL__ */
--
Mathieu Desnoyers
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
^ permalink raw reply [flat|nested] 28+ messages in thread* [RFC patch 06/21] LTTng Kernel Trace Thread Flag Frv
2009-03-15 19:03 [RFC patch 00/21] TIF_KERNEL_TRACE thread flags Mathieu Desnoyers
` (4 preceding siblings ...)
2009-03-15 19:03 ` [RFC patch 05/21] LTTng Kernel Trace Thread Flag Cris Mathieu Desnoyers
@ 2009-03-15 19:03 ` Mathieu Desnoyers
2009-03-15 19:03 ` [RFC patch 07/21] LTTng Kernel Trace Thread Flag H8300 Mathieu Desnoyers
` (14 subsequent siblings)
20 siblings, 0 replies; 28+ messages in thread
From: Mathieu Desnoyers @ 2009-03-15 19:03 UTC (permalink / raw)
To: Ingo Molnar, akpm, Frederic Weisbecker, Steven Rostedt, LKML
Cc: Mathieu Desnoyers
[-- Attachment #1: lttng-kernel-trace-thread-flag-frv.patch --]
[-- Type: text/plain, Size: 1719 bytes --]
Add a thread flag to activate system-wide syscall tracing.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
---
include/asm-frv/thread_info.h | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
Index: linux-2.6-lttng/include/asm-frv/thread_info.h
===================================================================
--- linux-2.6-lttng.orig/include/asm-frv/thread_info.h 2009-01-09 18:15:55.000000000 -0500
+++ linux-2.6-lttng/include/asm-frv/thread_info.h 2009-01-09 18:17:46.000000000 -0500
@@ -114,6 +114,7 @@ register struct thread_info *__current_t
#define TIF_SINGLESTEP 3 /* restore singlestep on return to user mode */
#define TIF_IRET 4 /* return with iret */
#define TIF_RESTORE_SIGMASK 5 /* restore signal mask in do_signal() */
+#define TIF_KERNEL_TRACE 6 /* kernel trace active */
#define TIF_POLLING_NRFLAG 16 /* true if poll_idle() is polling TIF_NEED_RESCHED */
#define TIF_MEMDIE 17 /* OOM killer killed process */
#define TIF_FREEZE 18 /* freezing for suspend */
@@ -124,10 +125,11 @@ register struct thread_info *__current_t
#define _TIF_SINGLESTEP (1 << TIF_SINGLESTEP)
#define _TIF_IRET (1 << TIF_IRET)
#define _TIF_RESTORE_SIGMASK (1 << TIF_RESTORE_SIGMASK)
+#define _TIF_KERNEL_TRACE (1 << TIF_KERNEL_TRACE)
#define _TIF_POLLING_NRFLAG (1 << TIF_POLLING_NRFLAG)
#define _TIF_FREEZE (1 << TIF_FREEZE)
-#define _TIF_WORK_MASK 0x0000FFFE /* work to do on interrupt/exception return */
+#define _TIF_WORK_MASK 0x0000FFBE /* work to do on interrupt/exception return */
#define _TIF_ALLWORK_MASK 0x0000FFFF /* work to do on any return to u-space */
/*
--
Mathieu Desnoyers
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
^ permalink raw reply [flat|nested] 28+ messages in thread* [RFC patch 07/21] LTTng Kernel Trace Thread Flag H8300
2009-03-15 19:03 [RFC patch 00/21] TIF_KERNEL_TRACE thread flags Mathieu Desnoyers
` (5 preceding siblings ...)
2009-03-15 19:03 ` [RFC patch 06/21] LTTng Kernel Trace Thread Flag Frv Mathieu Desnoyers
@ 2009-03-15 19:03 ` Mathieu Desnoyers
2009-03-15 19:03 ` [RFC patch 08/21] LTTng Kernel Trace Thread Flag ia64 Mathieu Desnoyers
` (13 subsequent siblings)
20 siblings, 0 replies; 28+ messages in thread
From: Mathieu Desnoyers @ 2009-03-15 19:03 UTC (permalink / raw)
To: Ingo Molnar, akpm, Frederic Weisbecker, Steven Rostedt, LKML
Cc: Mathieu Desnoyers
[-- Attachment #1: lttng-kernel-trace-thread-flag-h8300.patch --]
[-- Type: text/plain, Size: 1474 bytes --]
Add a thread flag to activate system-wide syscall tracing.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
---
arch/h8300/include/asm/thread_info.h | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
Index: linux-2.6-lttng/arch/h8300/include/asm/thread_info.h
===================================================================
--- linux-2.6-lttng.orig/arch/h8300/include/asm/thread_info.h 2009-01-09 18:15:55.000000000 -0500
+++ linux-2.6-lttng/arch/h8300/include/asm/thread_info.h 2009-01-09 18:17:46.000000000 -0500
@@ -89,6 +89,7 @@ static inline struct thread_info *curren
TIF_NEED_RESCHED */
#define TIF_MEMDIE 4
#define TIF_RESTORE_SIGMASK 5 /* restore signal mask in do_signal() */
+#define TIF_KERNEL_TRACE 6 /* kernel trace active */
#define TIF_FREEZE 16 /* is freezing for suspend */
/* as above, but as bit values */
@@ -97,9 +98,10 @@ static inline struct thread_info *curren
#define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED)
#define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG)
#define _TIF_RESTORE_SIGMASK (1<<TIF_RESTORE_SIGMASK)
+#define _TIF_KERNEL_TRACE (1<<TIF_KERNEL_TRACE)
#define _TIF_FREEZE (1<<TIF_FREEZE)
-#define _TIF_WORK_MASK 0x0000FFFE /* work to do on interrupt/exception return */
+#define _TIF_WORK_MASK 0x0000FFBE /* work to do on interrupt/exception return */
#endif /* __KERNEL__ */
--
Mathieu Desnoyers
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
^ permalink raw reply [flat|nested] 28+ messages in thread* [RFC patch 08/21] LTTng Kernel Trace Thread Flag ia64
2009-03-15 19:03 [RFC patch 00/21] TIF_KERNEL_TRACE thread flags Mathieu Desnoyers
` (6 preceding siblings ...)
2009-03-15 19:03 ` [RFC patch 07/21] LTTng Kernel Trace Thread Flag H8300 Mathieu Desnoyers
@ 2009-03-15 19:03 ` Mathieu Desnoyers
2009-03-15 19:03 ` [RFC patch 09/21] LTTng Kernel Trace Thread Flag m32r Mathieu Desnoyers
` (12 subsequent siblings)
20 siblings, 0 replies; 28+ messages in thread
From: Mathieu Desnoyers @ 2009-03-15 19:03 UTC (permalink / raw)
To: Ingo Molnar, akpm, Frederic Weisbecker, Steven Rostedt, LKML
Cc: Mathieu Desnoyers, Masami Hiramatsu
[-- Attachment #1: lttng-kernel-trace-thread-flag-ia64.patch --]
[-- Type: text/plain, Size: 3439 bytes --]
Add a thread flag to activate system-wide syscall tracing.
FIXME : Masami reported that enabling the KERNEL_TRACE thread flag did disable
the gate page for gettimeofday, falling back on a standard system call. More
work would be needed in this area and I don't have the architecture available.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
CC: Masami Hiramatsu <mhiramat@redhat.com>
---
arch/ia64/include/asm/thread_info.h | 10 +++++++---
arch/ia64/kernel/entry.S | 6 ++++--
2 files changed, 11 insertions(+), 5 deletions(-)
Index: linux-2.6-lttng/arch/ia64/include/asm/thread_info.h
===================================================================
--- linux-2.6-lttng.orig/arch/ia64/include/asm/thread_info.h 2009-01-09 18:15:55.000000000 -0500
+++ linux-2.6-lttng/arch/ia64/include/asm/thread_info.h 2009-01-09 18:17:46.000000000 -0500
@@ -100,6 +100,7 @@ struct thread_info {
#define TIF_SYSCALL_TRACE 2 /* syscall trace active */
#define TIF_SYSCALL_AUDIT 3 /* syscall auditing active */
#define TIF_SINGLESTEP 4 /* restore singlestep on return to user mode */
+#define TIF_KERNEL_TRACE 5 /* kernel trace active */
#define TIF_NOTIFY_RESUME 6 /* resumption notification requested */
#define TIF_POLLING_NRFLAG 16 /* true if poll_idle() is polling TIF_NEED_RESCHED */
#define TIF_MEMDIE 17
@@ -111,7 +112,9 @@ struct thread_info {
#define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE)
#define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT)
#define _TIF_SINGLESTEP (1 << TIF_SINGLESTEP)
-#define _TIF_SYSCALL_TRACEAUDIT (_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SINGLESTEP)
+#define _TIF_KERNEL_TRACE (1 << TIF_KERNEL_TRACE)
+#define _TIF_SYSCALL_TRACEAUDIT (_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|\
+ _TIF_SINGLESTEP|_TIF_KERNEL_TRACE)
#define _TIF_NOTIFY_RESUME (1 << TIF_NOTIFY_RESUME)
#define _TIF_SIGPENDING (1 << TIF_SIGPENDING)
#define _TIF_NEED_RESCHED (1 << TIF_NEED_RESCHED)
@@ -124,8 +127,9 @@ struct thread_info {
/* "work to do on user-return" bits */
#define TIF_ALLWORK_MASK (_TIF_SIGPENDING|_TIF_NOTIFY_RESUME|_TIF_SYSCALL_AUDIT|\
_TIF_NEED_RESCHED|_TIF_SYSCALL_TRACE)
-/* like TIF_ALLWORK_BITS but sans TIF_SYSCALL_TRACE or TIF_SYSCALL_AUDIT */
-#define TIF_WORK_MASK (TIF_ALLWORK_MASK&~(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT))
+/* like TIF_ALLWORK_BITS but sans TIF_SYSCALL_TRACE, TIF_KERNEL_TRACE or TIF_SYSCALL_AUDIT */
+#define TIF_WORK_MASK (TIF_ALLWORK_MASK&~(_TIF_SYSCALL_TRACE|_TIF_KERNEL_TRACE|\
+ _TIF_SYSCALL_AUDIT))
#define TS_POLLING 1 /* true if in idle loop and not sleeping */
#define TS_RESTORE_SIGMASK 2 /* restore signal mask in do_signal() */
Index: linux-2.6-lttng/arch/ia64/kernel/entry.S
===================================================================
--- linux-2.6-lttng.orig/arch/ia64/kernel/entry.S 2009-01-09 18:15:55.000000000 -0500
+++ linux-2.6-lttng/arch/ia64/kernel/entry.S 2009-01-09 18:17:46.000000000 -0500
@@ -634,9 +634,11 @@ GLOBAL_ENTRY(ia64_ret_from_clone)
;;
ld4 r2=[r2]
;;
+ movl r8=_TIF_SYSCALL_TRACEAUDIT
+ ;; // added stop bits to prevent r8 dependency
+ and r2=r8,r2
mov r8=0
- and r2=_TIF_SYSCALL_TRACEAUDIT,r2
- ;;
+ ;; // added stop bits to prevent r2 dependency
cmp.ne p6,p0=r2,r0
(p6) br.cond.spnt .strace_check_retval
;; // added stop bits to prevent r8 dependency
--
Mathieu Desnoyers
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
^ permalink raw reply [flat|nested] 28+ messages in thread* [RFC patch 09/21] LTTng Kernel Trace Thread Flag m32r
2009-03-15 19:03 [RFC patch 00/21] TIF_KERNEL_TRACE thread flags Mathieu Desnoyers
` (7 preceding siblings ...)
2009-03-15 19:03 ` [RFC patch 08/21] LTTng Kernel Trace Thread Flag ia64 Mathieu Desnoyers
@ 2009-03-15 19:03 ` Mathieu Desnoyers
2009-03-15 19:03 ` [RFC patch 10/21] LTTng Kernel Trace Thread Flag m68k Mathieu Desnoyers
` (11 subsequent siblings)
20 siblings, 0 replies; 28+ messages in thread
From: Mathieu Desnoyers @ 2009-03-15 19:03 UTC (permalink / raw)
To: Ingo Molnar, akpm, Frederic Weisbecker, Steven Rostedt, LKML
Cc: Mathieu Desnoyers
[-- Attachment #1: lttng-kernel-trace-thread-flag-m32r.patch --]
[-- Type: text/plain, Size: 1994 bytes --]
Add a thread flag to activate system-wide syscall tracing.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
---
include/asm-m32r/thread_info.h | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
Index: linux-2.6-lttng/include/asm-m32r/thread_info.h
===================================================================
--- linux-2.6-lttng.orig/include/asm-m32r/thread_info.h 2009-01-09 18:15:55.000000000 -0500
+++ linux-2.6-lttng/include/asm-m32r/thread_info.h 2009-01-09 18:17:46.000000000 -0500
@@ -151,6 +151,7 @@ static inline unsigned int get_thread_fa
#define TIF_NEED_RESCHED 2 /* rescheduling necessary */
#define TIF_SINGLESTEP 3 /* restore singlestep on return to user mode */
#define TIF_IRET 4 /* return with iret */
+#define TIF_KERNEL_TRACE 5 /* kernel trace active */
#define TIF_RESTORE_SIGMASK 8 /* restore signal mask in do_signal() */
#define TIF_USEDFPU 16 /* FPU was used by this task this quantum (SMP) */
#define TIF_POLLING_NRFLAG 17 /* true if poll_idle() is polling TIF_NEED_RESCHED */
@@ -162,13 +163,17 @@ static inline unsigned int get_thread_fa
#define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED)
#define _TIF_SINGLESTEP (1<<TIF_SINGLESTEP)
#define _TIF_IRET (1<<TIF_IRET)
+#define _TIF_KERNEL_TRACE (1<<TIF_KERNEL_TRACE)
#define _TIF_RESTORE_SIGMASK (1<<TIF_RESTORE_SIGMASK)
#define _TIF_USEDFPU (1<<TIF_USEDFPU)
#define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG)
#define _TIF_FREEZE (1<<TIF_FREEZE)
-#define _TIF_WORK_MASK 0x0000FFFE /* work to do on interrupt/exception return */
-#define _TIF_ALLWORK_MASK 0x0000FFFF /* work to do on any return to u-space */
+/* work to do on any return to u-space */
+#define _TIF_ALLWORK_MASK 0x0000FFFF
+/* work to do on interrupt/exception return */
+#define _TIF_WORK_MASK \
+ (0x0000FFFF & ~(_TIF_SYSCALL_TRACE | _TIF_KERNEL_TRACE))
/*
* Thread-synchronous status.
--
Mathieu Desnoyers
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
^ permalink raw reply [flat|nested] 28+ messages in thread* [RFC patch 10/21] LTTng Kernel Trace Thread Flag m68k
2009-03-15 19:03 [RFC patch 00/21] TIF_KERNEL_TRACE thread flags Mathieu Desnoyers
` (8 preceding siblings ...)
2009-03-15 19:03 ` [RFC patch 09/21] LTTng Kernel Trace Thread Flag m32r Mathieu Desnoyers
@ 2009-03-15 19:03 ` Mathieu Desnoyers
2009-03-15 19:03 ` [RFC patch 11/21] LTTng Kernel Trace Thread Flag MIPS Mathieu Desnoyers
` (10 subsequent siblings)
20 siblings, 0 replies; 28+ messages in thread
From: Mathieu Desnoyers @ 2009-03-15 19:03 UTC (permalink / raw)
To: Ingo Molnar, akpm, Frederic Weisbecker, Steven Rostedt, LKML
Cc: Mathieu Desnoyers
[-- Attachment #1: lttng-kernel-trace-thread-flag-m68k.patch --]
[-- Type: text/plain, Size: 2136 bytes --]
Add a thread flag to activate system-wide syscall tracing.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
---
arch/m68k/include/asm/thread_info_mm.h | 1 +
arch/m68k/include/asm/thread_info_no.h | 4 +++-
2 files changed, 4 insertions(+), 1 deletion(-)
Index: linux-2.6-lttng/arch/m68k/include/asm/thread_info_mm.h
===================================================================
--- linux-2.6-lttng.orig/arch/m68k/include/asm/thread_info_mm.h 2009-01-30 11:12:17.000000000 -0500
+++ linux-2.6-lttng/arch/m68k/include/asm/thread_info_mm.h 2009-01-30 11:12:54.000000000 -0500
@@ -49,6 +49,7 @@ struct thread_info {
*/
#define TIF_SIGPENDING 6 /* signal pending */
#define TIF_NEED_RESCHED 7 /* rescheduling necessary */
+#define TIF_KERNEL_TRACE 13 /* kernel trace active */
#define TIF_DELAYED_TRACE 14 /* single step a syscall */
#define TIF_SYSCALL_TRACE 15 /* syscall trace active */
#define TIF_MEMDIE 16
Index: linux-2.6-lttng/arch/m68k/include/asm/thread_info_no.h
===================================================================
--- linux-2.6-lttng.orig/arch/m68k/include/asm/thread_info_no.h 2009-01-30 11:13:07.000000000 -0500
+++ linux-2.6-lttng/arch/m68k/include/asm/thread_info_no.h 2009-01-30 11:15:16.000000000 -0500
@@ -84,6 +84,7 @@ static inline struct thread_info *curren
#define TIF_POLLING_NRFLAG 3 /* true if poll_idle() is polling
TIF_NEED_RESCHED */
#define TIF_MEMDIE 4
+#define TIF_KERNEL_TRACE 5 /* kernel trace active */
#define TIF_FREEZE 16 /* is freezing for suspend */
/* as above, but as bit values */
@@ -92,8 +93,9 @@ static inline struct thread_info *curren
#define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED)
#define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG)
#define _TIF_FREEZE (1<<TIF_FREEZE)
+#define _TIF_KERNEL_TRACE (1<<TIF_KERNEL_TRACE)
-#define _TIF_WORK_MASK 0x0000FFFE /* work to do on interrupt/exception return */
+#define _TIF_WORK_MASK 0x0000FFDE /* work to do on interrupt/exception return */
#endif /* __KERNEL__ */
--
Mathieu Desnoyers
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
^ permalink raw reply [flat|nested] 28+ messages in thread* [RFC patch 11/21] LTTng Kernel Trace Thread Flag MIPS
2009-03-15 19:03 [RFC patch 00/21] TIF_KERNEL_TRACE thread flags Mathieu Desnoyers
` (9 preceding siblings ...)
2009-03-15 19:03 ` [RFC patch 10/21] LTTng Kernel Trace Thread Flag m68k Mathieu Desnoyers
@ 2009-03-15 19:03 ` Mathieu Desnoyers
2009-03-15 19:03 ` [RFC patch 12/21] LTTng Kernel Trace Thread Flag parisc Mathieu Desnoyers
` (9 subsequent siblings)
20 siblings, 0 replies; 28+ messages in thread
From: Mathieu Desnoyers @ 2009-03-15 19:03 UTC (permalink / raw)
To: Ingo Molnar, akpm, Frederic Weisbecker, Steven Rostedt, LKML
Cc: Mathieu Desnoyers
[-- Attachment #1: lttng-kernel-trace-thread-flag-mips.patch --]
[-- Type: text/plain, Size: 1603 bytes --]
Add a thread flag to activate system-wide syscall tracing.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
---
arch/mips/include/asm/thread_info.h | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
Index: linux-2.6-lttng/arch/mips/include/asm/thread_info.h
===================================================================
--- linux-2.6-lttng.orig/arch/mips/include/asm/thread_info.h 2009-01-09 18:15:55.000000000 -0500
+++ linux-2.6-lttng/arch/mips/include/asm/thread_info.h 2009-01-09 18:17:47.000000000 -0500
@@ -125,9 +125,11 @@ register struct thread_info *__current_t
#define TIF_32BIT_ADDR 23 /* 32-bit address space (o32/n32) */
#define TIF_FPUBOUND 24 /* thread bound to FPU-full CPU set */
#define TIF_LOAD_WATCH 25 /* If set, load watch registers */
+#define TIF_KERNEL_TRACE 30 /* kernel trace active */
#define TIF_SYSCALL_TRACE 31 /* syscall trace active */
#define _TIF_SYSCALL_TRACE (1<<TIF_SYSCALL_TRACE)
+#define _TIF_KERNEL_TRACE (1<<TIF_KERNEL_TRACE)
#define _TIF_SIGPENDING (1<<TIF_SIGPENDING)
#define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED)
#define _TIF_SYSCALL_AUDIT (1<<TIF_SYSCALL_AUDIT)
@@ -146,7 +148,7 @@ register struct thread_info *__current_t
/* work to do on interrupt/exception return */
#define _TIF_WORK_MASK (0x0000ffef & ~_TIF_SECCOMP)
/* work to do on any return to u-space */
-#define _TIF_ALLWORK_MASK (0x8000ffff & ~_TIF_SECCOMP)
+#define _TIF_ALLWORK_MASK (0xc000ffff & ~_TIF_SECCOMP)
#endif /* __KERNEL__ */
--
Mathieu Desnoyers
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
^ permalink raw reply [flat|nested] 28+ messages in thread* [RFC patch 12/21] LTTng Kernel Trace Thread Flag parisc
2009-03-15 19:03 [RFC patch 00/21] TIF_KERNEL_TRACE thread flags Mathieu Desnoyers
` (10 preceding siblings ...)
2009-03-15 19:03 ` [RFC patch 11/21] LTTng Kernel Trace Thread Flag MIPS Mathieu Desnoyers
@ 2009-03-15 19:03 ` Mathieu Desnoyers
2009-03-15 19:03 ` [RFC patch 13/21] LTTng Kernel Trace Thread Flag powerpc Mathieu Desnoyers
` (8 subsequent siblings)
20 siblings, 0 replies; 28+ messages in thread
From: Mathieu Desnoyers @ 2009-03-15 19:03 UTC (permalink / raw)
To: Ingo Molnar, akpm, Frederic Weisbecker, Steven Rostedt, LKML
Cc: Mathieu Desnoyers
[-- Attachment #1: lttng-kernel-trace-thread-flag-parisc.patch --]
[-- Type: text/plain, Size: 1324 bytes --]
Add a thread flag to activate system-wide syscall tracing.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
---
arch/parisc/include/asm/thread_info.h | 2 ++
1 file changed, 2 insertions(+)
Index: linux-2.6-lttng/arch/parisc/include/asm/thread_info.h
===================================================================
--- linux-2.6-lttng.orig/arch/parisc/include/asm/thread_info.h 2009-01-09 18:15:55.000000000 -0500
+++ linux-2.6-lttng/arch/parisc/include/asm/thread_info.h 2009-01-09 18:17:47.000000000 -0500
@@ -59,6 +59,7 @@ struct thread_info {
#define TIF_MEMDIE 5
#define TIF_RESTORE_SIGMASK 6 /* restore saved signal mask */
#define TIF_FREEZE 7 /* is freezing for suspend */
+#define TIF_KERNEL_TRACE 8 /* kernel trace active */
#define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE)
#define _TIF_SIGPENDING (1 << TIF_SIGPENDING)
@@ -67,6 +68,7 @@ struct thread_info {
#define _TIF_32BIT (1 << TIF_32BIT)
#define _TIF_RESTORE_SIGMASK (1 << TIF_RESTORE_SIGMASK)
#define _TIF_FREEZE (1 << TIF_FREEZE)
+#define _TIF_KERNEL_TRACE (1 << TIF_KERNEL_TRACE)
#define _TIF_USER_WORK_MASK (_TIF_SIGPENDING | \
_TIF_NEED_RESCHED | _TIF_RESTORE_SIGMASK)
--
Mathieu Desnoyers
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
^ permalink raw reply [flat|nested] 28+ messages in thread* [RFC patch 13/21] LTTng Kernel Trace Thread Flag powerpc
2009-03-15 19:03 [RFC patch 00/21] TIF_KERNEL_TRACE thread flags Mathieu Desnoyers
` (11 preceding siblings ...)
2009-03-15 19:03 ` [RFC patch 12/21] LTTng Kernel Trace Thread Flag parisc Mathieu Desnoyers
@ 2009-03-15 19:03 ` Mathieu Desnoyers
2009-03-15 19:03 ` [RFC patch 14/21] LTTng Kernel Trace Thread Flag s390 Mathieu Desnoyers
` (7 subsequent siblings)
20 siblings, 0 replies; 28+ messages in thread
From: Mathieu Desnoyers @ 2009-03-15 19:03 UTC (permalink / raw)
To: Ingo Molnar, akpm, Frederic Weisbecker, Steven Rostedt, LKML
Cc: Mathieu Desnoyers
[-- Attachment #1: lttng-kernel-trace-thread-flag-powerpc.patch --]
[-- Type: text/plain, Size: 2484 bytes --]
Add a thread flag to activate system-wide syscall tracing.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
---
arch/powerpc/include/asm/thread_info.h | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
Index: linux-2.6-lttng/arch/powerpc/include/asm/thread_info.h
===================================================================
--- linux-2.6-lttng.orig/arch/powerpc/include/asm/thread_info.h 2009-01-09 18:15:55.000000000 -0500
+++ linux-2.6-lttng/arch/powerpc/include/asm/thread_info.h 2009-01-09 18:17:48.000000000 -0500
@@ -100,7 +100,7 @@ static inline struct thread_info *curren
#define TIF_POLLING_NRFLAG 3 /* true if poll_idle() is polling
TIF_NEED_RESCHED */
#define TIF_32BIT 4 /* 32 bit binary */
-#define TIF_PERFMON_WORK 5 /* work for pfm_handle_work() */
+#define TIF_KERNEL_TRACE 5 /* kernel trace active */
#define TIF_PERFMON_CTXSW 6 /* perfmon needs ctxsw calls */
#define TIF_SYSCALL_AUDIT 7 /* syscall auditing active */
#define TIF_SINGLESTEP 8 /* singlestepping active */
@@ -112,6 +112,7 @@ static inline struct thread_info *curren
#define TIF_FREEZE 14 /* Freezing for suspend */
#define TIF_RUNLATCH 15 /* Is the runlatch enabled? */
#define TIF_ABI_PENDING 16 /* 32/64 bit switch needed */
+#define TIF_PERFMON_WORK 17 /* work for pfm_handle_work() */
/* as above, but as bit values */
#define _TIF_SYSCALL_TRACE (1<<TIF_SYSCALL_TRACE)
@@ -119,7 +120,7 @@ static inline struct thread_info *curren
#define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED)
#define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG)
#define _TIF_32BIT (1<<TIF_32BIT)
-#define _TIF_PERFMON_WORK (1<<TIF_PERFMON_WORK)
+#define _TIF_KERNEL_TRACE (1<<TIF_KERNEL_TRACE)
#define _TIF_PERFMON_CTXSW (1<<TIF_PERFMON_CTXSW)
#define _TIF_SYSCALL_AUDIT (1<<TIF_SYSCALL_AUDIT)
#define _TIF_SINGLESTEP (1<<TIF_SINGLESTEP)
@@ -130,7 +131,8 @@ static inline struct thread_info *curren
#define _TIF_FREEZE (1<<TIF_FREEZE)
#define _TIF_RUNLATCH (1<<TIF_RUNLATCH)
#define _TIF_ABI_PENDING (1<<TIF_ABI_PENDING)
-#define _TIF_SYSCALL_T_OR_A (_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SECCOMP)
+#define _TIF_PERFMON_WORK (1<<TIF_PERFMON_WORK)
+#define _TIF_SYSCALL_T_OR_A (_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SECCOMP|_TIF_KERNEL_TRACE)
#define _TIF_USER_WORK_MASK (_TIF_SIGPENDING | _TIF_NEED_RESCHED | \
_TIF_NOTIFY_RESUME)
--
Mathieu Desnoyers
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
^ permalink raw reply [flat|nested] 28+ messages in thread* [RFC patch 14/21] LTTng Kernel Trace Thread Flag s390
2009-03-15 19:03 [RFC patch 00/21] TIF_KERNEL_TRACE thread flags Mathieu Desnoyers
` (12 preceding siblings ...)
2009-03-15 19:03 ` [RFC patch 13/21] LTTng Kernel Trace Thread Flag powerpc Mathieu Desnoyers
@ 2009-03-15 19:03 ` Mathieu Desnoyers
2009-03-15 19:03 ` [RFC patch 15/21] LTTng Kernel Trace Thread Flag SH Mathieu Desnoyers
` (6 subsequent siblings)
20 siblings, 0 replies; 28+ messages in thread
From: Mathieu Desnoyers @ 2009-03-15 19:03 UTC (permalink / raw)
To: Ingo Molnar, akpm, Frederic Weisbecker, Steven Rostedt, LKML
Cc: Mathieu Desnoyers
[-- Attachment #1: lttng-kernel-trace-thread-flag-s390.patch --]
[-- Type: text/plain, Size: 1489 bytes --]
Add a thread flag to activate system-wide syscall tracing.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
---
arch/s390/include/asm/thread_info.h | 2 ++
1 file changed, 2 insertions(+)
Index: linux-2.6-lttng/arch/s390/include/asm/thread_info.h
===================================================================
--- linux-2.6-lttng.orig/arch/s390/include/asm/thread_info.h 2009-01-09 18:15:55.000000000 -0500
+++ linux-2.6-lttng/arch/s390/include/asm/thread_info.h 2009-01-09 18:17:48.000000000 -0500
@@ -88,6 +88,7 @@ static inline struct thread_info *curren
#define TIF_SYSCALL_AUDIT 5 /* syscall auditing active */
#define TIF_SINGLE_STEP 6 /* deliver sigtrap on return to user */
#define TIF_MCCK_PENDING 7 /* machine check handling is pending */
+#define TIF_KERNEL_TRACE 8 /* kernel trace active */
#define TIF_USEDFPU 16 /* FPU was used by this task this quantum (SMP) */
#define TIF_POLLING_NRFLAG 17 /* true if poll_idle() is polling
TIF_NEED_RESCHED */
@@ -105,6 +106,7 @@ static inline struct thread_info *curren
#define _TIF_SYSCALL_AUDIT (1<<TIF_SYSCALL_AUDIT)
#define _TIF_SINGLE_STEP (1<<TIF_SINGLE_STEP)
#define _TIF_MCCK_PENDING (1<<TIF_MCCK_PENDING)
+#define _TIF_KERNEL_TRACE (1<<TIF_KERNEL_TRACE)
#define _TIF_USEDFPU (1<<TIF_USEDFPU)
#define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG)
#define _TIF_31BIT (1<<TIF_31BIT)
--
Mathieu Desnoyers
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
^ permalink raw reply [flat|nested] 28+ messages in thread* [RFC patch 15/21] LTTng Kernel Trace Thread Flag SH
2009-03-15 19:03 [RFC patch 00/21] TIF_KERNEL_TRACE thread flags Mathieu Desnoyers
` (13 preceding siblings ...)
2009-03-15 19:03 ` [RFC patch 14/21] LTTng Kernel Trace Thread Flag s390 Mathieu Desnoyers
@ 2009-03-15 19:03 ` Mathieu Desnoyers
2009-03-15 19:03 ` [RFC patch 16/21] LTTng Kernel Trace Thread Flag sparc Mathieu Desnoyers
` (5 subsequent siblings)
20 siblings, 0 replies; 28+ messages in thread
From: Mathieu Desnoyers @ 2009-03-15 19:03 UTC (permalink / raw)
To: Ingo Molnar, akpm, Frederic Weisbecker, Steven Rostedt, LKML
Cc: Mathieu Desnoyers
[-- Attachment #1: lttng-kernel-trace-thread-flag-sh.patch --]
[-- Type: text/plain, Size: 2359 bytes --]
Add a thread flag to activate system-wide syscall tracing.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
---
arch/sh/include/asm/thread_info.h | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
Index: linux-2.6-lttng/arch/sh/include/asm/thread_info.h
===================================================================
--- linux-2.6-lttng.orig/arch/sh/include/asm/thread_info.h 2009-01-09 18:15:55.000000000 -0500
+++ linux-2.6-lttng/arch/sh/include/asm/thread_info.h 2009-01-09 18:17:48.000000000 -0500
@@ -116,6 +116,7 @@ extern void free_thread_info(struct thre
#define TIF_SYSCALL_AUDIT 5 /* syscall auditing active */
#define TIF_SECCOMP 6 /* secure computing */
#define TIF_NOTIFY_RESUME 7 /* callback before returning to user */
+#define TIF_KERNEL_TRACE 8 /* kernel trace active */
#define TIF_USEDFPU 16 /* FPU was used by this task this quantum (SMP) */
#define TIF_POLLING_NRFLAG 17 /* true if poll_idle() is polling TIF_NEED_RESCHED */
#define TIF_MEMDIE 18
@@ -129,6 +130,7 @@ extern void free_thread_info(struct thre
#define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT)
#define _TIF_SECCOMP (1 << TIF_SECCOMP)
#define _TIF_NOTIFY_RESUME (1 << TIF_NOTIFY_RESUME)
+#define _TIF_KERNEL_TRACE (1 << TIF_KERNEL_TRACE)
#define _TIF_USEDFPU (1 << TIF_USEDFPU)
#define _TIF_POLLING_NRFLAG (1 << TIF_POLLING_NRFLAG)
#define _TIF_FREEZE (1 << TIF_FREEZE)
@@ -141,17 +143,19 @@ extern void free_thread_info(struct thre
/* work to do in syscall trace */
#define _TIF_WORK_SYSCALL_MASK (_TIF_SYSCALL_TRACE | _TIF_SINGLESTEP | \
- _TIF_SYSCALL_AUDIT | _TIF_SECCOMP)
+ _TIF_SYSCALL_AUDIT | _TIF_SECCOMP | \
+ _TIF_KERNEL_TRACE)
/* work to do on any return to u-space */
#define _TIF_ALLWORK_MASK (_TIF_SYSCALL_TRACE | _TIF_SIGPENDING | \
_TIF_NEED_RESCHED | _TIF_SYSCALL_AUDIT | \
_TIF_SINGLESTEP | _TIF_RESTORE_SIGMASK | \
- _TIF_NOTIFY_RESUME)
+ _TIF_NOTIFY_RESUME | _TIF_KERNEL_TRACE)
/* work to do on interrupt/exception return */
#define _TIF_WORK_MASK (_TIF_ALLWORK_MASK & ~(_TIF_SYSCALL_TRACE | \
- _TIF_SYSCALL_AUDIT | _TIF_SINGLESTEP))
+ _TIF_SYSCALL_AUDIT | _TIF_SINGLESTEP | \
+ _TIF_KERNEL_TRACE))
#endif /* __KERNEL__ */
--
Mathieu Desnoyers
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
^ permalink raw reply [flat|nested] 28+ messages in thread* [RFC patch 16/21] LTTng Kernel Trace Thread Flag sparc
2009-03-15 19:03 [RFC patch 00/21] TIF_KERNEL_TRACE thread flags Mathieu Desnoyers
` (14 preceding siblings ...)
2009-03-15 19:03 ` [RFC patch 15/21] LTTng Kernel Trace Thread Flag SH Mathieu Desnoyers
@ 2009-03-15 19:03 ` Mathieu Desnoyers
2009-03-15 19:03 ` [RFC patch 17/21] LTTng Kernel Trace Thread Flag sparc64 Mathieu Desnoyers
` (4 subsequent siblings)
20 siblings, 0 replies; 28+ messages in thread
From: Mathieu Desnoyers @ 2009-03-15 19:03 UTC (permalink / raw)
To: Ingo Molnar, akpm, Frederic Weisbecker, Steven Rostedt, LKML
Cc: Mathieu Desnoyers
[-- Attachment #1: lttng-kernel-trace-thread-flag-sparc.patch --]
[-- Type: text/plain, Size: 1424 bytes --]
Add a thread flag to activate system-wide syscall tracing.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
---
arch/sparc/include/asm/thread_info_32.h | 2 ++
1 file changed, 2 insertions(+)
Index: linux-2.6-lttng/arch/sparc/include/asm/thread_info_32.h
===================================================================
--- linux-2.6-lttng.orig/arch/sparc/include/asm/thread_info_32.h 2009-01-09 18:15:54.000000000 -0500
+++ linux-2.6-lttng/arch/sparc/include/asm/thread_info_32.h 2009-01-09 18:17:48.000000000 -0500
@@ -130,6 +130,7 @@ BTFIXUPDEF_CALL(void, free_thread_info,
#define TIF_SIGPENDING 2 /* signal pending */
#define TIF_NEED_RESCHED 3 /* rescheduling necessary */
#define TIF_RESTORE_SIGMASK 4 /* restore signal mask in do_signal() */
+#define TIF_KERNEL_TRACE 5 /* kernel trace active */
#define TIF_USEDFPU 8 /* FPU was used by this task
* this quantum (SMP) */
#define TIF_POLLING_NRFLAG 9 /* true if poll_idle() is polling
@@ -139,6 +140,7 @@ BTFIXUPDEF_CALL(void, free_thread_info,
/* as above, but as bit values */
#define _TIF_SYSCALL_TRACE (1<<TIF_SYSCALL_TRACE)
+#define _TIF_KERNEL_TRACE (1<<TIF_KERNEL_TRACE)
#define _TIF_NOTIFY_RESUME (1<<TIF_NOTIFY_RESUME)
#define _TIF_SIGPENDING (1<<TIF_SIGPENDING)
#define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED)
--
Mathieu Desnoyers
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
^ permalink raw reply [flat|nested] 28+ messages in thread* [RFC patch 17/21] LTTng Kernel Trace Thread Flag sparc64
2009-03-15 19:03 [RFC patch 00/21] TIF_KERNEL_TRACE thread flags Mathieu Desnoyers
` (15 preceding siblings ...)
2009-03-15 19:03 ` [RFC patch 16/21] LTTng Kernel Trace Thread Flag sparc Mathieu Desnoyers
@ 2009-03-15 19:03 ` Mathieu Desnoyers
2009-03-15 19:03 ` [RFC patch 18/21] LTTng Kernel Trace Thread Flag UML Mathieu Desnoyers
` (3 subsequent siblings)
20 siblings, 0 replies; 28+ messages in thread
From: Mathieu Desnoyers @ 2009-03-15 19:03 UTC (permalink / raw)
To: Ingo Molnar, akpm, Frederic Weisbecker, Steven Rostedt, LKML
Cc: Mathieu Desnoyers
[-- Attachment #1: lttng-kernel-trace-thread-flag-sparc64.patch --]
[-- Type: text/plain, Size: 1447 bytes --]
Add a thread flag to activate system-wide syscall tracing.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
---
arch/sparc/include/asm/thread_info_64.h | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
Index: linux-2.6-lttng/arch/sparc/include/asm/thread_info_64.h
===================================================================
--- linux-2.6-lttng.orig/arch/sparc/include/asm/thread_info_64.h 2009-01-09 18:15:54.000000000 -0500
+++ linux-2.6-lttng/arch/sparc/include/asm/thread_info_64.h 2009-01-09 18:17:49.000000000 -0500
@@ -226,7 +226,7 @@ register struct thread_info *current_thr
#define TIF_UNALIGNED 5 /* allowed to do unaligned accesses */
/* flag bit 6 is available */
#define TIF_32BIT 7 /* 32-bit binary */
-/* flag bit 8 is available */
+#define TIF_KERNEL_TRACE 8 /* kernel trace active */
#define TIF_SECCOMP 9 /* secure computing */
#define TIF_SYSCALL_AUDIT 10 /* syscall auditing active */
/* flag bit 11 is available */
@@ -246,6 +246,7 @@ register struct thread_info *current_thr
#define _TIF_PERFCTR (1<<TIF_PERFCTR)
#define _TIF_UNALIGNED (1<<TIF_UNALIGNED)
#define _TIF_32BIT (1<<TIF_32BIT)
+#define _TIF_KERNEL_TRACE (1<<TIF_KERNEL_TRACE)
#define _TIF_SECCOMP (1<<TIF_SECCOMP)
#define _TIF_SYSCALL_AUDIT (1<<TIF_SYSCALL_AUDIT)
#define _TIF_ABI_PENDING (1<<TIF_ABI_PENDING)
--
Mathieu Desnoyers
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
^ permalink raw reply [flat|nested] 28+ messages in thread* [RFC patch 18/21] LTTng Kernel Trace Thread Flag UML
2009-03-15 19:03 [RFC patch 00/21] TIF_KERNEL_TRACE thread flags Mathieu Desnoyers
` (16 preceding siblings ...)
2009-03-15 19:03 ` [RFC patch 17/21] LTTng Kernel Trace Thread Flag sparc64 Mathieu Desnoyers
@ 2009-03-15 19:03 ` Mathieu Desnoyers
2009-03-15 19:03 ` [RFC patch 19/21] LTTng Linux Kernel Trace Thread Flag x86 Mathieu Desnoyers
` (2 subsequent siblings)
20 siblings, 0 replies; 28+ messages in thread
From: Mathieu Desnoyers @ 2009-03-15 19:03 UTC (permalink / raw)
To: Ingo Molnar, akpm, Frederic Weisbecker, Steven Rostedt, LKML
Cc: Mathieu Desnoyers
[-- Attachment #1: lttng-kernel-trace-thread-flag-um.patch --]
[-- Type: text/plain, Size: 1232 bytes --]
Add a thread flag to activate system-wide syscall tracing.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
---
arch/um/include/asm/thread_info.h | 2 ++
1 file changed, 2 insertions(+)
Index: linux-2.6-lttng/arch/um/include/asm/thread_info.h
===================================================================
--- linux-2.6-lttng.orig/arch/um/include/asm/thread_info.h 2009-01-09 18:15:54.000000000 -0500
+++ linux-2.6-lttng/arch/um/include/asm/thread_info.h 2009-01-09 18:17:49.000000000 -0500
@@ -69,6 +69,7 @@ static inline struct thread_info *curren
#define TIF_MEMDIE 5
#define TIF_SYSCALL_AUDIT 6
#define TIF_RESTORE_SIGMASK 7
+#define TIF_KERNEL_TRACE 8 /* kernel trace active */
#define TIF_FREEZE 16 /* is freezing for suspend */
#define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE)
@@ -78,6 +79,7 @@ static inline struct thread_info *curren
#define _TIF_MEMDIE (1 << TIF_MEMDIE)
#define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT)
#define _TIF_RESTORE_SIGMASK (1 << TIF_RESTORE_SIGMASK)
+#define _TIF_KERNEL_TRACE (1 << TIF_KERNEL_TRACE)
#define _TIF_FREEZE (1 << TIF_FREEZE)
#endif
--
Mathieu Desnoyers
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
^ permalink raw reply [flat|nested] 28+ messages in thread* [RFC patch 19/21] LTTng Linux Kernel Trace Thread Flag x86
2009-03-15 19:03 [RFC patch 00/21] TIF_KERNEL_TRACE thread flags Mathieu Desnoyers
` (17 preceding siblings ...)
2009-03-15 19:03 ` [RFC patch 18/21] LTTng Kernel Trace Thread Flag UML Mathieu Desnoyers
@ 2009-03-15 19:03 ` Mathieu Desnoyers
2009-03-15 19:56 ` Frederic Weisbecker
2009-03-15 19:04 ` [RFC patch 20/21] LTTng Kernel Trace Thread Flag xtensa Mathieu Desnoyers
2009-03-15 19:04 ` [RFC patch 21/21] LTTng Kernel Trace Thread Flag API Mathieu Desnoyers
20 siblings, 1 reply; 28+ messages in thread
From: Mathieu Desnoyers @ 2009-03-15 19:03 UTC (permalink / raw)
To: Ingo Molnar, akpm, Frederic Weisbecker, Steven Rostedt, LKML
Cc: Mathieu Desnoyers, Andi Kleen, Thomas Gleixner, Ingo Molnar,
H. Peter Anvin
[-- Attachment #1: lttng-kernel-trace-thread-flag-x86.patch --]
[-- Type: text/plain, Size: 3626 bytes --]
Add a thread flag to activate system-wide syscall tracing.
Make x86_64 support TIF_SYSCALL_TRACE async flag set in entry.S
When the flag is inactive upon syscall entry and concurrently activated before
exit, we seem to reach a state where the top of stack is incorrect upon return
to user space.
Fix this by fixing the top of stack and jumping to int_ret_from_sys_call if we
detect that thread flags has been modified.
We make sure that the thread flag read is coherent between our new test and the ALLWORK_MASK test by first saving it in a register used for both comparisons.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
CC: Andi Kleen <ak@muc.de>
CC: Thomas Gleixner <tglx@linutronix.de>
CC: Ingo Molnar <mingo@redhat.com>
CC: H. Peter Anvin <hpa@zytor.com>
---
arch/x86/include/asm/thread_info.h | 9 ++++++---
arch/x86/kernel/entry_32.S | 3 ++-
2 files changed, 8 insertions(+), 4 deletions(-)
Index: linux-2.6-lttng/arch/x86/include/asm/thread_info.h
===================================================================
--- linux-2.6-lttng.orig/arch/x86/include/asm/thread_info.h 2009-01-14 22:10:38.000000000 -0500
+++ linux-2.6-lttng/arch/x86/include/asm/thread_info.h 2009-01-14 22:25:08.000000000 -0500
@@ -79,6 +79,7 @@ struct thread_info {
#define TIF_SYSCALL_EMU 6 /* syscall emulation active */
#define TIF_SYSCALL_AUDIT 7 /* syscall auditing active */
#define TIF_SECCOMP 8 /* secure computing */
+#define TIF_KERNEL_TRACE 9 /* kernel trace active */
#define TIF_MCE_NOTIFY 10 /* notify userspace of an MCE */
#define TIF_NOTSC 16 /* TSC is not accessible in userland */
#define TIF_IA32 17 /* 32bit process */
@@ -102,6 +103,7 @@ struct thread_info {
#define _TIF_SYSCALL_EMU (1 << TIF_SYSCALL_EMU)
#define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT)
#define _TIF_SECCOMP (1 << TIF_SECCOMP)
+#define _TIF_KERNEL_TRACE (1 << TIF_KERNEL_TRACE)
#define _TIF_MCE_NOTIFY (1 << TIF_MCE_NOTIFY)
#define _TIF_NOTSC (1 << TIF_NOTSC)
#define _TIF_IA32 (1 << TIF_IA32)
@@ -117,17 +119,18 @@ struct thread_info {
/* work to do in syscall_trace_enter() */
#define _TIF_WORK_SYSCALL_ENTRY \
- (_TIF_SYSCALL_TRACE | _TIF_SYSCALL_EMU | \
+ (_TIF_SYSCALL_TRACE | _TIF_KERNEL_TRACE | _TIF_SYSCALL_EMU | \
_TIF_SYSCALL_AUDIT | _TIF_SECCOMP | _TIF_SINGLESTEP)
/* work to do in syscall_trace_leave() */
#define _TIF_WORK_SYSCALL_EXIT \
- (_TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT | _TIF_SINGLESTEP)
+ (_TIF_SYSCALL_TRACE | _TIF_KERNEL_TRACE | _TIF_SYSCALL_AUDIT | \
+ _TIF_SINGLESTEP)
/* work to do on interrupt/exception return */
#define _TIF_WORK_MASK \
(0x0000FFFF & \
- ~(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT| \
+ ~(_TIF_SYSCALL_TRACE|_TIF_KERNEL_TRACE|_TIF_SYSCALL_AUDIT| \
_TIF_SINGLESTEP|_TIF_SECCOMP|_TIF_SYSCALL_EMU))
/* work to do on any return to user space */
Index: linux-2.6-lttng/arch/x86/kernel/entry_32.S
===================================================================
--- linux-2.6-lttng.orig/arch/x86/kernel/entry_32.S 2009-01-14 22:22:40.000000000 -0500
+++ linux-2.6-lttng/arch/x86/kernel/entry_32.S 2009-01-14 22:25:44.000000000 -0500
@@ -571,7 +571,8 @@ END(syscall_trace_entry)
# perform syscall exit tracing
ALIGN
syscall_exit_work:
- testb $_TIF_WORK_SYSCALL_EXIT, %cl
+ /* Note, _TIF_KERNEL_TRACE is bit number 9, and so it needs testw and not testb */
+ testw $_TIF_WORK_SYSCALL_EXIT, %cx
jz work_pending
TRACE_IRQS_ON
ENABLE_INTERRUPTS(CLBR_ANY) # could let syscall_trace_leave() call
--
Mathieu Desnoyers
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
^ permalink raw reply [flat|nested] 28+ messages in thread* Re: [RFC patch 19/21] LTTng Linux Kernel Trace Thread Flag x86
2009-03-15 19:03 ` [RFC patch 19/21] LTTng Linux Kernel Trace Thread Flag x86 Mathieu Desnoyers
@ 2009-03-15 19:56 ` Frederic Weisbecker
2009-03-15 20:08 ` Mathieu Desnoyers
0 siblings, 1 reply; 28+ messages in thread
From: Frederic Weisbecker @ 2009-03-15 19:56 UTC (permalink / raw)
To: Mathieu Desnoyers
Cc: Ingo Molnar, akpm, Steven Rostedt, LKML, Andi Kleen,
Thomas Gleixner, Ingo Molnar, H. Peter Anvin
On Sun, Mar 15, 2009 at 03:03:59PM -0400, Mathieu Desnoyers wrote:
> Add a thread flag to activate system-wide syscall tracing.
>
> Make x86_64 support TIF_SYSCALL_TRACE async flag set in entry.S
x86-32 :-)
> When the flag is inactive upon syscall entry and concurrently activated before
> exit, we seem to reach a state where the top of stack is incorrect upon return
> to user space.
>
> Fix this by fixing the top of stack and jumping to int_ret_from_sys_call if we
> detect that thread flags has been modified.
I don't see where you do that. May be you forgot some parts that match your changelog?
>
> We make sure that the thread flag read is coherent between our new test and the ALLWORK_MASK test by first saving it in a register used for both comparisons.
Ditto.
Thanks,
Frederic.
>
> Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
> CC: Andi Kleen <ak@muc.de>
> CC: Thomas Gleixner <tglx@linutronix.de>
> CC: Ingo Molnar <mingo@redhat.com>
> CC: H. Peter Anvin <hpa@zytor.com>
> ---
> arch/x86/include/asm/thread_info.h | 9 ++++++---
> arch/x86/kernel/entry_32.S | 3 ++-
> 2 files changed, 8 insertions(+), 4 deletions(-)
>
> Index: linux-2.6-lttng/arch/x86/include/asm/thread_info.h
> ===================================================================
> --- linux-2.6-lttng.orig/arch/x86/include/asm/thread_info.h 2009-01-14 22:10:38.000000000 -0500
> +++ linux-2.6-lttng/arch/x86/include/asm/thread_info.h 2009-01-14 22:25:08.000000000 -0500
> @@ -79,6 +79,7 @@ struct thread_info {
> #define TIF_SYSCALL_EMU 6 /* syscall emulation active */
> #define TIF_SYSCALL_AUDIT 7 /* syscall auditing active */
> #define TIF_SECCOMP 8 /* secure computing */
> +#define TIF_KERNEL_TRACE 9 /* kernel trace active */
> #define TIF_MCE_NOTIFY 10 /* notify userspace of an MCE */
> #define TIF_NOTSC 16 /* TSC is not accessible in userland */
> #define TIF_IA32 17 /* 32bit process */
> @@ -102,6 +103,7 @@ struct thread_info {
> #define _TIF_SYSCALL_EMU (1 << TIF_SYSCALL_EMU)
> #define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT)
> #define _TIF_SECCOMP (1 << TIF_SECCOMP)
> +#define _TIF_KERNEL_TRACE (1 << TIF_KERNEL_TRACE)
> #define _TIF_MCE_NOTIFY (1 << TIF_MCE_NOTIFY)
> #define _TIF_NOTSC (1 << TIF_NOTSC)
> #define _TIF_IA32 (1 << TIF_IA32)
> @@ -117,17 +119,18 @@ struct thread_info {
>
> /* work to do in syscall_trace_enter() */
> #define _TIF_WORK_SYSCALL_ENTRY \
> - (_TIF_SYSCALL_TRACE | _TIF_SYSCALL_EMU | \
> + (_TIF_SYSCALL_TRACE | _TIF_KERNEL_TRACE | _TIF_SYSCALL_EMU | \
> _TIF_SYSCALL_AUDIT | _TIF_SECCOMP | _TIF_SINGLESTEP)
>
> /* work to do in syscall_trace_leave() */
> #define _TIF_WORK_SYSCALL_EXIT \
> - (_TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT | _TIF_SINGLESTEP)
> + (_TIF_SYSCALL_TRACE | _TIF_KERNEL_TRACE | _TIF_SYSCALL_AUDIT | \
> + _TIF_SINGLESTEP)
>
> /* work to do on interrupt/exception return */
> #define _TIF_WORK_MASK \
> (0x0000FFFF & \
> - ~(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT| \
> + ~(_TIF_SYSCALL_TRACE|_TIF_KERNEL_TRACE|_TIF_SYSCALL_AUDIT| \
> _TIF_SINGLESTEP|_TIF_SECCOMP|_TIF_SYSCALL_EMU))
>
> /* work to do on any return to user space */
> Index: linux-2.6-lttng/arch/x86/kernel/entry_32.S
> ===================================================================
> --- linux-2.6-lttng.orig/arch/x86/kernel/entry_32.S 2009-01-14 22:22:40.000000000 -0500
> +++ linux-2.6-lttng/arch/x86/kernel/entry_32.S 2009-01-14 22:25:44.000000000 -0500
> @@ -571,7 +571,8 @@ END(syscall_trace_entry)
> # perform syscall exit tracing
> ALIGN
> syscall_exit_work:
> - testb $_TIF_WORK_SYSCALL_EXIT, %cl
> + /* Note, _TIF_KERNEL_TRACE is bit number 9, and so it needs testw and not testb */
> + testw $_TIF_WORK_SYSCALL_EXIT, %cx
> jz work_pending
> TRACE_IRQS_ON
> ENABLE_INTERRUPTS(CLBR_ANY) # could let syscall_trace_leave() call
>
> --
> Mathieu Desnoyers
> OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
^ permalink raw reply [flat|nested] 28+ messages in thread* Re: [RFC patch 19/21] LTTng Linux Kernel Trace Thread Flag x86
2009-03-15 19:56 ` Frederic Weisbecker
@ 2009-03-15 20:08 ` Mathieu Desnoyers
0 siblings, 0 replies; 28+ messages in thread
From: Mathieu Desnoyers @ 2009-03-15 20:08 UTC (permalink / raw)
To: Frederic Weisbecker
Cc: Ingo Molnar, akpm, Steven Rostedt, LKML, Andi Kleen,
Thomas Gleixner, Ingo Molnar, H. Peter Anvin
* Frederic Weisbecker (fweisbec@gmail.com) wrote:
> On Sun, Mar 15, 2009 at 03:03:59PM -0400, Mathieu Desnoyers wrote:
> > Add a thread flag to activate system-wide syscall tracing.
> >
> > Make x86_64 support TIF_SYSCALL_TRACE async flag set in entry.S
>
>
> x86-32 :-)
>
>
> > When the flag is inactive upon syscall entry and concurrently activated before
> > exit, we seem to reach a state where the top of stack is incorrect upon return
> > to user space.
> >
> > Fix this by fixing the top of stack and jumping to int_ret_from_sys_call if we
> > detect that thread flags has been modified.
>
>
> I don't see where you do that. May be you forgot some parts that match your changelog?
>
Oh, I see. I moved the *.S modifications to the LTTng instrumentation
patches. Maybe those belong more to the kernel trace thread flags
patches. I'll move them and repost.
Thanks,
Mathieu
> >
> > We make sure that the thread flag read is coherent between our new test and the ALLWORK_MASK test by first saving it in a register used for both comparisons.
>
> Ditto.
>
> Thanks,
> Frederic.
>
> >
> > Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
> > CC: Andi Kleen <ak@muc.de>
> > CC: Thomas Gleixner <tglx@linutronix.de>
> > CC: Ingo Molnar <mingo@redhat.com>
> > CC: H. Peter Anvin <hpa@zytor.com>
> > ---
> > arch/x86/include/asm/thread_info.h | 9 ++++++---
> > arch/x86/kernel/entry_32.S | 3 ++-
> > 2 files changed, 8 insertions(+), 4 deletions(-)
> >
> > Index: linux-2.6-lttng/arch/x86/include/asm/thread_info.h
> > ===================================================================
> > --- linux-2.6-lttng.orig/arch/x86/include/asm/thread_info.h 2009-01-14 22:10:38.000000000 -0500
> > +++ linux-2.6-lttng/arch/x86/include/asm/thread_info.h 2009-01-14 22:25:08.000000000 -0500
> > @@ -79,6 +79,7 @@ struct thread_info {
> > #define TIF_SYSCALL_EMU 6 /* syscall emulation active */
> > #define TIF_SYSCALL_AUDIT 7 /* syscall auditing active */
> > #define TIF_SECCOMP 8 /* secure computing */
> > +#define TIF_KERNEL_TRACE 9 /* kernel trace active */
> > #define TIF_MCE_NOTIFY 10 /* notify userspace of an MCE */
> > #define TIF_NOTSC 16 /* TSC is not accessible in userland */
> > #define TIF_IA32 17 /* 32bit process */
> > @@ -102,6 +103,7 @@ struct thread_info {
> > #define _TIF_SYSCALL_EMU (1 << TIF_SYSCALL_EMU)
> > #define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT)
> > #define _TIF_SECCOMP (1 << TIF_SECCOMP)
> > +#define _TIF_KERNEL_TRACE (1 << TIF_KERNEL_TRACE)
> > #define _TIF_MCE_NOTIFY (1 << TIF_MCE_NOTIFY)
> > #define _TIF_NOTSC (1 << TIF_NOTSC)
> > #define _TIF_IA32 (1 << TIF_IA32)
> > @@ -117,17 +119,18 @@ struct thread_info {
> >
> > /* work to do in syscall_trace_enter() */
> > #define _TIF_WORK_SYSCALL_ENTRY \
> > - (_TIF_SYSCALL_TRACE | _TIF_SYSCALL_EMU | \
> > + (_TIF_SYSCALL_TRACE | _TIF_KERNEL_TRACE | _TIF_SYSCALL_EMU | \
> > _TIF_SYSCALL_AUDIT | _TIF_SECCOMP | _TIF_SINGLESTEP)
> >
> > /* work to do in syscall_trace_leave() */
> > #define _TIF_WORK_SYSCALL_EXIT \
> > - (_TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT | _TIF_SINGLESTEP)
> > + (_TIF_SYSCALL_TRACE | _TIF_KERNEL_TRACE | _TIF_SYSCALL_AUDIT | \
> > + _TIF_SINGLESTEP)
> >
> > /* work to do on interrupt/exception return */
> > #define _TIF_WORK_MASK \
> > (0x0000FFFF & \
> > - ~(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT| \
> > + ~(_TIF_SYSCALL_TRACE|_TIF_KERNEL_TRACE|_TIF_SYSCALL_AUDIT| \
> > _TIF_SINGLESTEP|_TIF_SECCOMP|_TIF_SYSCALL_EMU))
> >
> > /* work to do on any return to user space */
> > Index: linux-2.6-lttng/arch/x86/kernel/entry_32.S
> > ===================================================================
> > --- linux-2.6-lttng.orig/arch/x86/kernel/entry_32.S 2009-01-14 22:22:40.000000000 -0500
> > +++ linux-2.6-lttng/arch/x86/kernel/entry_32.S 2009-01-14 22:25:44.000000000 -0500
> > @@ -571,7 +571,8 @@ END(syscall_trace_entry)
> > # perform syscall exit tracing
> > ALIGN
> > syscall_exit_work:
> > - testb $_TIF_WORK_SYSCALL_EXIT, %cl
> > + /* Note, _TIF_KERNEL_TRACE is bit number 9, and so it needs testw and not testb */
> > + testw $_TIF_WORK_SYSCALL_EXIT, %cx
> > jz work_pending
> > TRACE_IRQS_ON
> > ENABLE_INTERRUPTS(CLBR_ANY) # could let syscall_trace_leave() call
> >
> > --
> > Mathieu Desnoyers
> > OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
>
--
Mathieu Desnoyers
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
^ permalink raw reply [flat|nested] 28+ messages in thread
* [RFC patch 20/21] LTTng Kernel Trace Thread Flag xtensa
2009-03-15 19:03 [RFC patch 00/21] TIF_KERNEL_TRACE thread flags Mathieu Desnoyers
` (18 preceding siblings ...)
2009-03-15 19:03 ` [RFC patch 19/21] LTTng Linux Kernel Trace Thread Flag x86 Mathieu Desnoyers
@ 2009-03-15 19:04 ` Mathieu Desnoyers
2009-03-15 19:04 ` [RFC patch 21/21] LTTng Kernel Trace Thread Flag API Mathieu Desnoyers
20 siblings, 0 replies; 28+ messages in thread
From: Mathieu Desnoyers @ 2009-03-15 19:04 UTC (permalink / raw)
To: Ingo Molnar, akpm, Frederic Weisbecker, Steven Rostedt, LKML
Cc: Mathieu Desnoyers
[-- Attachment #1: lttng-kernel-trace-thread-flag-xtensa.patch --]
[-- Type: text/plain, Size: 1685 bytes --]
Add a thread flag to activate system-wide syscall tracing.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
---
arch/xtensa/include/asm/thread_info.h | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
Index: linux-2.6-lttng/arch/xtensa/include/asm/thread_info.h
===================================================================
--- linux-2.6-lttng.orig/arch/xtensa/include/asm/thread_info.h 2009-01-09 18:15:54.000000000 -0500
+++ linux-2.6-lttng/arch/xtensa/include/asm/thread_info.h 2009-01-09 18:17:49.000000000 -0500
@@ -133,6 +133,7 @@ static inline struct thread_info *curren
#define TIF_IRET 4 /* return with iret */
#define TIF_MEMDIE 5
#define TIF_RESTORE_SIGMASK 6 /* restore signal mask in do_signal() */
+#define TIF_KERNEL_TRACE 7 /* kernel trace active */
#define TIF_POLLING_NRFLAG 16 /* true if poll_idle() is polling TIF_NEED_RESCHED */
#define TIF_FREEZE 17 /* is freezing for suspend */
@@ -141,11 +142,12 @@ static inline struct thread_info *curren
#define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED)
#define _TIF_SINGLESTEP (1<<TIF_SINGLESTEP)
#define _TIF_IRET (1<<TIF_IRET)
+#define _TIF_KERNEL_TRACE (1<<TIF_KERNEL_TRACE)
#define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG)
#define _TIF_RESTORE_SIGMASK (1<<TIF_RESTORE_SIGMASK)
#define _TIF_FREEZE (1<<TIF_FREEZE)
-#define _TIF_WORK_MASK 0x0000FFFE /* work to do on interrupt/exception return */
+#define _TIF_WORK_MASK 0x0000FF7E /* work to do on interrupt/exception return */
#define _TIF_ALLWORK_MASK 0x0000FFFF /* work to do on any return to u-space */
/*
--
Mathieu Desnoyers
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
^ permalink raw reply [flat|nested] 28+ messages in thread* [RFC patch 21/21] LTTng Kernel Trace Thread Flag API
2009-03-15 19:03 [RFC patch 00/21] TIF_KERNEL_TRACE thread flags Mathieu Desnoyers
` (19 preceding siblings ...)
2009-03-15 19:04 ` [RFC patch 20/21] LTTng Kernel Trace Thread Flag xtensa Mathieu Desnoyers
@ 2009-03-15 19:04 ` Mathieu Desnoyers
2009-03-15 20:03 ` Mathieu Desnoyers
2009-03-15 20:50 ` Frederic Weisbecker
20 siblings, 2 replies; 28+ messages in thread
From: Mathieu Desnoyers @ 2009-03-15 19:04 UTC (permalink / raw)
To: Ingo Molnar, akpm, Frederic Weisbecker, Steven Rostedt, LKML
Cc: Mathieu Desnoyers
[-- Attachment #1: lttng-kernel-trace-thread-flag-api.patch --]
[-- Type: text/plain, Size: 4024 bytes --]
Add an API to set/clear the kernel wide tracing thread flags. Implemented in
kernel/sched.c. Updates thread flags *asynchronously* while holding the tasklist
lock.
Upon fork, the flag must be re-copied while the tasklist lock is held.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
---
include/linux/sched.h | 3 ++
kernel/fork.c | 9 ++++++++
kernel/sched.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 67 insertions(+)
Index: linux-2.6-lttng/include/linux/sched.h
===================================================================
--- linux-2.6-lttng.orig/include/linux/sched.h 2009-01-09 18:15:54.000000000 -0500
+++ linux-2.6-lttng/include/linux/sched.h 2009-01-09 18:17:50.000000000 -0500
@@ -2300,6 +2300,9 @@ static inline void mm_init_owner(struct
#define TASK_STATE_TO_CHAR_STR "RSDTtZX"
+extern void clear_kernel_trace_flag_all_tasks(void);
+extern void set_kernel_trace_flag_all_tasks(void);
+
#endif /* __KERNEL__ */
#endif
Index: linux-2.6-lttng/kernel/fork.c
===================================================================
--- linux-2.6-lttng.orig/kernel/fork.c 2009-01-09 18:17:38.000000000 -0500
+++ linux-2.6-lttng/kernel/fork.c 2009-01-09 18:17:50.000000000 -0500
@@ -1218,6 +1218,15 @@ static struct task_struct *copy_process(
!cpu_online(task_cpu(p))))
set_task_cpu(p, smp_processor_id());
+ /*
+ * The state of the parent's TIF_KTRACE flag may have changed
+ * since it was copied in dup_task_struct() so we re-copy it here.
+ */
+ if (test_thread_flag(TIF_KERNEL_TRACE))
+ set_tsk_thread_flag(p, TIF_KERNEL_TRACE);
+ else
+ clear_tsk_thread_flag(p, TIF_KERNEL_TRACE);
+
/* CLONE_PARENT re-uses the old parent */
if (clone_flags & (CLONE_PARENT|CLONE_THREAD))
p->real_parent = current->real_parent;
Index: linux-2.6-lttng/kernel/sched.c
===================================================================
--- linux-2.6-lttng.orig/kernel/sched.c 2009-01-09 18:17:38.000000000 -0500
+++ linux-2.6-lttng/kernel/sched.c 2009-01-09 18:17:50.000000000 -0500
@@ -9395,3 +9395,58 @@ struct cgroup_subsys cpuacct_subsys = {
.subsys_id = cpuacct_subsys_id,
};
#endif /* CONFIG_CGROUP_CPUACCT */
+
+static DEFINE_MUTEX(kernel_trace_mutex);
+static int kernel_trace_refcount;
+
+/**
+ * clear_kernel_trace_flag_all_tasks - clears all TIF_KERNEL_TRACE thread flags.
+ *
+ * This function iterates on all threads in the system to clear their
+ * TIF_KERNEL_TRACE flag. Setting the TIF_KERNEL_TRACE flag with the
+ * tasklist_lock held in copy_process() makes sure that once we finish clearing
+ * the thread flags, all threads have their flags cleared.
+ */
+void clear_kernel_trace_flag_all_tasks(void)
+{
+ struct task_struct *p;
+ struct task_struct *t;
+
+ mutex_lock(&kernel_trace_mutex);
+ if (--kernel_trace_refcount)
+ goto end;
+ read_lock(&tasklist_lock);
+ do_each_thread(p, t) {
+ clear_tsk_thread_flag(t, TIF_KERNEL_TRACE);
+ } while_each_thread(p, t);
+ read_unlock(&tasklist_lock);
+end:
+ mutex_unlock(&kernel_trace_mutex);
+}
+EXPORT_SYMBOL_GPL(clear_kernel_trace_flag_all_tasks);
+
+/**
+ * set_kernel_trace_flag_all_tasks - sets all TIF_KERNEL_TRACE thread flags.
+ *
+ * This function iterates on all threads in the system to set their
+ * TIF_KERNEL_TRACE flag. Setting the TIF_KERNEL_TRACE flag with the
+ * tasklist_lock held in copy_process() makes sure that once we finish setting
+ * the thread flags, all threads have their flags set.
+ */
+void set_kernel_trace_flag_all_tasks(void)
+{
+ struct task_struct *p;
+ struct task_struct *t;
+
+ mutex_lock(&kernel_trace_mutex);
+ if (kernel_trace_refcount++)
+ goto end;
+ read_lock(&tasklist_lock);
+ do_each_thread(p, t) {
+ set_tsk_thread_flag(t, TIF_KERNEL_TRACE);
+ } while_each_thread(p, t);
+ read_unlock(&tasklist_lock);
+end:
+ mutex_unlock(&kernel_trace_mutex);
+}
+EXPORT_SYMBOL_GPL(set_kernel_trace_flag_all_tasks);
--
Mathieu Desnoyers
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
^ permalink raw reply [flat|nested] 28+ messages in thread* Re: [RFC patch 21/21] LTTng Kernel Trace Thread Flag API
2009-03-15 19:04 ` [RFC patch 21/21] LTTng Kernel Trace Thread Flag API Mathieu Desnoyers
@ 2009-03-15 20:03 ` Mathieu Desnoyers
2009-03-15 20:50 ` Frederic Weisbecker
1 sibling, 0 replies; 28+ messages in thread
From: Mathieu Desnoyers @ 2009-03-15 20:03 UTC (permalink / raw)
To: Ingo Molnar, akpm, Frederic Weisbecker, Steven Rostedt, LKML
* Mathieu Desnoyers (mathieu.desnoyers@polymtl.ca) wrote:
> Add an API to set/clear the kernel wide tracing thread flags. Implemented in
> kernel/sched.c. Updates thread flags *asynchronously* while holding the tasklist
> lock.
>
> Upon fork, the flag must be re-copied while the tasklist lock is held.
>
This comment should be clearer :
Add an API to set/clear the kernel wide tracing thread flags.
Implemented in kernel/sched.c. Updates thread flags *asynchronously*
while holding the tasklist read lock.
Upon fork, the flag must be re-copied while the tasklist write lock is
held.
We are holding the read lock only to make sure we don't delay thread
creation for too long while iterating on all threads.
Mathieu
> Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
> ---
> include/linux/sched.h | 3 ++
> kernel/fork.c | 9 ++++++++
> kernel/sched.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++
> 3 files changed, 67 insertions(+)
>
> Index: linux-2.6-lttng/include/linux/sched.h
> ===================================================================
> --- linux-2.6-lttng.orig/include/linux/sched.h 2009-01-09 18:15:54.000000000 -0500
> +++ linux-2.6-lttng/include/linux/sched.h 2009-01-09 18:17:50.000000000 -0500
> @@ -2300,6 +2300,9 @@ static inline void mm_init_owner(struct
>
> #define TASK_STATE_TO_CHAR_STR "RSDTtZX"
>
> +extern void clear_kernel_trace_flag_all_tasks(void);
> +extern void set_kernel_trace_flag_all_tasks(void);
> +
> #endif /* __KERNEL__ */
>
> #endif
> Index: linux-2.6-lttng/kernel/fork.c
> ===================================================================
> --- linux-2.6-lttng.orig/kernel/fork.c 2009-01-09 18:17:38.000000000 -0500
> +++ linux-2.6-lttng/kernel/fork.c 2009-01-09 18:17:50.000000000 -0500
> @@ -1218,6 +1218,15 @@ static struct task_struct *copy_process(
> !cpu_online(task_cpu(p))))
> set_task_cpu(p, smp_processor_id());
>
> + /*
> + * The state of the parent's TIF_KTRACE flag may have changed
> + * since it was copied in dup_task_struct() so we re-copy it here.
> + */
> + if (test_thread_flag(TIF_KERNEL_TRACE))
> + set_tsk_thread_flag(p, TIF_KERNEL_TRACE);
> + else
> + clear_tsk_thread_flag(p, TIF_KERNEL_TRACE);
> +
> /* CLONE_PARENT re-uses the old parent */
> if (clone_flags & (CLONE_PARENT|CLONE_THREAD))
> p->real_parent = current->real_parent;
> Index: linux-2.6-lttng/kernel/sched.c
> ===================================================================
> --- linux-2.6-lttng.orig/kernel/sched.c 2009-01-09 18:17:38.000000000 -0500
> +++ linux-2.6-lttng/kernel/sched.c 2009-01-09 18:17:50.000000000 -0500
> @@ -9395,3 +9395,58 @@ struct cgroup_subsys cpuacct_subsys = {
> .subsys_id = cpuacct_subsys_id,
> };
> #endif /* CONFIG_CGROUP_CPUACCT */
> +
> +static DEFINE_MUTEX(kernel_trace_mutex);
> +static int kernel_trace_refcount;
> +
> +/**
> + * clear_kernel_trace_flag_all_tasks - clears all TIF_KERNEL_TRACE thread flags.
> + *
> + * This function iterates on all threads in the system to clear their
> + * TIF_KERNEL_TRACE flag. Setting the TIF_KERNEL_TRACE flag with the
> + * tasklist_lock held in copy_process() makes sure that once we finish clearing
> + * the thread flags, all threads have their flags cleared.
> + */
> +void clear_kernel_trace_flag_all_tasks(void)
> +{
> + struct task_struct *p;
> + struct task_struct *t;
> +
> + mutex_lock(&kernel_trace_mutex);
> + if (--kernel_trace_refcount)
> + goto end;
> + read_lock(&tasklist_lock);
> + do_each_thread(p, t) {
> + clear_tsk_thread_flag(t, TIF_KERNEL_TRACE);
> + } while_each_thread(p, t);
> + read_unlock(&tasklist_lock);
> +end:
> + mutex_unlock(&kernel_trace_mutex);
> +}
> +EXPORT_SYMBOL_GPL(clear_kernel_trace_flag_all_tasks);
> +
> +/**
> + * set_kernel_trace_flag_all_tasks - sets all TIF_KERNEL_TRACE thread flags.
> + *
> + * This function iterates on all threads in the system to set their
> + * TIF_KERNEL_TRACE flag. Setting the TIF_KERNEL_TRACE flag with the
> + * tasklist_lock held in copy_process() makes sure that once we finish setting
> + * the thread flags, all threads have their flags set.
> + */
> +void set_kernel_trace_flag_all_tasks(void)
> +{
> + struct task_struct *p;
> + struct task_struct *t;
> +
> + mutex_lock(&kernel_trace_mutex);
> + if (kernel_trace_refcount++)
> + goto end;
> + read_lock(&tasklist_lock);
> + do_each_thread(p, t) {
> + set_tsk_thread_flag(t, TIF_KERNEL_TRACE);
> + } while_each_thread(p, t);
> + read_unlock(&tasklist_lock);
> +end:
> + mutex_unlock(&kernel_trace_mutex);
> +}
> +EXPORT_SYMBOL_GPL(set_kernel_trace_flag_all_tasks);
>
> --
> Mathieu Desnoyers
> OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
--
Mathieu Desnoyers
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
^ permalink raw reply [flat|nested] 28+ messages in thread* Re: [RFC patch 21/21] LTTng Kernel Trace Thread Flag API
2009-03-15 19:04 ` [RFC patch 21/21] LTTng Kernel Trace Thread Flag API Mathieu Desnoyers
2009-03-15 20:03 ` Mathieu Desnoyers
@ 2009-03-15 20:50 ` Frederic Weisbecker
2009-03-15 21:42 ` Mathieu Desnoyers
1 sibling, 1 reply; 28+ messages in thread
From: Frederic Weisbecker @ 2009-03-15 20:50 UTC (permalink / raw)
To: Mathieu Desnoyers; +Cc: Ingo Molnar, akpm, Steven Rostedt, LKML
On Sun, Mar 15, 2009 at 03:04:01PM -0400, Mathieu Desnoyers wrote:
> Add an API to set/clear the kernel wide tracing thread flags. Implemented in
> kernel/sched.c. Updates thread flags *asynchronously* while holding the tasklist
> lock.
>
> Upon fork, the flag must be re-copied while the tasklist lock is held.
>
> Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
> ---
> include/linux/sched.h | 3 ++
> kernel/fork.c | 9 ++++++++
> kernel/sched.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++
> 3 files changed, 67 insertions(+)
>
> Index: linux-2.6-lttng/include/linux/sched.h
> ===================================================================
> --- linux-2.6-lttng.orig/include/linux/sched.h 2009-01-09 18:15:54.000000000 -0500
> +++ linux-2.6-lttng/include/linux/sched.h 2009-01-09 18:17:50.000000000 -0500
> @@ -2300,6 +2300,9 @@ static inline void mm_init_owner(struct
>
> #define TASK_STATE_TO_CHAR_STR "RSDTtZX"
>
> +extern void clear_kernel_trace_flag_all_tasks(void);
> +extern void set_kernel_trace_flag_all_tasks(void);
> +
> #endif /* __KERNEL__ */
>
> #endif
> Index: linux-2.6-lttng/kernel/fork.c
> ===================================================================
> --- linux-2.6-lttng.orig/kernel/fork.c 2009-01-09 18:17:38.000000000 -0500
> +++ linux-2.6-lttng/kernel/fork.c 2009-01-09 18:17:50.000000000 -0500
> @@ -1218,6 +1218,15 @@ static struct task_struct *copy_process(
> !cpu_online(task_cpu(p))))
> set_task_cpu(p, smp_processor_id());
>
> + /*
> + * The state of the parent's TIF_KTRACE flag may have changed
> + * since it was copied in dup_task_struct() so we re-copy it here.
> + */
> + if (test_thread_flag(TIF_KERNEL_TRACE))
> + set_tsk_thread_flag(p, TIF_KERNEL_TRACE);
> + else
> + clear_tsk_thread_flag(p, TIF_KERNEL_TRACE);
> +
I thought about that too. But the thread info is already
copied on a fork right? Which includes the thread flags.
But perhaps I'm wrong and miss one detail about this copy...
> /* CLONE_PARENT re-uses the old parent */
> if (clone_flags & (CLONE_PARENT|CLONE_THREAD))
> p->real_parent = current->real_parent;
> Index: linux-2.6-lttng/kernel/sched.c
> ===================================================================
> --- linux-2.6-lttng.orig/kernel/sched.c 2009-01-09 18:17:38.000000000 -0500
> +++ linux-2.6-lttng/kernel/sched.c 2009-01-09 18:17:50.000000000 -0500
> @@ -9395,3 +9395,58 @@ struct cgroup_subsys cpuacct_subsys = {
> .subsys_id = cpuacct_subsys_id,
> };
> #endif /* CONFIG_CGROUP_CPUACCT */
> +
> +static DEFINE_MUTEX(kernel_trace_mutex);
> +static int kernel_trace_refcount;
> +
> +/**
> + * clear_kernel_trace_flag_all_tasks - clears all TIF_KERNEL_TRACE thread flags.
> + *
> + * This function iterates on all threads in the system to clear their
> + * TIF_KERNEL_TRACE flag. Setting the TIF_KERNEL_TRACE flag with the
> + * tasklist_lock held in copy_process() makes sure that once we finish clearing
> + * the thread flags, all threads have their flags cleared.
> + */
> +void clear_kernel_trace_flag_all_tasks(void)
> +{
> + struct task_struct *p;
> + struct task_struct *t;
> +
> + mutex_lock(&kernel_trace_mutex);
> + if (--kernel_trace_refcount)
> + goto end;
> + read_lock(&tasklist_lock);
> + do_each_thread(p, t) {
> + clear_tsk_thread_flag(t, TIF_KERNEL_TRACE);
> + } while_each_thread(p, t);
> + read_unlock(&tasklist_lock);
> +end:
> + mutex_unlock(&kernel_trace_mutex);
> +}
> +EXPORT_SYMBOL_GPL(clear_kernel_trace_flag_all_tasks);
> +
> +/**
> + * set_kernel_trace_flag_all_tasks - sets all TIF_KERNEL_TRACE thread flags.
> + *
> + * This function iterates on all threads in the system to set their
> + * TIF_KERNEL_TRACE flag. Setting the TIF_KERNEL_TRACE flag with the
> + * tasklist_lock held in copy_process() makes sure that once we finish setting
> + * the thread flags, all threads have their flags set.
> + */
> +void set_kernel_trace_flag_all_tasks(void)
> +{
> + struct task_struct *p;
> + struct task_struct *t;
> +
> + mutex_lock(&kernel_trace_mutex);
> + if (kernel_trace_refcount++)
> + goto end;
> + read_lock(&tasklist_lock);
> + do_each_thread(p, t) {
> + set_tsk_thread_flag(t, TIF_KERNEL_TRACE);
> + } while_each_thread(p, t);
> + read_unlock(&tasklist_lock);
> +end:
> + mutex_unlock(&kernel_trace_mutex);
> +}
> +EXPORT_SYMBOL_GPL(set_kernel_trace_flag_all_tasks);
Speaking about optimizations and latency. If you want to avoid
the overhead of a whole tasklist iteration making any writer spinning on
you, may be you can iterate it using rcu.
But it can be slightly racy in that you could miss a freshly inserted
task while playing with a nano delayed version of the list. So this is not
necessarily a good idea.
>
> --
> Mathieu Desnoyers
> OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
^ permalink raw reply [flat|nested] 28+ messages in thread* Re: [RFC patch 21/21] LTTng Kernel Trace Thread Flag API
2009-03-15 20:50 ` Frederic Weisbecker
@ 2009-03-15 21:42 ` Mathieu Desnoyers
0 siblings, 0 replies; 28+ messages in thread
From: Mathieu Desnoyers @ 2009-03-15 21:42 UTC (permalink / raw)
To: Frederic Weisbecker
Cc: Ingo Molnar, akpm, Steven Rostedt, LKML, Paul E. McKenney
* Frederic Weisbecker (fweisbec@gmail.com) wrote:
> On Sun, Mar 15, 2009 at 03:04:01PM -0400, Mathieu Desnoyers wrote:
> > Add an API to set/clear the kernel wide tracing thread flags. Implemented in
> > kernel/sched.c. Updates thread flags *asynchronously* while holding the tasklist
> > lock.
> >
> > Upon fork, the flag must be re-copied while the tasklist lock is held.
> >
> > Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
> > ---
> > include/linux/sched.h | 3 ++
> > kernel/fork.c | 9 ++++++++
> > kernel/sched.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++
> > 3 files changed, 67 insertions(+)
> >
> > Index: linux-2.6-lttng/include/linux/sched.h
> > ===================================================================
> > --- linux-2.6-lttng.orig/include/linux/sched.h 2009-01-09 18:15:54.000000000 -0500
> > +++ linux-2.6-lttng/include/linux/sched.h 2009-01-09 18:17:50.000000000 -0500
> > @@ -2300,6 +2300,9 @@ static inline void mm_init_owner(struct
> >
> > #define TASK_STATE_TO_CHAR_STR "RSDTtZX"
> >
> > +extern void clear_kernel_trace_flag_all_tasks(void);
> > +extern void set_kernel_trace_flag_all_tasks(void);
> > +
> > #endif /* __KERNEL__ */
> >
> > #endif
> > Index: linux-2.6-lttng/kernel/fork.c
> > ===================================================================
> > --- linux-2.6-lttng.orig/kernel/fork.c 2009-01-09 18:17:38.000000000 -0500
> > +++ linux-2.6-lttng/kernel/fork.c 2009-01-09 18:17:50.000000000 -0500
> > @@ -1218,6 +1218,15 @@ static struct task_struct *copy_process(
> > !cpu_online(task_cpu(p))))
> > set_task_cpu(p, smp_processor_id());
> >
> > + /*
> > + * The state of the parent's TIF_KTRACE flag may have changed
> > + * since it was copied in dup_task_struct() so we re-copy it here.
> > + */
> > + if (test_thread_flag(TIF_KERNEL_TRACE))
> > + set_tsk_thread_flag(p, TIF_KERNEL_TRACE);
> > + else
> > + clear_tsk_thread_flag(p, TIF_KERNEL_TRACE);
> > +
>
>
> I thought about that too. But the thread info is already
> copied on a fork right? Which includes the thread flags.
>
> But perhaps I'm wrong and miss one detail about this copy...
>
If I remember correctly, the copy you are talking about is done before
taking the task list write lock, and therefore races with the task list
read lock we take below.
>
> > /* CLONE_PARENT re-uses the old parent */
> > if (clone_flags & (CLONE_PARENT|CLONE_THREAD))
> > p->real_parent = current->real_parent;
> > Index: linux-2.6-lttng/kernel/sched.c
> > ===================================================================
> > --- linux-2.6-lttng.orig/kernel/sched.c 2009-01-09 18:17:38.000000000 -0500
> > +++ linux-2.6-lttng/kernel/sched.c 2009-01-09 18:17:50.000000000 -0500
> > @@ -9395,3 +9395,58 @@ struct cgroup_subsys cpuacct_subsys = {
> > .subsys_id = cpuacct_subsys_id,
> > };
> > #endif /* CONFIG_CGROUP_CPUACCT */
> > +
> > +static DEFINE_MUTEX(kernel_trace_mutex);
> > +static int kernel_trace_refcount;
> > +
> > +/**
> > + * clear_kernel_trace_flag_all_tasks - clears all TIF_KERNEL_TRACE thread flags.
> > + *
> > + * This function iterates on all threads in the system to clear their
> > + * TIF_KERNEL_TRACE flag. Setting the TIF_KERNEL_TRACE flag with the
> > + * tasklist_lock held in copy_process() makes sure that once we finish clearing
> > + * the thread flags, all threads have their flags cleared.
> > + */
> > +void clear_kernel_trace_flag_all_tasks(void)
> > +{
> > + struct task_struct *p;
> > + struct task_struct *t;
> > +
> > + mutex_lock(&kernel_trace_mutex);
> > + if (--kernel_trace_refcount)
> > + goto end;
> > + read_lock(&tasklist_lock);
> > + do_each_thread(p, t) {
> > + clear_tsk_thread_flag(t, TIF_KERNEL_TRACE);
> > + } while_each_thread(p, t);
> > + read_unlock(&tasklist_lock);
> > +end:
> > + mutex_unlock(&kernel_trace_mutex);
> > +}
> > +EXPORT_SYMBOL_GPL(clear_kernel_trace_flag_all_tasks);
> > +
> > +/**
> > + * set_kernel_trace_flag_all_tasks - sets all TIF_KERNEL_TRACE thread flags.
> > + *
> > + * This function iterates on all threads in the system to set their
> > + * TIF_KERNEL_TRACE flag. Setting the TIF_KERNEL_TRACE flag with the
> > + * tasklist_lock held in copy_process() makes sure that once we finish setting
> > + * the thread flags, all threads have their flags set.
> > + */
> > +void set_kernel_trace_flag_all_tasks(void)
> > +{
> > + struct task_struct *p;
> > + struct task_struct *t;
> > +
> > + mutex_lock(&kernel_trace_mutex);
> > + if (kernel_trace_refcount++)
> > + goto end;
> > + read_lock(&tasklist_lock);
> > + do_each_thread(p, t) {
> > + set_tsk_thread_flag(t, TIF_KERNEL_TRACE);
> > + } while_each_thread(p, t);
> > + read_unlock(&tasklist_lock);
> > +end:
> > + mutex_unlock(&kernel_trace_mutex);
> > +}
> > +EXPORT_SYMBOL_GPL(set_kernel_trace_flag_all_tasks);
>
>
> Speaking about optimizations and latency. If you want to avoid
> the overhead of a whole tasklist iteration making any writer spinning on
> you, may be you can iterate it using rcu.
>
> But it can be slightly racy in that you could miss a freshly inserted
> task while playing with a nano delayed version of the list. So this is not
> necessarily a good idea.
I have not found any good way to do it racelessly with RCU read lock
yet. We'd have to think carefully about it.
Mathieu
>
>
> >
> > --
> > Mathieu Desnoyers
> > OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
>
--
Mathieu Desnoyers
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
^ permalink raw reply [flat|nested] 28+ messages in thread