--- 2.4.20rc1aa2/fs/select.c.~1~ Sat Nov 9 08:56:49 2002 +++ 2.4.20rc1aa2/fs/select.c Sat Nov 9 09:06:38 2002 @@ -100,6 +100,7 @@ void __pollwait(struct file * filp, wait entry->wait_address = wait_address; init_waitqueue_entry(&entry->wait, current); add_wait_queue(wait_address,&entry->wait); + smp_mb(); } } --- 2.4.20rc1aa2/net/ipv4/tcp.c.~1~ Sat Nov 9 08:56:59 2002 +++ 2.4.20rc1aa2/net/ipv4/tcp.c Sat Nov 9 09:12:32 2002 @@ -447,6 +447,7 @@ unsigned int tcp_poll(struct file * file * wspace test but before the flags are set, * IO signal will be lost. */ + smp_mb__after_clear_bit(); /* should work for set_bit too */ if (tcp_wspace(sk) >= tcp_min_write_space(sk)) mask |= POLLOUT | POLLWRNORM; } --- 2.4.20rc1aa2/net/unix/af_unix.c.~1~ Sat Nov 2 19:45:49 2002 +++ 2.4.20rc1aa2/net/unix/af_unix.c Sat Nov 9 09:50:00 2002 @@ -298,6 +298,7 @@ static void unix_write_space(struct sock { read_lock(&sk->callback_lock); if (unix_writable(sk)) { + smp_mb(); if (sk->sleep && waitqueue_active(sk->sleep)) wake_up_interruptible(sk->sleep); sk_wake_async(sk, 2, POLL_OUT);