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 | |
| 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>
| -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); |
