Merge branch 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: x86: Clear TS in irq_ts_save() when in an atomic section x86: Detect use of extended APIC ID for AMD CPUs x86: memtest: remove 64-bit division x86, UV: Fix macros for multiple coherency domains x86: Fix non-lazy GS handling in sys_vm86() x86: Add quirk for reboot stalls on a Dell Optiplex 360 x86: Fix UV BAU activation descriptor init
This commit is contained in:
@@ -304,18 +304,18 @@ static inline void kernel_fpu_end(void)
|
||||
/*
|
||||
* Some instructions like VIA's padlock instructions generate a spurious
|
||||
* DNA fault but don't modify SSE registers. And these instructions
|
||||
* get used from interrupt context aswell. To prevent these kernel instructions
|
||||
* in interrupt context interact wrongly with other user/kernel fpu usage, we
|
||||
* get used from interrupt context as well. To prevent these kernel instructions
|
||||
* in interrupt context interacting wrongly with other user/kernel fpu usage, we
|
||||
* should use them only in the context of irq_ts_save/restore()
|
||||
*/
|
||||
static inline int irq_ts_save(void)
|
||||
{
|
||||
/*
|
||||
* If we are in process context, we are ok to take a spurious DNA fault.
|
||||
* Otherwise, doing clts() in process context require pre-emption to
|
||||
* be disabled or some heavy lifting like kernel_fpu_begin()
|
||||
* If in process context and not atomic, we can take a spurious DNA fault.
|
||||
* Otherwise, doing clts() in process context requires disabling preemption
|
||||
* or some heavy lifting like kernel_fpu_begin()
|
||||
*/
|
||||
if (!in_interrupt())
|
||||
if (!in_atomic())
|
||||
return 0;
|
||||
|
||||
if (read_cr0() & X86_CR0_TS) {
|
||||
|
Reference in New Issue
Block a user