On Thu, 24 Mar 2011, Pekka Enberg wrote: > > I forced the fallback to the _emu function to occur but could not trigger > > the bug in kvm. > > That's not the problem. I'm sure the fallback is just fine. What I'm > saying is that the fallback is *not patched* to kernel text on Ingo's > machines because alternative_instructions() happens late in the boot! > So the problem is that on Ingo's boxes (that presumably have old AMD > CPUs) we execute cmpxchg16b, not the fallback code. But then we would get the bug in kmem_cache_alloc() and not in the *_emu() function. So the _emu is executing but failing on Ingo's system but not on mine. Question is why. For some reason the first reference to %gs:(%rsi) wont work right on his system: >From arch/x86/lib/cmpxchg16b_emu # # Emulate 'cmpxchg16b %gs:(%rsi)' except we return the result in %al not # via the ZF. Caller will access %al to get result. # # Note that this is only useful for a cpuops operation. Meaning that we # do *not* have a fully atomic operation but just an operation that is # *atomic* on a single cpu (as provided by the this_cpu_xx class of # macros). # this_cpu_cmpxchg16b_emu: pushf cli cmpq %gs:(%rsi), %rax jne not_same cmpq %gs:8(%rsi), %rdx jne not_same movq %rbx, %gs:(%rsi) movq %rcx, %gs:8(%rsi) popf mov $1, %al ret not_same: popf xor %al,%al ret CFI_ENDPROC -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxxx For more info on Linux MM, see: http://www.linux-mm.org/ . Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/ Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>