lkml.org 
[lkml]   [2011]   [Mar]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [GIT PULL] SLAB changes for v2.6.39-rc1
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






\
 
 \ /
  Last update: 2011-03-24 19:17    [W:0.088 / U:0.152 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site