Re: [PATCH -rt 4/5] workqueue: hotplug fix
From: Thomas Gleixner <hidden>
Date: 2011-10-19 07:14:31
Also in:
lkml
On Sun, 16 Oct 2011, Yong Zhang wrote:
quoted hunk ↗ jump to hunk
--- a/kernel/workqueue.c +++ b/kernel/workqueue.c@@ -3195,30 +3195,34 @@ static int __devinit workqueue_cpu_up_callback(struct notifier_block *nfb, } /* some are called w/ irq disabled, don't disturb irq status */ - spin_lock_irqsave(&gcwq->lock, flags); switch (action) { case CPU_UP_PREPARE: + spin_lock_irqsave(&gcwq->lock, flags); BUG_ON(gcwq->first_idle); gcwq->first_idle = new_worker; + spin_unlock_irqrestore(&gcwq->lock, flags); break; case CPU_UP_CANCELED: + spin_lock_irqsave(&gcwq->lock, flags); destroy_worker(gcwq->first_idle); gcwq->first_idle = NULL; + spin_unlock_irqrestore(&gcwq->lock, flags); break; case CPU_ONLINE: + spin_lock_irqsave(&gcwq->lock, flags); spin_unlock_irq(&gcwq->lock); kthread_bind(gcwq->first_idle->task, cpu); spin_lock_irq(&gcwq->lock); gcwq->flags |= GCWQ_MANAGE_WORKERS; start_worker(gcwq->first_idle); gcwq->first_idle = NULL; + spin_unlock_irqrestore(&gcwq->lock, flags); break; } - spin_unlock_irqrestore(&gcwq->lock, flags);
This part of the patch is pretty pointless.
quoted hunk ↗ jump to hunk
return notifier_from_errno(0); }@@ -3274,14 +3278,14 @@ static void flush_gcwq(struct global_cwq *gcwq) spin_unlock_irq(&gcwq->lock); - gcwq = get_gcwq(get_cpu()); + gcwq = get_gcwq(get_cpu_light());
Right.
spin_lock_irq(&gcwq->lock);
list_for_each_entry_safe(work, nw, &non_affine_works, entry) {
list_del_init(&work->entry);
___queue_work(get_work_cwq(work)->wq, gcwq, work);
}
spin_unlock_irq(&gcwq->lock);
- put_cpu();
+ put_cpu_light();
}
static int __devinit workqueue_cpu_down_callback(struct notifier_block *nfb,
--
1.7.1