aboutsummaryrefslogtreecommitdiffstats
path: root/sound
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2012-10-02 12:54:49 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2012-10-02 12:54:49 -0400
commit033d9959ed2dc1029217d4165f80a71702dc578e (patch)
tree3d306316e44bdabce2e0bf2ef7e466e525f90b4c /sound
parent974a847e00cf3ff1695e62b276892137893706ab (diff)
parent7c6e72e46c9ea4a88f3f8ba96edce9db4bd48726 (diff)
Merge branch 'for-3.7' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq
Pull workqueue changes from Tejun Heo: "This is workqueue updates for v3.7-rc1. A lot of activities this round including considerable API and behavior cleanups. * delayed_work combines a timer and a work item. The handling of the timer part has always been a bit clunky leading to confusing cancelation API with weird corner-case behaviors. delayed_work is updated to use new IRQ safe timer and cancelation now works as expected. * Another deficiency of delayed_work was lack of the counterpart of mod_timer() which led to cancel+queue combinations or open-coded timer+work usages. mod_delayed_work[_on]() are added. These two delayed_work changes make delayed_work provide interface and behave like timer which is executed with process context. * A work item could be executed concurrently on multiple CPUs, which is rather unintuitive and made flush_work() behavior confusing and half-broken under certain circumstances. This problem doesn't exist for non-reentrant workqueues. While non-reentrancy check isn't free, the overhead is incurred only when a work item bounces across different CPUs and even in simulated pathological scenario the overhead isn't too high. All workqueues are made non-reentrant. This removes the distinction between flush_[delayed_]work() and flush_[delayed_]_work_sync(). The former is now as strong as the latter and the specified work item is guaranteed to have finished execution of any previous queueing on return. * In addition to the various bug fixes, Lai redid and simplified CPU hotplug handling significantly. * Joonsoo introduced system_highpri_wq and used it during CPU hotplug. There are two merge commits - one to pull in IRQ safe timer from tip/timers/core and the other to pull in CPU hotplug fixes from wq/for-3.6-fixes as Lai's hotplug restructuring depended on them." Fixed a number of trivial conflicts, but the more interesting conflicts were silent ones where the deprecated interfaces had been used by new code in the merge window, and thus didn't cause any real data conflicts. Tejun pointed out a few of them, I fixed a couple more. * 'for-3.7' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq: (46 commits) workqueue: remove spurious WARN_ON_ONCE(in_irq()) from try_to_grab_pending() workqueue: use cwq_set_max_active() helper for workqueue_set_max_active() workqueue: introduce cwq_set_max_active() helper for thaw_workqueues() workqueue: remove @delayed from cwq_dec_nr_in_flight() workqueue: fix possible stall on try_to_grab_pending() of a delayed work item workqueue: use hotcpu_notifier() for workqueue_cpu_down_callback() workqueue: use __cpuinit instead of __devinit for cpu callbacks workqueue: rename manager_mutex to assoc_mutex workqueue: WORKER_REBIND is no longer necessary for idle rebinding workqueue: WORKER_REBIND is no longer necessary for busy rebinding workqueue: reimplement idle worker rebinding workqueue: deprecate __cancel_delayed_work() workqueue: reimplement cancel_delayed_work() using try_to_grab_pending() workqueue: use mod_delayed_work() instead of __cancel + queue workqueue: use irqsafe timer for delayed_work workqueue: clean up delayed_work initializers and add missing one workqueue: make deferrable delayed_work initializer names consistent workqueue: cosmetic whitespace updates for macro definitions workqueue: deprecate system_nrt[_freezable]_wq workqueue: deprecate flush[_delayed]_work_sync() ...
Diffstat (limited to 'sound')
-rw-r--r--sound/i2c/other/ak4113.c2
-rw-r--r--sound/i2c/other/ak4114.c2
-rw-r--r--sound/pci/oxygen/oxygen_lib.c8
-rw-r--r--sound/soc/codecs/wm8350.c2
-rw-r--r--sound/soc/codecs/wm8753.c2
-rw-r--r--sound/soc/soc-core.c6
6 files changed, 11 insertions, 11 deletions
diff --git a/sound/i2c/other/ak4113.c b/sound/i2c/other/ak4113.c
index dde5c9c92132..ef68d710d08c 100644
--- a/sound/i2c/other/ak4113.c
+++ b/sound/i2c/other/ak4113.c
@@ -141,7 +141,7 @@ void snd_ak4113_reinit(struct ak4113 *chip)
141{ 141{
142 chip->init = 1; 142 chip->init = 1;
143 mb(); 143 mb();
144 flush_delayed_work_sync(&chip->work); 144 flush_delayed_work(&chip->work);
145 ak4113_init_regs(chip); 145 ak4113_init_regs(chip);
146 /* bring up statistics / event queing */ 146 /* bring up statistics / event queing */
147 chip->init = 0; 147 chip->init = 0;
diff --git a/sound/i2c/other/ak4114.c b/sound/i2c/other/ak4114.c
index fdf3c1b65e38..816e7d225fb0 100644
--- a/sound/i2c/other/ak4114.c
+++ b/sound/i2c/other/ak4114.c
@@ -154,7 +154,7 @@ void snd_ak4114_reinit(struct ak4114 *chip)
154{ 154{
155 chip->init = 1; 155 chip->init = 1;
156 mb(); 156 mb();
157 flush_delayed_work_sync(&chip->work); 157 flush_delayed_work(&chip->work);
158 ak4114_init_regs(chip); 158 ak4114_init_regs(chip);
159 /* bring up statistics / event queing */ 159 /* bring up statistics / event queing */
160 chip->init = 0; 160 chip->init = 0;
diff --git a/sound/pci/oxygen/oxygen_lib.c b/sound/pci/oxygen/oxygen_lib.c
index ab8738e21ad1..e9fa2d07951d 100644
--- a/sound/pci/oxygen/oxygen_lib.c
+++ b/sound/pci/oxygen/oxygen_lib.c
@@ -573,8 +573,8 @@ static void oxygen_card_free(struct snd_card *card)
573 oxygen_shutdown(chip); 573 oxygen_shutdown(chip);
574 if (chip->irq >= 0) 574 if (chip->irq >= 0)
575 free_irq(chip->irq, chip); 575 free_irq(chip->irq, chip);
576 flush_work_sync(&chip->spdif_input_bits_work); 576 flush_work(&chip->spdif_input_bits_work);
577 flush_work_sync(&chip->gpio_work); 577 flush_work(&chip->gpio_work);
578 chip->model.cleanup(chip); 578 chip->model.cleanup(chip);
579 kfree(chip->model_data); 579 kfree(chip->model_data);
580 mutex_destroy(&chip->mutex); 580 mutex_destroy(&chip->mutex);
@@ -751,8 +751,8 @@ static int oxygen_pci_suspend(struct device *dev)
751 spin_unlock_irq(&chip->reg_lock); 751 spin_unlock_irq(&chip->reg_lock);
752 752
753 synchronize_irq(chip->irq); 753 synchronize_irq(chip->irq);
754 flush_work_sync(&chip->spdif_input_bits_work); 754 flush_work(&chip->spdif_input_bits_work);
755 flush_work_sync(&chip->gpio_work); 755 flush_work(&chip->gpio_work);
756 chip->interrupt_mask = saved_interrupt_mask; 756 chip->interrupt_mask = saved_interrupt_mask;
757 757
758 pci_disable_device(pci); 758 pci_disable_device(pci);
diff --git a/sound/soc/codecs/wm8350.c b/sound/soc/codecs/wm8350.c
index d26c8ae4e6d9..a4cae060bf26 100644
--- a/sound/soc/codecs/wm8350.c
+++ b/sound/soc/codecs/wm8350.c
@@ -1601,7 +1601,7 @@ static int wm8350_codec_remove(struct snd_soc_codec *codec)
1601 1601
1602 /* if there was any work waiting then we run it now and 1602 /* if there was any work waiting then we run it now and
1603 * wait for its completion */ 1603 * wait for its completion */
1604 flush_delayed_work_sync(&codec->dapm.delayed_work); 1604 flush_delayed_work(&codec->dapm.delayed_work);
1605 1605
1606 wm8350_set_bias_level(codec, SND_SOC_BIAS_OFF); 1606 wm8350_set_bias_level(codec, SND_SOC_BIAS_OFF);
1607 1607
diff --git a/sound/soc/codecs/wm8753.c b/sound/soc/codecs/wm8753.c
index 13bff87ddcf5..2e4a775ae560 100644
--- a/sound/soc/codecs/wm8753.c
+++ b/sound/soc/codecs/wm8753.c
@@ -1509,7 +1509,7 @@ static int wm8753_probe(struct snd_soc_codec *codec)
1509/* power down chip */ 1509/* power down chip */
1510static int wm8753_remove(struct snd_soc_codec *codec) 1510static int wm8753_remove(struct snd_soc_codec *codec)
1511{ 1511{
1512 flush_delayed_work_sync(&codec->dapm.delayed_work); 1512 flush_delayed_work(&codec->dapm.delayed_work);
1513 wm8753_set_bias_level(codec, SND_SOC_BIAS_OFF); 1513 wm8753_set_bias_level(codec, SND_SOC_BIAS_OFF);
1514 1514
1515 return 0; 1515 return 0;
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
index c501af6d8dbe..cf3d0b0c71b9 100644
--- a/sound/soc/soc-core.c
+++ b/sound/soc/soc-core.c
@@ -591,7 +591,7 @@ int snd_soc_suspend(struct device *dev)
591 591
592 /* close any waiting streams and save state */ 592 /* close any waiting streams and save state */
593 for (i = 0; i < card->num_rtd; i++) { 593 for (i = 0; i < card->num_rtd; i++) {
594 flush_delayed_work_sync(&card->rtd[i].delayed_work); 594 flush_delayed_work(&card->rtd[i].delayed_work);
595 card->rtd[i].codec->dapm.suspend_bias_level = card->rtd[i].codec->dapm.bias_level; 595 card->rtd[i].codec->dapm.suspend_bias_level = card->rtd[i].codec->dapm.bias_level;
596 } 596 }
597 597
@@ -1848,7 +1848,7 @@ static int soc_cleanup_card_resources(struct snd_soc_card *card)
1848 /* make sure any delayed work runs */ 1848 /* make sure any delayed work runs */
1849 for (i = 0; i < card->num_rtd; i++) { 1849 for (i = 0; i < card->num_rtd; i++) {
1850 struct snd_soc_pcm_runtime *rtd = &card->rtd[i]; 1850 struct snd_soc_pcm_runtime *rtd = &card->rtd[i];
1851 flush_delayed_work_sync(&rtd->delayed_work); 1851 flush_delayed_work(&rtd->delayed_work);
1852 } 1852 }
1853 1853
1854 /* remove auxiliary devices */ 1854 /* remove auxiliary devices */
@@ -1892,7 +1892,7 @@ int snd_soc_poweroff(struct device *dev)
1892 * now, we're shutting down so no imminent restart. */ 1892 * now, we're shutting down so no imminent restart. */
1893 for (i = 0; i < card->num_rtd; i++) { 1893 for (i = 0; i < card->num_rtd; i++) {
1894 struct snd_soc_pcm_runtime *rtd = &card->rtd[i]; 1894 struct snd_soc_pcm_runtime *rtd = &card->rtd[i];
1895 flush_delayed_work_sync(&rtd->delayed_work); 1895 flush_delayed_work(&rtd->delayed_work);
1896 } 1896 }
1897 1897
1898 snd_soc_dapm_shutdown(card); 1898 snd_soc_dapm_shutdown(card);