diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2009-03-16 08:07:21 -0400 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2009-03-16 10:32:28 -0400 |
commit | 250981e6e1ef04947eccaa55e8c25ddcaa47a02e (patch) | |
tree | 0c6f576501be490b495d7e274f71f1e2903de662 /arch | |
parent | 0f3fa48a7eaf5d1118cfda1650e8c759b2a116e4 (diff) |
x86: reduce preemption off section in exit thread
Impact: latency improvement
No need to keep preemption disabled over the kfree call.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/x86/kernel/process.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c index 6afa5232dbb7..156f87582c6c 100644 --- a/arch/x86/kernel/process.c +++ b/arch/x86/kernel/process.c | |||
@@ -65,11 +65,11 @@ void exit_thread(void) | |||
65 | { | 65 | { |
66 | struct task_struct *me = current; | 66 | struct task_struct *me = current; |
67 | struct thread_struct *t = &me->thread; | 67 | struct thread_struct *t = &me->thread; |
68 | unsigned long *bp = t->io_bitmap_ptr; | ||
68 | 69 | ||
69 | if (me->thread.io_bitmap_ptr) { | 70 | if (bp) { |
70 | struct tss_struct *tss = &per_cpu(init_tss, get_cpu()); | 71 | struct tss_struct *tss = &per_cpu(init_tss, get_cpu()); |
71 | 72 | ||
72 | kfree(t->io_bitmap_ptr); | ||
73 | t->io_bitmap_ptr = NULL; | 73 | t->io_bitmap_ptr = NULL; |
74 | clear_thread_flag(TIF_IO_BITMAP); | 74 | clear_thread_flag(TIF_IO_BITMAP); |
75 | /* | 75 | /* |
@@ -78,6 +78,7 @@ void exit_thread(void) | |||
78 | memset(tss->io_bitmap, 0xff, t->io_bitmap_max); | 78 | memset(tss->io_bitmap, 0xff, t->io_bitmap_max); |
79 | t->io_bitmap_max = 0; | 79 | t->io_bitmap_max = 0; |
80 | put_cpu(); | 80 | put_cpu(); |
81 | kfree(bp); | ||
81 | } | 82 | } |
82 | 83 | ||
83 | ds_exit_thread(current); | 84 | ds_exit_thread(current); |