Messages in this thread |  | | | Date | Mon, 29 Jun 2009 19:47:20 +0200 | | From | Jarek Poplawski <> | | Subject | Re: [PATCH 1/2] net: adding memory barrier to the poll and receive callbacks |
| |
On Mon, Jun 29, 2009 at 04:14:45PM +0200, Jiri Olsa wrote: ... > +/** > + * sk_has_sleeper - check if there are any waiting processes > + * @sk: socket > + * > + * Returns true if socket has waiting processes > + */ > +static inline int sk_has_sleeper(struct sock *sk) > +{ > + /* > + * We need to be sure we are in sync with the > + * add_wait_queue modifications to the wait queue. > + * > + * This memory barrier is paired in the sock_poll_wait. > + */ > + smp_mb(); > + return sk->sk_sleep && waitqueue_active(sk->sk_sleep); > +} > +
Btw. I hope Jiri won't "listen" to me, but I can't stop to mention sock_waitqueue_active() looks to me quite naturally better paired with sock_poll_wait() than sk_has_sleeper(which otherwise is more conspicuous, sorry Eric.)
Jarek P.
> +/** > + * sock_poll_wait - place memory barrier behind the __poll_wait call. > + * @filp: file > + * @sk: socket > + * @p: poll_table > + */ > +static inline void sock_poll_wait(struct file *filp, struct sock *sk, > + poll_table *p) > +{ > + if (p && sk->sk_sleep) { > + __poll_wait(filp, sk->sk_sleep, p); > + /* > + * We need to be sure we are in sync with the > + * socket flags modification. > + * > + * This memory barrier is paired in the sk_has_sleeper. > + */ > + smp_mb(); > + } > +}
|  |