lkml.org 
[lkml]   [2007]   [Jul]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [RFC/PATCH] debug workqueue deadlocks with lockdep

    * Johannes Berg <johannes@sipsolutions.net> wrote:

    > > > +#define create_workqueue(name) \
    > > > +({ \
    > > > + static struct lock_class_key __key; \
    > > > + struct workqueue_struct *__wq; \
    > > > + \
    > > > + __wq = __create_workqueue((name), 0, 0, &__key); \
    > > > + __wq; \
    > > > +})
    > >
    > > Why do we need __wq ?
    >
    > No particular reason I think, I copied some other code doing it that
    > way.

    yep, should be fine doing this:

    #define create_workqueue(name) \
    ({ \
    static struct lock_class_key __key; \
    \
    __create_workqueue((name), 0, 0, &__key); \
    })

    (and the return value of __create_workqueue() will be the 'return value'
    of the macro as well.)

    > > + extern struct workqueue_struct *__create_workqueue_key(..., key);
    > > + #define __create_workqueue(...) \
    > > + static struct lock_class_key __key; \
    > > + __create_workqueue_key(..., key); \
    > >
    > > but this is a matter of taste.

    the above macro should at minimum be encapsulated with
    do { ... } while (0) so that __create_workqueue() is a single C
    statement.

    Ingo
    -
    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/

    \
     
     \ /
      Last update: 2007-07-04 14:27    [W:0.024 / U:1.756 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site