diff options
Diffstat (limited to 'kernel/stop_machine.c')
| -rw-r--r-- | kernel/stop_machine.c | 20 | 
1 files changed, 10 insertions, 10 deletions
diff --git a/kernel/stop_machine.c b/kernel/stop_machine.c index 5d2d0562115b..3fe6b0c99f3d 100644 --- a/kernel/stop_machine.c +++ b/kernel/stop_machine.c @@ -82,18 +82,15 @@ static void cpu_stop_signal_done(struct cpu_stop_done *done)  }  static void __cpu_stop_queue_work(struct cpu_stopper *stopper, -					struct cpu_stop_work *work, -					struct wake_q_head *wakeq) +				  struct cpu_stop_work *work)  {  	list_add_tail(&work->list, &stopper->works); -	wake_q_add(wakeq, stopper->thread);  }  /* queue @work to @stopper.  if offline, @work is completed immediately */  static bool cpu_stop_queue_work(unsigned int cpu, struct cpu_stop_work *work)  {  	struct cpu_stopper *stopper = &per_cpu(cpu_stopper, cpu); -	DEFINE_WAKE_Q(wakeq);  	unsigned long flags;  	bool enabled; @@ -101,12 +98,13 @@ static bool cpu_stop_queue_work(unsigned int cpu, struct cpu_stop_work *work)  	raw_spin_lock_irqsave(&stopper->lock, flags);  	enabled = stopper->enabled;  	if (enabled) -		__cpu_stop_queue_work(stopper, work, &wakeq); +		__cpu_stop_queue_work(stopper, work);  	else if (work->done)  		cpu_stop_signal_done(work->done);  	raw_spin_unlock_irqrestore(&stopper->lock, flags); -	wake_up_q(&wakeq); +	if (enabled) +		wake_up_process(stopper->thread);  	preempt_enable();  	return enabled; @@ -264,7 +262,6 @@ static int cpu_stop_queue_two_works(int cpu1, struct cpu_stop_work *work1,  {  	struct cpu_stopper *stopper1 = per_cpu_ptr(&cpu_stopper, cpu1);  	struct cpu_stopper *stopper2 = per_cpu_ptr(&cpu_stopper, cpu2); -	DEFINE_WAKE_Q(wakeq);  	int err;  retry: @@ -300,8 +297,8 @@ retry:  	}  	err = 0; -	__cpu_stop_queue_work(stopper1, work1, &wakeq); -	__cpu_stop_queue_work(stopper2, work2, &wakeq); +	__cpu_stop_queue_work(stopper1, work1); +	__cpu_stop_queue_work(stopper2, work2);  unlock:  	raw_spin_unlock(&stopper2->lock); @@ -316,7 +313,10 @@ unlock:  		goto retry;  	} -	wake_up_q(&wakeq); +	if (!err) { +		wake_up_process(stopper1->thread); +		wake_up_process(stopper2->thread); +	}  	preempt_enable();  	return err;  | 
