linux/drivers
Linus Torvalds 46d9be3e5e Merge branch 'for-3.10' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq
Pull workqueue updates from Tejun Heo:
 "A lot of activities on workqueue side this time.  The changes achieve
  the followings.

   - WQ_UNBOUND workqueues - the workqueues which are per-cpu - are
     updated to be able to interface with multiple backend worker pools.
     This involved a lot of churning but the end result seems actually
     neater as unbound workqueues are now a lot closer to per-cpu ones.

   - The ability to interface with multiple backend worker pools are
     used to implement unbound workqueues with custom attributes.
     Currently the supported attributes are the nice level and CPU
     affinity.  It may be expanded to include cgroup association in
     future.  The attributes can be specified either by calling
     apply_workqueue_attrs() or through /sys/bus/workqueue/WQ_NAME/* if
     the workqueue in question is exported through sysfs.

     The backend worker pools are keyed by the actual attributes and
     shared by any workqueues which share the same attributes.  When
     attributes of a workqueue are changed, the workqueue binds to the
     worker pool with the specified attributes while leaving the work
     items which are already executing in its previous worker pools
     alone.

     This allows converting custom worker pool implementations which
     want worker attribute tuning to use workqueues.  The writeback pool
     is already converted in block tree and there are a couple others
     are likely to follow including btrfs io workers.

   - WQ_UNBOUND's ability to bind to multiple worker pools is also used
     to make it NUMA-aware.  Because there's no association between work
     item issuer and the specific worker assigned to execute it, before
     this change, using unbound workqueue led to unnecessary cross-node
     bouncing and it couldn't be helped by autonuma as it requires tasks
     to have implicit node affinity and workers are assigned randomly.

     After these changes, an unbound workqueue now binds to multiple
     NUMA-affine worker pools so that queued work items are executed in
     the same node.  This is turned on by default but can be disabled
     system-wide or for individual workqueues.

     Crypto was requesting NUMA affinity as encrypting data across
     different nodes can contribute noticeable overhead and doing it
     per-cpu was too limiting for certain cases and IO throughput could
     be bottlenecked by one CPU being fully occupied while others have
     idle cycles.

  While the new features required a lot of changes including
  restructuring locking, it didn't complicate the execution paths much.
  The unbound workqueue handling is now closer to per-cpu ones and the
  new features are implemented by simply associating a workqueue with
  different sets of backend worker pools without changing queue,
  execution or flush paths.

  As such, even though the amount of change is very high, I feel
  relatively safe in that it isn't likely to cause subtle issues with
  basic correctness of work item execution and handling.  If something
  is wrong, it's likely to show up as being associated with worker pools
  with the wrong attributes or OOPS while workqueue attributes are being
  changed or during CPU hotplug.

  While this creates more backend worker pools, it doesn't add too many
  more workers unless, of course, there are many workqueues with unique
  combinations of attributes.  Assuming everything else is the same,
  NUMA awareness costs an extra worker pool per NUMA node with online
  CPUs.

  There are also a couple things which are being routed outside the
  workqueue tree.

   - block tree pulled in workqueue for-3.10 so that writeback worker
     pool can be converted to unbound workqueue with sysfs control
     exposed.  This simplifies the code, makes writeback workers
     NUMA-aware and allows tuning nice level and CPU affinity via sysfs.

   - The conversion to workqueue means that there's no 1:1 association
     between a specific worker, which makes writeback folks unhappy as
     they want to be able to tell which filesystem caused a problem from
     backtrace on systems with many filesystems mounted.  This is
     resolved by allowing work items to set debug info string which is
     printed when the task is dumped.  As this change involves unifying
     implementations of dump_stack() and friends in arch codes, it's
     being routed through Andrew's -mm tree."

* 'for-3.10' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq: (84 commits)
  workqueue: use kmem_cache_free() instead of kfree()
  workqueue: avoid false negative WARN_ON() in destroy_workqueue()
  workqueue: update sysfs interface to reflect NUMA awareness and a kernel param to disable NUMA affinity
  workqueue: implement NUMA affinity for unbound workqueues
  workqueue: introduce put_pwq_unlocked()
  workqueue: introduce numa_pwq_tbl_install()
  workqueue: use NUMA-aware allocation for pool_workqueues
  workqueue: break init_and_link_pwq() into two functions and introduce alloc_unbound_pwq()
  workqueue: map an unbound workqueues to multiple per-node pool_workqueues
  workqueue: move hot fields of workqueue_struct to the end
  workqueue: make workqueue->name[] fixed len
  workqueue: add workqueue->unbound_attrs
  workqueue: determine NUMA node of workers accourding to the allowed cpumask
  workqueue: drop 'H' from kworker names of unbound worker pools
  workqueue: add wq_numa_tbl_len and wq_numa_possible_cpumask[]
  workqueue: move pwq_pool_locking outside of get/put_unbound_pool()
  workqueue: fix memory leak in apply_workqueue_attrs()
  workqueue: fix unbound workqueue attrs hashing / comparison
  workqueue: fix race condition in unbound workqueue free path
  workqueue: remove pwq_lock which is no longer used
  ...
2013-04-29 19:07:40 -07:00
..
accessibility
acpi PCI changes for the v3.10 merge window: 2013-04-29 09:30:25 -07:00
amba ARM: 7675/1: amba: tegra-ahb: Fix build error w/ PM_SLEEP w/o PM_RUNTIME 2013-03-15 17:20:02 +00:00
ata Char / Misc driver update for 3.10-rc1 2013-04-29 11:18:34 -07:00
atm
auxdisplay
base Merge branch 'for-3.10' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq 2013-04-29 19:07:40 -07:00
bcma
block Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client 2013-04-17 12:52:02 -07:00
bluetooth Merge v3.9-rc5 into char-misc-next 2013-04-01 10:50:58 -07:00
bus
cdrom
char Char / Misc driver update for 3.10-rc1 2013-04-29 11:18:34 -07:00
clk The common clock framework changes for 3.10 include many fixes for 2013-04-29 16:43:54 -07:00
clocksource clk: arm: sunxi: Add a new clock driver for sunxi SOCs 2013-03-27 08:35:34 -07:00
connector
cpufreq cpufreq / intel_pstate: Set timer timeout correctly 2013-04-08 22:09:23 +02:00
cpuidle
crypto crypto: ux500 - add missing comma 2013-04-05 21:02:17 +08:00
dca
devfreq
dio
dma dmaengine: at_hdmac: fix race condition in atc_advance_work() 2013-04-18 08:54:22 -07:00
edac EDAC: Merge mci.mem_is_per_rank with mci.csbased 2013-03-16 06:32:30 +01:00
eisa PCI changes for the v3.10 merge window: 2013-04-29 09:30:25 -07:00
extcon This is small fixes for extcon driver. 2013-04-08 16:50:23 -07:00
firewire
firmware firmware, memmap: fix firmware_map_entry leak 2013-04-29 15:54:38 -07:00
gpio These are the pinctrl changes for v3.10: 2013-04-29 09:40:35 -07:00
gpu Merge branch '3.10/fb-mmap' into for-next 2013-04-26 09:14:47 +03:00
hid Merge 3.9-rc6 into usb-next 2013-04-08 08:36:40 -07:00
hsi
hv Drivers: hv: vmbus: Fix a bug in hv_need_to_signal() 2013-04-01 12:29:52 -07:00
hwmon Staging driver tree update for 3.10-rc1 2013-04-29 11:34:17 -07:00
hwspinlock hwspinlock: fix __hwspin_lock_request error path 2013-04-05 17:45:11 +03:00
i2c ACPI / I2C: Use parent's ACPI_HANDLE() in acpi_i2c_register_devices() 2013-04-02 15:30:41 +02:00
ide
idle intel_idle: additional Haswell CPU-id 2013-03-15 10:55:31 -04:00
iio iio: at91_adc: fix missing Sample and Hold time 2013-04-02 19:22:16 +01:00
infiniband firmware,IB/qib: revert firmware file move 2013-04-05 12:19:39 -07:00
input Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input 2013-04-19 09:15:13 -07:00
iommu PCI changes for the v3.10 merge window: 2013-04-29 09:30:25 -07:00
ipack ipack: split ipack_device_register() in several functions 2013-03-15 12:23:09 -07:00
irqchip irqchip: gic: fix irq_trigger return 2013-03-26 20:52:25 +01:00
isdn TTY/Serial driver update for 3.10-rc1 2013-04-29 12:16:17 -07:00
leds
lguest
macintosh
mailbox
md Revert "block: add missing block_bio_complete() tracepoint" 2013-04-18 09:00:26 -07:00
media Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media 2013-04-26 08:17:07 -07:00
memory memory: emif: Load the correct custom config values from dt 2013-03-25 13:18:13 -07:00
memstick
message
mfd regulator: Updates for v3.10 2013-04-29 16:32:25 -07:00
misc misc: mark spear13xx-pcie-gadget as broken 2013-04-23 10:32:04 -07:00
mmc TTY/Serial driver update for 3.10-rc1 2013-04-29 12:16:17 -07:00
mtd mtdchar: remove no-longer-used vma helpers 2013-04-19 10:05:39 -07:00
net USB patches for 3.10-rc1 2013-04-29 12:19:23 -07:00
nfc NFC: microread: Fix build failure due to a new MEI bus API 2013-04-01 00:52:42 +02:00
ntb
nubus
of
oprofile
parisc
parport parport: use kmemdup instead of kmalloc + memcpy 2013-03-25 10:42:06 -07:00
pci PCI changes for the v3.10 merge window: 2013-04-29 09:30:25 -07:00
pcmcia
pinctrl pinctrl: move subsystem mutex to pinctrl_dev struct 2013-04-26 17:01:35 +02:00
platform Merge branch 'for_linus' of git://cavan.codon.org.uk/platform-drivers-x86 2013-04-18 15:14:34 -07:00
pnp
power usb: phy: remove CONFIG_USB_OTG_UTILS 2013-03-18 11:18:08 +02:00
pps
ps3
ptp
pwm
rapidio
regulator Merge remote-tracking branch 'regulator/topic/wm8994' into v3.9-rc8 2013-04-28 02:13:50 +01:00
remoteproc remoteproc: fix FW_CONFIG typo 2013-04-07 15:11:27 +03:00
rpmsg
rtc Revert "drivers/rtc/rtc-at91rm9200.c: use a variable for storing IMR" 2013-04-05 09:36:53 -07:00
s390 TTY/Serial driver update for 3.10-rc1 2013-04-29 12:16:17 -07:00
sbus bbc_i2c: fix section mismatch warning 2013-03-31 19:29:12 -04:00
scsi PCI changes for the v3.10 merge window: 2013-04-29 09:30:25 -07:00
sfi
sh
sn
spi spi: Updates for v3.10 2013-04-29 16:38:41 -07:00
ssb ssb: implement spurious tone avoidance 2013-04-10 10:31:26 -04:00
ssbi SSBI: Remove MSM_ prefix from SSBI drivers 2013-03-25 10:39:40 -07:00
staging TTY/Serial driver update for 3.10-rc1 2013-04-29 12:16:17 -07:00
target target: Fix incorrect fallthrough of ALUA Standby/Offline/Transition CDBs 2013-04-11 01:48:49 -07:00
tc
thermal
tty TTY/Serial driver update for 3.10-rc1 2013-04-29 12:16:17 -07:00
uio drivers: uio: Fix UIO device registration failure 2013-03-29 09:08:22 -07:00
usb USB patches for 3.10-rc1 2013-04-29 12:19:23 -07:00
uwb
vfio PCI changes for the v3.10 merge window: 2013-04-29 09:30:25 -07:00
vhost Merge git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending 2013-04-12 15:26:42 -07:00
video drivers/video/mmp: remove legacy hw definitions 2013-04-29 15:54:27 -07:00
virt
virtio
vlynq
vme
w1 ASoC/extcon: arizona: Fix interaction between HPDET and headphone outputs 2013-03-26 09:19:02 -07:00
watchdog watchdog: Revert the AT91RM9200_WATCHDOG dependency 2013-04-14 09:09:10 +02:00
xen Features: 2013-04-29 08:16:51 -07:00
zorro
Kconfig add single-wire serial bus interface (SSBI) driver 2013-03-25 10:33:56 -07:00
Makefile USB patches for 3.10-rc1 2013-04-29 12:19:23 -07:00