|
@@ -1319,7 +1319,7 @@ void delayed_work_timer_fn(unsigned long __data)
|
|
struct cpu_workqueue_struct *cwq = get_work_cwq(&dwork->work);
|
|
struct cpu_workqueue_struct *cwq = get_work_cwq(&dwork->work);
|
|
|
|
|
|
local_irq_disable();
|
|
local_irq_disable();
|
|
- __queue_work(WORK_CPU_UNBOUND, cwq->wq, &dwork->work);
|
|
|
|
|
|
+ __queue_work(dwork->cpu, cwq->wq, &dwork->work);
|
|
local_irq_enable();
|
|
local_irq_enable();
|
|
}
|
|
}
|
|
EXPORT_SYMBOL_GPL(delayed_work_timer_fn);
|
|
EXPORT_SYMBOL_GPL(delayed_work_timer_fn);
|
|
@@ -1356,6 +1356,7 @@ static void __queue_delayed_work(int cpu, struct workqueue_struct *wq,
|
|
|
|
|
|
set_work_cwq(work, get_cwq(lcpu, wq), 0);
|
|
set_work_cwq(work, get_cwq(lcpu, wq), 0);
|
|
|
|
|
|
|
|
+ dwork->cpu = cpu;
|
|
timer->expires = jiffies + delay;
|
|
timer->expires = jiffies + delay;
|
|
|
|
|
|
if (unlikely(cpu != WORK_CPU_UNBOUND))
|
|
if (unlikely(cpu != WORK_CPU_UNBOUND))
|
|
@@ -2997,7 +2998,7 @@ bool flush_delayed_work(struct delayed_work *dwork)
|
|
{
|
|
{
|
|
local_irq_disable();
|
|
local_irq_disable();
|
|
if (del_timer_sync(&dwork->timer))
|
|
if (del_timer_sync(&dwork->timer))
|
|
- __queue_work(WORK_CPU_UNBOUND,
|
|
|
|
|
|
+ __queue_work(dwork->cpu,
|
|
get_work_cwq(&dwork->work)->wq, &dwork->work);
|
|
get_work_cwq(&dwork->work)->wq, &dwork->work);
|
|
local_irq_enable();
|
|
local_irq_enable();
|
|
return flush_work(&dwork->work);
|
|
return flush_work(&dwork->work);
|
|
@@ -3020,7 +3021,7 @@ bool flush_delayed_work_sync(struct delayed_work *dwork)
|
|
{
|
|
{
|
|
local_irq_disable();
|
|
local_irq_disable();
|
|
if (del_timer_sync(&dwork->timer))
|
|
if (del_timer_sync(&dwork->timer))
|
|
- __queue_work(WORK_CPU_UNBOUND,
|
|
|
|
|
|
+ __queue_work(dwork->cpu,
|
|
get_work_cwq(&dwork->work)->wq, &dwork->work);
|
|
get_work_cwq(&dwork->work)->wq, &dwork->work);
|
|
local_irq_enable();
|
|
local_irq_enable();
|
|
return flush_work_sync(&dwork->work);
|
|
return flush_work_sync(&dwork->work);
|