[PATCH] x86-64: Remove disable_tsc code in context switch
It only offers extremly dubious security advantages and is not worth the overhead in this critical path. Signed-off-by: Andi Kleen <ak@suse.de> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
committed by
Linus Torvalds
parent
fe5d5f073e
commit
083044e63b
@@ -486,33 +486,6 @@ out:
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* This function selects if the context switch from prev to next
|
|
||||||
* has to tweak the TSC disable bit in the cr4.
|
|
||||||
*/
|
|
||||||
static inline void disable_tsc(struct task_struct *prev_p,
|
|
||||||
struct task_struct *next_p)
|
|
||||||
{
|
|
||||||
struct thread_info *prev, *next;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* gcc should eliminate the ->thread_info dereference if
|
|
||||||
* has_secure_computing returns 0 at compile time (SECCOMP=n).
|
|
||||||
*/
|
|
||||||
prev = prev_p->thread_info;
|
|
||||||
next = next_p->thread_info;
|
|
||||||
|
|
||||||
if (has_secure_computing(prev) || has_secure_computing(next)) {
|
|
||||||
/* slow path here */
|
|
||||||
if (has_secure_computing(prev) &&
|
|
||||||
!has_secure_computing(next)) {
|
|
||||||
write_cr4(read_cr4() & ~X86_CR4_TSD);
|
|
||||||
} else if (!has_secure_computing(prev) &&
|
|
||||||
has_secure_computing(next))
|
|
||||||
write_cr4(read_cr4() | X86_CR4_TSD);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This special macro can be used to load a debugging register
|
* This special macro can be used to load a debugging register
|
||||||
*/
|
*/
|
||||||
@@ -631,8 +604,6 @@ struct task_struct *__switch_to(struct task_struct *prev_p, struct task_struct *
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
disable_tsc(prev_p, next_p);
|
|
||||||
|
|
||||||
return prev_p;
|
return prev_p;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user