|
@@ -25,6 +25,7 @@ struct wait_bit_key {
|
|
|
void *flags;
|
|
|
int bit_nr;
|
|
|
#define WAIT_ATOMIC_T_BIT_NR -1
|
|
|
+ unsigned long private;
|
|
|
};
|
|
|
|
|
|
struct wait_bit_queue {
|
|
@@ -141,18 +142,19 @@ __remove_wait_queue(wait_queue_head_t *head, wait_queue_t *old)
|
|
|
list_del(&old->task_list);
|
|
|
}
|
|
|
|
|
|
+typedef int wait_bit_action_f(struct wait_bit_key *);
|
|
|
void __wake_up(wait_queue_head_t *q, unsigned int mode, int nr, void *key);
|
|
|
void __wake_up_locked_key(wait_queue_head_t *q, unsigned int mode, void *key);
|
|
|
void __wake_up_sync_key(wait_queue_head_t *q, unsigned int mode, int nr, void *key);
|
|
|
void __wake_up_locked(wait_queue_head_t *q, unsigned int mode, int nr);
|
|
|
void __wake_up_sync(wait_queue_head_t *q, unsigned int mode, int nr);
|
|
|
void __wake_up_bit(wait_queue_head_t *, void *, int);
|
|
|
-int __wait_on_bit(wait_queue_head_t *, struct wait_bit_queue *, int (*)(void *), unsigned);
|
|
|
-int __wait_on_bit_lock(wait_queue_head_t *, struct wait_bit_queue *, int (*)(void *), unsigned);
|
|
|
+int __wait_on_bit(wait_queue_head_t *, struct wait_bit_queue *, wait_bit_action_f *, unsigned);
|
|
|
+int __wait_on_bit_lock(wait_queue_head_t *, struct wait_bit_queue *, wait_bit_action_f *, unsigned);
|
|
|
void wake_up_bit(void *, int);
|
|
|
void wake_up_atomic_t(atomic_t *);
|
|
|
-int out_of_line_wait_on_bit(void *, int, int (*)(void *), unsigned);
|
|
|
-int out_of_line_wait_on_bit_lock(void *, int, int (*)(void *), unsigned);
|
|
|
+int out_of_line_wait_on_bit(void *, int, wait_bit_action_f *, unsigned);
|
|
|
+int out_of_line_wait_on_bit_lock(void *, int, wait_bit_action_f *, unsigned);
|
|
|
int out_of_line_wait_on_atomic_t(atomic_t *, int (*)(atomic_t *), unsigned);
|
|
|
wait_queue_head_t *bit_waitqueue(void *, int);
|
|
|
|
|
@@ -855,8 +857,8 @@ int wake_bit_function(wait_queue_t *wait, unsigned mode, int sync, void *key);
|
|
|
} while (0)
|
|
|
|
|
|
|
|
|
-extern int bit_wait(void *);
|
|
|
-extern int bit_wait_io(void *);
|
|
|
+extern int bit_wait(struct wait_bit_key *);
|
|
|
+extern int bit_wait_io(struct wait_bit_key *);
|
|
|
|
|
|
/**
|
|
|
* wait_on_bit - wait for a bit to be cleared
|
|
@@ -925,7 +927,7 @@ wait_on_bit_io(void *word, int bit, unsigned mode)
|
|
|
* on that signal.
|
|
|
*/
|
|
|
static inline int
|
|
|
-wait_on_bit_action(void *word, int bit, int (*action)(void *), unsigned mode)
|
|
|
+wait_on_bit_action(void *word, int bit, wait_bit_action_f *action, unsigned mode)
|
|
|
{
|
|
|
if (!test_bit(bit, word))
|
|
|
return 0;
|
|
@@ -1000,7 +1002,7 @@ wait_on_bit_lock_io(void *word, int bit, unsigned mode)
|
|
|
* the @mode allows that signal to wake the process.
|
|
|
*/
|
|
|
static inline int
|
|
|
-wait_on_bit_lock_action(void *word, int bit, int (*action)(void *), unsigned mode)
|
|
|
+wait_on_bit_lock_action(void *word, int bit, wait_bit_action_f *action, unsigned mode)
|
|
|
{
|
|
|
if (!test_and_set_bit(bit, word))
|
|
|
return 0;
|