if (!(wq->flags & WQ_UNBOUND)) {
                struct global_cwq *last_gcwq;
 
-               if (unlikely(cpu == WORK_CPU_UNBOUND))
+               if (cpu == WORK_CPU_UNBOUND)
                        cpu = raw_smp_processor_id();
 
                /*
  */
 bool queue_work(struct workqueue_struct *wq, struct work_struct *work)
 {
-       bool ret;
-
-       ret = queue_work_on(get_cpu(), wq, work);
-       put_cpu();
-
-       return ret;
+       return queue_work_on(WORK_CPU_UNBOUND, wq, work);
 }
 EXPORT_SYMBOL_GPL(queue_work);
 
        struct cpu_workqueue_struct *cwq = get_work_cwq(&dwork->work);
 
        local_irq_disable();
-       __queue_work(smp_processor_id(), cwq->wq, &dwork->work);
+       __queue_work(WORK_CPU_UNBOUND, cwq->wq, &dwork->work);
        local_irq_enable();
 }
 EXPORT_SYMBOL_GPL(delayed_work_timer_fn);
 
                timer->expires = jiffies + delay;
 
-               if (unlikely(cpu >= 0))
+               if (unlikely(cpu != WORK_CPU_UNBOUND))
                        add_timer_on(timer, cpu);
                else
                        add_timer(timer);
        if (delay == 0)
                return queue_work(wq, &dwork->work);
 
-       return queue_delayed_work_on(-1, wq, dwork, delay);
+       return queue_delayed_work_on(WORK_CPU_UNBOUND, wq, dwork, delay);
 }
 EXPORT_SYMBOL_GPL(queue_delayed_work);
 
 {
        local_irq_disable();
        if (del_timer_sync(&dwork->timer))
-               __queue_work(raw_smp_processor_id(),
+               __queue_work(WORK_CPU_UNBOUND,
                             get_work_cwq(&dwork->work)->wq, &dwork->work);
        local_irq_enable();
        return flush_work(&dwork->work);
 {
        local_irq_disable();
        if (del_timer_sync(&dwork->timer))
-               __queue_work(raw_smp_processor_id(),
+               __queue_work(WORK_CPU_UNBOUND,
                             get_work_cwq(&dwork->work)->wq, &dwork->work);
        local_irq_enable();
        return flush_work_sync(&dwork->work);