On 2003.01.25 Davide Libenzi wrote:
>
> I updated the 2.4.20 patch with the changes posted today and I fixed a
> little error about the wait queue function prototype :
>
> http://www.xmailserver.org/linux-patches/sys_epoll-2.4.20-0.61.diff
>
Mixing epoll ontop of current aa, I found this:
#define add_wait_queue_cond(q, wait, cond) \
({ \
unsigned long flags; \
int _raced = 0; \
wq_write_lock_irqsave(&(q)->lock, flags); \
(wait)->flags = 0; \
__add_wait_queue((q), (wait)); \
mb(); \
if (!(cond)) { \
_raced = 1; \
__remove_wait_queue((q), (wait)); \
} \
wq_write_unlock_irqrestore(&(q)->lock, flags); \
_raced; \
})
this is the -aa version. Version from epoll uses just a rmb() barrier
(afaik, just a _read_ barrier). In -aa they are just the same, but I also
use a patch that does this:
+#ifdef CONFIG_X86_MFENCE
+#define mb() __asm__ __volatile__ ("mfence": : :"memory")
+#else
#define mb() __asm__ __volatile__ ("lock; addl $0,0(%%esp)": : :"memory")
+#endif
+
+#ifdef CONFIG_X86_LFENCE
+#define rmb() __asm__ __volatile__ ("lfence": : :"memory")
+#else
#define rmb() mb()
+#endif
so for modern processors they are different, and can affect performance and
correctness. So which one it the correct one for the above code snipet ?
TIA
-- J.A. Magallon <jamagallon@able.es> \ Software is like sex: werewolf.able.es \ It's better when it's free Mandrake Linux release 9.1 (Cooker) for i586 Linux 2.4.21-pre3-jam3 (gcc 3.2.1 (Mandrake Linux 9.1 3.2.1-3mdk)) - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
This archive was generated by hypermail 2b29 : Fri Jan 31 2003 - 22:00:14 EST