* Johannes Berg [off-list ref] wrote:
quoted
quoted
+#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.)
quoted
+ 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