tmp_suning_uos_patched/sound
Takashi Iwai 63e20df1e5 ALSA: line6: Reorganize PCM stream handling
The current code deals with the stream start / stop solely via
line6_pcm_acquire() and line6_pcm_release().  This was (supposedly)
intended to avoid the races, but it doesn't work as expected.  The
concurrent acquire and release calls can be performed without proper
protections, thus this might result in memory corruption.
Furthermore, we can't take a mutex to protect the whole function
because it can be called from the PCM trigger callback that is an
atomic context.  Also spinlock isn't appropriate because the function
allocates with kmalloc with GFP_KERNEL.  That is, these function just
lead to singular problems.

This is an attempt to reduce the existing races.  First off, separate
both the stream buffer management and the stream URB management.  The
former is protected via a newly introduced state_mutex while the
latter is protected via each line6_pcm_stream lock.

Secondly, the stream state are now managed in opened and running bit
flags of each line6_pcm_stream.  Not only this a bit clearer than
previous combined bit flags, this also gives a better abstraction.
These rewrites allows us to make common hw_params and hw_free
callbacks for both playback and capture directions.

For the monitor and impulse operations, still line6_pcm_acquire() and
line6_pcm_release() are used.  They call internally the corresponding
functions for both playback and capture streams with proper lock or
mutex.  Unlike the previous versions, these function don't take the
bit masks but the only single type value.  Also they are supposed to
be applied only as duplex operations.

Tested-by: Chris Rorvick <chris@rorvick.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2015-01-28 07:22:36 +01:00
..
aoa ALSA: i2sbus: Deletion of unnecessary checks before the function call "release_and_free_resource" 2014-12-03 07:59:04 +01:00
arm Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
atmel Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
core Merge branch 'for-linus' into for-next 2014-11-28 18:30:19 +01:00
drivers Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
firewire ALSA: fireworks: fix an endianness bug for transaction length 2015-01-07 16:39:21 +01:00
i2c ALSA: ak4xxx-adda: Use snd_ctl_enum_info() 2014-10-21 08:29:54 +02:00
isa ALSA: sb: Deletion of unnecessary checks before two function calls 2014-11-21 20:07:36 +01:00
mips Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
oss Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
parisc ALSA: parisc: Use snd_ctl_enum_info() 2014-10-21 08:37:36 +02:00
pci ALSA: hda - Add new GPU codec ID 0x10de0072 to snd-hda 2015-01-07 07:55:42 +01:00
pcmcia ALSA: vx: Fix missing kerneldoc parameter descriptions 2014-11-11 09:39:10 +01:00
ppc Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
sh ALSA: sh: drop owner assignment from platform_drivers 2014-10-20 16:22:02 +02:00
soc Merge remote-tracking branches 'asoc/fix/dwc', 'asoc/fix/intel', 'asoc/fix/rockchip' and 'asoc/fix/rt5677' into asoc-linus 2014-12-24 12:56:32 +00:00
sparc Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
spi
synth ALSA: synth: emux: soundfont.c: Cleaning up memory leak 2014-06-01 14:33:09 +02:00
usb ALSA: line6: Reorganize PCM stream handling 2015-01-28 07:22:36 +01:00
ac97_bus.c
Kconfig
last.c
Makefile
sound_core.c
sound_firmware.c