aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/x86/include/asm/ds.h9
-rw-r--r--arch/x86/include/asm/processor.h4
-rw-r--r--arch/x86/kernel/ds.c10
-rw-r--r--arch/x86/kernel/process.c5
-rw-r--r--arch/x86/kernel/process_32.c3
-rw-r--r--arch/x86/kernel/process_64.c3
6 files changed, 8 insertions, 26 deletions
diff --git a/arch/x86/include/asm/ds.h b/arch/x86/include/asm/ds.h
index 413e127e567d..149e5208e967 100644
--- a/arch/x86/include/asm/ds.h
+++ b/arch/x86/include/asm/ds.h
@@ -285,21 +285,12 @@ extern void __cpuinit ds_init_intel(struct cpuinfo_x86 *);
285 */ 285 */
286extern void ds_switch_to(struct task_struct *prev, struct task_struct *next); 286extern void ds_switch_to(struct task_struct *prev, struct task_struct *next);
287 287
288/*
289 * Task clone/init and cleanup work
290 */
291extern void ds_copy_thread(struct task_struct *tsk, struct task_struct *father);
292extern void ds_exit_thread(struct task_struct *tsk);
293
294#else /* CONFIG_X86_DS */ 288#else /* CONFIG_X86_DS */
295 289
296struct cpuinfo_x86; 290struct cpuinfo_x86;
297static inline void __cpuinit ds_init_intel(struct cpuinfo_x86 *ignored) {} 291static inline void __cpuinit ds_init_intel(struct cpuinfo_x86 *ignored) {}
298static inline void ds_switch_to(struct task_struct *prev, 292static inline void ds_switch_to(struct task_struct *prev,
299 struct task_struct *next) {} 293 struct task_struct *next) {}
300static inline void ds_copy_thread(struct task_struct *tsk,
301 struct task_struct *father) {}
302static inline void ds_exit_thread(struct task_struct *tsk) {}
303 294
304#endif /* CONFIG_X86_DS */ 295#endif /* CONFIG_X86_DS */
305#endif /* _ASM_X86_DS_H */ 296#endif /* _ASM_X86_DS_H */
diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
index 1efeb497f1f9..7c39de7e709a 100644
--- a/arch/x86/include/asm/processor.h
+++ b/arch/x86/include/asm/processor.h
@@ -454,10 +454,8 @@ struct thread_struct {
454 unsigned io_bitmap_max; 454 unsigned io_bitmap_max;
455/* MSR_IA32_DEBUGCTLMSR value to switch in if TIF_DEBUGCTLMSR is set. */ 455/* MSR_IA32_DEBUGCTLMSR value to switch in if TIF_DEBUGCTLMSR is set. */
456 unsigned long debugctlmsr; 456 unsigned long debugctlmsr;
457#ifdef CONFIG_X86_DS 457 /* Debug Store context; see asm/ds.h */
458/* Debug Store context; see include/asm-x86/ds.h; goes into MSR_IA32_DS_AREA */
459 struct ds_context *ds_ctx; 458 struct ds_context *ds_ctx;
460#endif /* CONFIG_X86_DS */
461}; 459};
462 460
463static inline unsigned long native_get_debugreg(int regno) 461static inline unsigned long native_get_debugreg(int regno)
diff --git a/arch/x86/kernel/ds.c b/arch/x86/kernel/ds.c
index 21a3852abf68..71cab3b62dce 100644
--- a/arch/x86/kernel/ds.c
+++ b/arch/x86/kernel/ds.c
@@ -1352,16 +1352,6 @@ void ds_switch_to(struct task_struct *prev, struct task_struct *next)
1352 update_debugctlmsr(debugctlmsr); 1352 update_debugctlmsr(debugctlmsr);
1353} 1353}
1354 1354
1355void ds_copy_thread(struct task_struct *tsk, struct task_struct *father)
1356{
1357 clear_tsk_thread_flag(tsk, TIF_DS_AREA_MSR);
1358 tsk->thread.ds_ctx = NULL;
1359}
1360
1361void ds_exit_thread(struct task_struct *tsk)
1362{
1363}
1364
1365static __init int ds_selftest(void) 1355static __init int ds_selftest(void)
1366{ 1356{
1367 if (ds_cfg.sizeof_rec[ds_bts]) { 1357 if (ds_cfg.sizeof_rec[ds_bts]) {
diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c
index ca989158e847..fb5dfb891f0f 100644
--- a/arch/x86/kernel/process.c
+++ b/arch/x86/kernel/process.c
@@ -14,6 +14,7 @@
14#include <asm/idle.h> 14#include <asm/idle.h>
15#include <asm/uaccess.h> 15#include <asm/uaccess.h>
16#include <asm/i387.h> 16#include <asm/i387.h>
17#include <asm/ds.h>
17 18
18unsigned long idle_halt; 19unsigned long idle_halt;
19EXPORT_SYMBOL(idle_halt); 20EXPORT_SYMBOL(idle_halt);
@@ -45,6 +46,8 @@ void free_thread_xstate(struct task_struct *tsk)
45 kmem_cache_free(task_xstate_cachep, tsk->thread.xstate); 46 kmem_cache_free(task_xstate_cachep, tsk->thread.xstate);
46 tsk->thread.xstate = NULL; 47 tsk->thread.xstate = NULL;
47 } 48 }
49
50 WARN(tsk->thread.ds_ctx, "leaking DS context\n");
48} 51}
49 52
50void free_thread_info(struct thread_info *ti) 53void free_thread_info(struct thread_info *ti)
@@ -83,8 +86,6 @@ void exit_thread(void)
83 put_cpu(); 86 put_cpu();
84 kfree(bp); 87 kfree(bp);
85 } 88 }
86
87 ds_exit_thread(current);
88} 89}
89 90
90void flush_thread(void) 91void flush_thread(void)
diff --git a/arch/x86/kernel/process_32.c b/arch/x86/kernel/process_32.c
index 76f8f84043a2..b5e4bfef4472 100644
--- a/arch/x86/kernel/process_32.c
+++ b/arch/x86/kernel/process_32.c
@@ -290,7 +290,8 @@ int copy_thread(unsigned long clone_flags, unsigned long sp,
290 p->thread.io_bitmap_max = 0; 290 p->thread.io_bitmap_max = 0;
291 } 291 }
292 292
293 ds_copy_thread(p, current); 293 clear_tsk_thread_flag(p, TIF_DS_AREA_MSR);
294 p->thread.ds_ctx = NULL;
294 295
295 clear_tsk_thread_flag(p, TIF_DEBUGCTLMSR); 296 clear_tsk_thread_flag(p, TIF_DEBUGCTLMSR);
296 p->thread.debugctlmsr = 0; 297 p->thread.debugctlmsr = 0;
diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c
index b751a41392b1..5a1a1de292ec 100644
--- a/arch/x86/kernel/process_64.c
+++ b/arch/x86/kernel/process_64.c
@@ -335,7 +335,8 @@ int copy_thread(unsigned long clone_flags, unsigned long sp,
335 goto out; 335 goto out;
336 } 336 }
337 337
338 ds_copy_thread(p, me); 338 clear_tsk_thread_flag(p, TIF_DS_AREA_MSR);
339 p->thread.ds_ctx = NULL;
339 340
340 clear_tsk_thread_flag(p, TIF_DEBUGCTLMSR); 341 clear_tsk_thread_flag(p, TIF_DEBUGCTLMSR);
341 p->thread.debugctlmsr = 0; 342 p->thread.debugctlmsr = 0;