Messages in this thread | | | Date | Wed, 30 Sep 2009 17:31:02 +0200 | From | Arjan van de Ven <> | Subject | Re: Linux 2.6.32-rc1 |
| |
On Wed, 30 Sep 2009 17:27:05 +0200 Eric Dumazet <eric.dumazet@gmail.com> wrote: > > > + pop %edi > Why do you pop flags in edi, to later re-push them ? > > > + cli
because here I disable interrupts
(basically this is local_irq_save() ) > > > > + xchg (%esi), %ebx > > + xchg 4(%esi), %ecx > How this sequence is guaranteed to be atomic with other cpus ?
it is not. this is the 486 implementation which is !SMP (just like the current cmpxchg64() fallback)
> > If it is a !SMP implementation, then you could replace xchg by mov > instructions.
that is not equivalent. I need to also store the old values and return them....
> > So I suggest : > > > ENTRY(cmpxchg8b_emu) > CFI_STARTPROC > > /* disable interrupts */ > pushf > cli > > cmpl %eax,(%esi) > jne 1f > cmpl %edx,4(%esi) > jne 2f > > mov %ebx,(%esi) > mov %ecx,4(%esi)
this is not equivalent since you don't return the "prev" value.
-- Arjan van de Ven Intel Open Source Technology Centre For development, discussion and tips for power savings, visit http://www.lesswatts.org
| |