lkml.org 
[lkml]   [2010]   [May]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [PATCH] epoll: use wrapper functions
    On Thu, 6 May 2010, Changli Gao wrote:

    > use wrapper functions.
    >
    > epoll should not touch flags in wait_queue_t. This patch introduces a new
    > function add_wait_queue_head_exclusive_locked(), for the users, who use
    > wait queue as a LIFO queue.

    Since we already have __add_wait_queue(), __add_wait_queue_tail() and
    __remove_wait_queue() (which all means "locked"), and while I agree in
    having the exclusive-add wrapped into a function, I much better prefer a:

    static inline void __add_wait_queue_excl(wait_queue_head_t *head,
    wait_queue_t *new)
    {
    new->flags |= WQ_FLAG_EXCLUSIVE;
    __add_wait_queue(head, new);
    }

    The patch you posted introduces a different naming, which leaves all the
    other __*() untouched, and wraps the already one-liner __remove_wait_queue()
    with yet another one-liner.





    > Signed-off-by: Changli Gao <xiaosuo@gmail.com>
    > ----
    > fs/eventpoll.c | 5 ++---
    > include/linux/wait.h | 15 +++++++++++++--
    > 2 files changed, 15 insertions(+), 5 deletions(-)
    > diff --git a/fs/eventpoll.c b/fs/eventpoll.c
    > index bd056a5..8137f6e 100644
    > --- a/fs/eventpoll.c
    > +++ b/fs/eventpoll.c
    > @@ -1140,8 +1140,7 @@ retry:
    > * ep_poll_callback() when events will become available.
    > */
    > init_waitqueue_entry(&wait, current);
    > - wait.flags |= WQ_FLAG_EXCLUSIVE;
    > - __add_wait_queue(&ep->wq, &wait);
    > + add_wait_queue_head_exclusive_locked(&ep->wq, &wait);
    >
    > for (;;) {
    > /*
    > @@ -1161,7 +1160,7 @@ retry:
    > jtimeout = schedule_timeout(jtimeout);
    > spin_lock_irqsave(&ep->lock, flags);
    > }
    > - __remove_wait_queue(&ep->wq, &wait);
    > + remove_wait_queue_locked(&ep->wq, &wait);
    >
    > set_current_state(TASK_RUNNING);
    > }
    > diff --git a/include/linux/wait.h b/include/linux/wait.h
    > index a48e16b..de2566d 100644
    > --- a/include/linux/wait.h
    > +++ b/include/linux/wait.h
    > @@ -407,17 +407,28 @@ do { \
    > * Must be called with the spinlock in the wait_queue_head_t held.
    > */
    > static inline void add_wait_queue_exclusive_locked(wait_queue_head_t *q,
    > - wait_queue_t * wait)
    > + wait_queue_t *wait)
    > {
    > wait->flags |= WQ_FLAG_EXCLUSIVE;
    > __add_wait_queue_tail(q, wait);
    > }
    >
    > /*
    > + * Must be called with the spinlock in the wait_queue_head_t held, and
    > + * q must be for exclusive wait only.
    > + */
    > +static inline void add_wait_queue_head_exclusive_locked(wait_queue_head_t *q,
    > + wait_queue_t *wait)
    > +{
    > + wait->flags |= WQ_FLAG_EXCLUSIVE;
    > + __add_wait_queue(q, wait);
    > +}
    > +
    > +/*
    > * Must be called with the spinlock in the wait_queue_head_t held.
    > */
    > static inline void remove_wait_queue_locked(wait_queue_head_t *q,
    > - wait_queue_t * wait)
    > + wait_queue_t *wait)
    > {
    > __remove_wait_queue(q, wait);
    > }
    > --
    > 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/
    >


    - Davide




    \
     
     \ /
      Last update: 2010-05-06 20:49    [W:0.025 / U:32.864 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site