@ -395,7 +395,7 @@ int wake_bit_function(struct wait_queue_entry *wq_entry, unsigned mode, int sync
{
struct wait_bit_key * key = arg ;
struct wait_bit_queue * wait_bit
= container_of ( wq_entry , struct wait_bit_queue , wait ) ;
= container_of ( wq_entry , struct wait_bit_queue , wq_entry ) ;
if ( wait_bit - > key . flags ! = key - > flags | |
wait_bit - > key . bit_nr ! = key - > bit_nr | |
@ -418,11 +418,11 @@ __wait_on_bit(struct wait_queue_head *wq_head, struct wait_bit_queue *q,
int ret = 0 ;
do {
prepare_to_wait ( wq_head , & q - > wait , mode ) ;
prepare_to_wait ( wq_head , & q - > wq_entry , mode ) ;
if ( test_bit ( q - > key . bit_nr , q - > key . flags ) )
ret = ( * action ) ( & q - > key , mode ) ;
} while ( test_bit ( q - > key . bit_nr , q - > key . flags ) & & ! ret ) ;
finish_wait ( wq_head , & q - > wait ) ;
finish_wait ( wq_head , & q - > wq_entry ) ;
return ret ;
}
EXPORT_SYMBOL ( __wait_on_bit ) ;
@ -431,9 +431,9 @@ int __sched out_of_line_wait_on_bit(void *word, int bit,
wait_bit_action_f * action , unsigned mode )
{
struct wait_queue_head * wq_head = bit_waitqueue ( word , bit ) ;
DEFINE_WAIT_BIT ( wait , word , bit ) ;
DEFINE_WAIT_BIT ( wq_entry , word , bit ) ;
return __wait_on_bit ( wq_head , & wait , action , mode ) ;
return __wait_on_bit ( wq_head , & wq_entry , action , mode ) ;
}
EXPORT_SYMBOL ( out_of_line_wait_on_bit ) ;
@ -442,10 +442,10 @@ int __sched out_of_line_wait_on_bit_timeout(
unsigned mode , unsigned long timeout )
{
struct wait_queue_head * wq_head = bit_waitqueue ( word , bit ) ;
DEFINE_WAIT_BIT ( wait , word , bit ) ;
DEFINE_WAIT_BIT ( wq_entry , word , bit ) ;
wait . key . timeout = jiffies + timeout ;
return __wait_on_bit ( wq_head , & wait , action , mode ) ;
wq_entry . key . timeout = jiffies + timeout ;
return __wait_on_bit ( wq_head , & wq_entry , action , mode ) ;
}
EXPORT_SYMBOL_GPL ( out_of_line_wait_on_bit_timeout ) ;
@ -456,7 +456,7 @@ __wait_on_bit_lock(struct wait_queue_head *wq_head, struct wait_bit_queue *q,
int ret = 0 ;
for ( ; ; ) {
prepare_to_wait_exclusive ( wq_head , & q - > wait , mode ) ;
prepare_to_wait_exclusive ( wq_head , & q - > wq_entry , mode ) ;
if ( test_bit ( q - > key . bit_nr , q - > key . flags ) ) {
ret = action ( & q - > key , mode ) ;
/*
@ -466,11 +466,11 @@ __wait_on_bit_lock(struct wait_queue_head *wq_head, struct wait_bit_queue *q,
* smp_mb__after_atomic ( ) before wake_up_page ( ) .
*/
if ( ret )
finish_wait ( wq_head , & q - > wait ) ;
finish_wait ( wq_head , & q - > wq_entry ) ;
}
if ( ! test_and_set_bit ( q - > key . bit_nr , q - > key . flags ) ) {
if ( ! ret )
finish_wait ( wq_head , & q - > wait ) ;
finish_wait ( wq_head , & q - > wq_entry ) ;
return 0 ;
} else if ( ret ) {
return ret ;
@ -483,9 +483,9 @@ int __sched out_of_line_wait_on_bit_lock(void *word, int bit,
wait_bit_action_f * action , unsigned mode )
{
struct wait_queue_head * wq_head = bit_waitqueue ( word , bit ) ;
DEFINE_WAIT_BIT ( wait , word , bit ) ;
DEFINE_WAIT_BIT ( wq_entry , word , bit ) ;
return __wait_on_bit_lock ( wq_head , & wait , action , mode ) ;
return __wait_on_bit_lock ( wq_head , & wq_entry , action , mode ) ;
}
EXPORT_SYMBOL ( out_of_line_wait_on_bit_lock ) ;
@ -538,8 +538,7 @@ static int wake_atomic_t_function(struct wait_queue_entry *wq_entry, unsigned mo
void * arg )
{
struct wait_bit_key * key = arg ;
struct wait_bit_queue * wait_bit
= container_of ( wq_entry , struct wait_bit_queue , wait ) ;
struct wait_bit_queue * wait_bit = container_of ( wq_entry , struct wait_bit_queue , wq_entry ) ;
atomic_t * val = key - > flags ;
if ( wait_bit - > key . flags ! = key - > flags | |
@ -562,24 +561,24 @@ int __wait_on_atomic_t(struct wait_queue_head *wq_head, struct wait_bit_queue *q
int ret = 0 ;
do {
prepare_to_wait ( wq_head , & q - > wait , mode ) ;
prepare_to_wait ( wq_head , & q - > wq_entry , mode ) ;
val = q - > key . flags ;
if ( atomic_read ( val ) = = 0 )
break ;
ret = ( * action ) ( val ) ;
} while ( ! ret & & atomic_read ( val ) ! = 0 ) ;
finish_wait ( wq_head , & q - > wait ) ;
finish_wait ( wq_head , & q - > wq_entry ) ;
return ret ;
}
# define DEFINE_WAIT_ATOMIC_T(name, p) \
struct wait_bit_queue name = { \
. key = __WAIT_ATOMIC_T_KEY_INITIALIZER ( p ) , \
. wait = { \
. wq_entry = { \
. private = current , \
. func = wake_atomic_t_function , \
. task_list = \
LIST_HEAD_INIT ( ( name ) . wait . task_list ) , \
LIST_HEAD_INIT ( ( name ) . wq_entry . task_list ) , \
} , \
}
@ -587,9 +586,9 @@ __sched int out_of_line_wait_on_atomic_t(atomic_t *p, int (*action)(atomic_t *),
unsigned mode )
{
struct wait_queue_head * wq_head = atomic_t_waitqueue ( p ) ;
DEFINE_WAIT_ATOMIC_T ( wait , p ) ;
DEFINE_WAIT_ATOMIC_T ( wq_entry , p ) ;
return __wait_on_atomic_t ( wq_head , & wait , action , mode ) ;
return __wait_on_atomic_t ( wq_head , & wq_entry , action , mode ) ;
}
EXPORT_SYMBOL ( out_of_line_wait_on_atomic_t ) ;