@ -184,13 +184,17 @@ static inline unsigned int work_static(struct work_struct *work) { return 0; }
# define work_clear_pending(work) \
clear_bit ( WORK_STRUCT_PENDING , work_data_bits ( work ) )
enum {
WQ_FREEZEABLE = 1 < < 0 , /* freeze during suspend */
WQ_SINGLE_THREAD = 1 < < 1 , /* no per-cpu worker */
} ;
extern struct workqueue_struct *
__create_workqueue_key ( const char * name , int singlethread , int freezeable ,
__create_workqueue_key ( const char * name , unsigned int flags ,
struct lock_class_key * key , const char * lock_name ) ;
# ifdef CONFIG_LOCKDEP
# define __create_workqueue(name, singlethread, freezeable) \
# define __create_workqueue(name, flags) \
( { \
static struct lock_class_key __key ; \
const char * __lock_name ; \
@ -200,19 +204,20 @@ __create_workqueue_key(const char *name, int singlethread, int freezeable,
else \
__lock_name = # name ; \
\
__create_workqueue_key ( ( name ) , ( singlethread ) , \
( freezeable ) , & __key , \
__create_workqueue_key ( ( name ) , ( flags ) , & __key , \
__lock_name ) ; \
} )
# else
# define __create_workqueue(name, singlethread, freezeable) \
__create_workqueue_key ( ( name ) , ( singlethread ) , ( freezeable ) , \
NULL , NULL )
# define __create_workqueue(name, flags) \
__create_workqueue_key ( ( name ) , ( flags ) , NULL , NULL )
# endif
# define create_workqueue(name) __create_workqueue((name), 0, 0)
# define create_freezeable_workqueue(name) __create_workqueue((name), 1, 1)
# define create_singlethread_workqueue(name) __create_workqueue((name), 1, 0)
# define create_workqueue(name) \
__create_workqueue ( ( name ) , 0 )
# define create_freezeable_workqueue(name) \
__create_workqueue ( ( name ) , WQ_FREEZEABLE | WQ_SINGLE_THREAD )
# define create_singlethread_workqueue(name) \
__create_workqueue ( ( name ) , WQ_SINGLE_THREAD )
extern void destroy_workqueue ( struct workqueue_struct * wq ) ;