On Sat, Aug 09, 2008 at 07:37:27AM -0700, Herbert Xu wrote:No. Here is the case that can fail on 2.6.25 aswell. 0. CPU's TS flag is set 1. kernel using FPU in some optimized copy routine and while doing kernel_fpu_begin() takes an interrupt just before doing clts() 2. Takes an interrupt and ipsec uses padlock instruction. And we take a DNA fault as TS flag is still set. 3. We handle the DNA fault and set TS_USEDFPU and clear cr0.ts 4. We complete the padlock routine 5. Go back to step-1, which resumes clts() in kernel_fpu_begin(), finishes the optimized copy routine and does kernel_fpu_end(). At this point, we have cr0.ts again set to '1' but the task's TS_USEFPU is stilll set and not cleared. 6. Now kernel resumes its user operation. And at the next context switch, kernel sees it has do a FP save as TS_USEDFPU is still set and then will do a unlazy_fpu() in __switch_to(). unlazy_fpu() will take a DNA fault, as cr0.ts is '1' and now, because we are in __switch_to(), math_state_restore() will get confused and will restore the next task's FP state and will save it in prev tasks's FP state. Remember, in __switch_to() we are already on the stack of the next task but take a DNA fault for the prev task. This causes the fpu leakage. We didn't encounter this so far on via platforms because we don't have any optimized routines that use FP/SSE in the kernel? thanks, suresh -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
| Max Krasnyansky | Re: Inquiry: Should we remove "isolcpus= kernel boot option? (may have realtime us... |
| Jeremy Allison | Re: [RFC] Heads up on sys_fallocate() |
| Randy Dunlap | Re: -mm merge plans for 2.6.23 (pcmcia) |
| Damien Wyart | ACPI power off regression in 2.6.23-rc8 (NOT in rc7) |
git: | |
| Josip Rodin | Re: bnx2_poll panicking kernel |
| Linus Torvalds | Re: [GIT]: Networking |
| Denys Fedoryshchenko | thousands of classes, e1000 TX unit hang |
