Add a warning in case a debug store context is not removed before the task it is attached to is freed. Remove the old warning at thread exit. It is too early. Signed-off-by: Markus Metzger --- arch/x86/include/asm/ds.h | 8 6 + 2 - 0 ! arch/x86/include/asm/processor.h | 2 1 + 1 - 0 ! arch/x86/kernel/ds.c | 4 0 + 4 - 0 ! arch/x86/kernel/process.c | 5 3 + 2 - 0 ! 4 files changed, 10 insertions(+), 9 deletions(-) Index: b/arch/x86/kernel/ds.c =================================================================== --- a/arch/x86/kernel/ds.c +++ b/arch/x86/kernel/ds.c @@ -1380,10 +1380,6 @@ void ds_copy_thread(struct task_struct * tsk->thread.ds_ctx = NULL; } -void ds_exit_thread(struct task_struct *tsk) -{ -} - static __init int ds_selftest(void) { if (ds_cfg.sizeof_rec[ds_bts]) { Index: b/arch/x86/include/asm/ds.h =================================================================== --- a/arch/x86/include/asm/ds.h +++ b/arch/x86/include/asm/ds.h @@ -23,6 +23,7 @@ #define _ASM_X86_DS_H +#include #include #include #include @@ -289,7 +290,10 @@ extern void ds_switch_to(struct task_str * Task clone/init and cleanup work */ extern void ds_copy_thread(struct task_struct *tsk, struct task_struct *father); -extern void ds_exit_thread(struct task_struct *tsk); +static inline void ds_warn_leak(struct task_struct *tsk) +{ + WARN(tsk->thread.ds_ctx, "leaking DS context\n"); +} #else /* CONFIG_X86_DS */ @@ -299,7 +303,7 @@ static inline void ds_switch_to(struct t struct task_struct *next) {} static inline void ds_copy_thread(struct task_struct *tsk, struct task_struct *father) {} -static inline void ds_exit_thread(struct task_struct *tsk) {} +static inline void ds_warn_leak(struct task_struct *tsk) {} #endif /* CONFIG_X86_DS */ #endif /* _ASM_X86_DS_H */ Index: b/arch/x86/kernel/process.c =================================================================== --- a/arch/x86/kernel/process.c +++ b/arch/x86/kernel/process.c @@ -14,6 +14,7 @@ #include #include #include +#include unsigned long idle_halt; EXPORT_SYMBOL(idle_halt); @@ -45,6 +46,8 @@ void free_thread_xstate(struct task_stru kmem_cache_free(task_xstate_cachep, tsk->thread.xstate); tsk->thread.xstate = NULL; } + + ds_warn_leak(tsk); } void free_thread_info(struct thread_info *ti) @@ -82,8 +85,6 @@ void exit_thread(void) t->io_bitmap_max = 0; put_cpu(); } - - ds_exit_thread(current); } void flush_thread(void) Index: b/arch/x86/include/asm/processor.h =================================================================== --- a/arch/x86/include/asm/processor.h +++ b/arch/x86/include/asm/processor.h @@ -6,6 +6,7 @@ /* Forward declaration, a strange C thing */ struct task_struct; struct mm_struct; +struct ds_context; #include #include @@ -21,7 +22,6 @@ struct mm_struct; #include #include #include -#include #include #include --