lkml.org 
[lkml]   [2009]   [Jun]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [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();
    > + }
    > +}


    \
     
     \ /
      Last update: 2009-06-29 19:49    [W:0.022 / U:66.060 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site