Re: Linux 2.6.32-rc1

From: Arjan van de Ven
Date: Wed Sep 30 2009 - 11:30:51 EST


On Wed, 30 Sep 2009 17:27:05 +0200
Eric Dumazet <eric.dumazet@xxxxxxxxx> 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
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/