--- 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);