diff options
Diffstat (limited to 'net/bluetooth/rfcomm/core.c')
| -rw-r--r-- | net/bluetooth/rfcomm/core.c | 18 | 
1 files changed, 8 insertions, 10 deletions
diff --git a/net/bluetooth/rfcomm/core.c b/net/bluetooth/rfcomm/core.c index af73bc3acb40..410dd5e76c41 100644 --- a/net/bluetooth/rfcomm/core.c +++ b/net/bluetooth/rfcomm/core.c @@ -101,11 +101,11 @@ static struct rfcomm_session *rfcomm_session_del(struct rfcomm_session *s);  #define __get_rpn_stop_bits(line) (((line) >> 2) & 0x1)  #define __get_rpn_parity(line)    (((line) >> 3) & 0x7) +static DECLARE_WAIT_QUEUE_HEAD(rfcomm_wq); +  static void rfcomm_schedule(void)  { -	if (!rfcomm_thread) -		return; -	wake_up_process(rfcomm_thread); +	wake_up_all(&rfcomm_wq);  }  /* ---- RFCOMM FCS computation ---- */ @@ -2086,24 +2086,22 @@ static void rfcomm_kill_listener(void)  static int rfcomm_run(void *unused)  { +	DEFINE_WAIT_FUNC(wait, woken_wake_function);  	BT_DBG("");  	set_user_nice(current, -10);  	rfcomm_add_listener(BDADDR_ANY); -	while (1) { -		set_current_state(TASK_INTERRUPTIBLE); - -		if (kthread_should_stop()) -			break; +	add_wait_queue(&rfcomm_wq, &wait); +	while (!kthread_should_stop()) {  		/* Process stuff */  		rfcomm_process_sessions(); -		schedule(); +		wait_woken(&wait, TASK_INTERRUPTIBLE, MAX_SCHEDULE_TIMEOUT);  	} -	__set_current_state(TASK_RUNNING); +	remove_wait_queue(&rfcomm_wq, &wait);  	rfcomm_kill_listener();  | 
