Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'for-3.10-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq

Pull workqueue fixes from Tejun Heo:
"Three more workqueue regression fixes.

- Fix unbalanced unlock in trylock failure path of manage_workers().
This shouldn't happen often in the wild but is possible.

- While making schedule_work() and friends inline, they become
unavailable to !GPL modules. Allow !GPL modules to access basic
stuff - system_wq and queue_*work_on() - so that schedule_work()
and friends can be used.

- During boot, the unbound NUMA support code allocates a cpumask for
each possible node using alloc_cpumask_var_node(), which ends up
trying to allocate node-specific memory even for offline nodes
triggering BUG in the memory alloc code. Use NUMA_NO_NODE for
offline nodes."

* 'for-3.10-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq:
workqueue: don't perform NUMA-aware allocations on offline nodes in wq_numa_init()
workqueue: Make schedule_work() available again to non GPL modules
workqueue: correct handling of the pool spin_lock

+6 -4
+6 -4
kernel/workqueue.c
··· 296 296 static struct workqueue_attrs *unbound_std_wq_attrs[NR_STD_WORKER_POOLS]; 297 297 298 298 struct workqueue_struct *system_wq __read_mostly; 299 - EXPORT_SYMBOL_GPL(system_wq); 299 + EXPORT_SYMBOL(system_wq); 300 300 struct workqueue_struct *system_highpri_wq __read_mostly; 301 301 EXPORT_SYMBOL_GPL(system_highpri_wq); 302 302 struct workqueue_struct *system_long_wq __read_mostly; ··· 1411 1411 local_irq_restore(flags); 1412 1412 return ret; 1413 1413 } 1414 - EXPORT_SYMBOL_GPL(queue_work_on); 1414 + EXPORT_SYMBOL(queue_work_on); 1415 1415 1416 1416 void delayed_work_timer_fn(unsigned long __data) 1417 1417 { ··· 1485 1485 local_irq_restore(flags); 1486 1486 return ret; 1487 1487 } 1488 - EXPORT_SYMBOL_GPL(queue_delayed_work_on); 1488 + EXPORT_SYMBOL(queue_delayed_work_on); 1489 1489 1490 1490 /** 1491 1491 * mod_delayed_work_on - modify delay of or queue a delayed work on specific CPU ··· 2059 2059 if (unlikely(!mutex_trylock(&pool->manager_mutex))) { 2060 2060 spin_unlock_irq(&pool->lock); 2061 2061 mutex_lock(&pool->manager_mutex); 2062 + spin_lock_irq(&pool->lock); 2062 2063 ret = true; 2063 2064 } 2064 2065 ··· 4905 4904 BUG_ON(!tbl); 4906 4905 4907 4906 for_each_node(node) 4908 - BUG_ON(!alloc_cpumask_var_node(&tbl[node], GFP_KERNEL, node)); 4907 + BUG_ON(!alloc_cpumask_var_node(&tbl[node], GFP_KERNEL, 4908 + node_online(node) ? node : NUMA_NO_NODE)); 4909 4909 4910 4910 for_each_possible_cpu(cpu) { 4911 4911 node = cpu_to_node(cpu);