linux/drivers/staging/line6
Stefan Hajnoczi 140e28b83c staging: line6: alloc/free buffers in hw_params/hw_free
It is unsafe to free buffers in line6_pcm_stop(), which is not allowed
to sleep, since urbs cannot be killed completely there and only
unlinked.  This means I/O may still be in progress and the URB
completion function still gets invoked.  This may result in memory
corruption when buffer_in is freed but I/O is still pending.

Additionally, line6_pcm_start() is not supposed to sleep so it should
not use kmalloc(GFP_KERNEL).

These issues can be resolved by performing buffer allocation/freeing in
the .hw_params/.hw_free callbacks instead.  The ALSA documentation also
recommends doing buffer allocation/freeing in these callbacks.

Signed-off-by: Stefan Hajnoczi <stefanha@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2011-11-26 16:14:12 -08:00
..
audio.c staging: Add export.h for THIS_MODULE/EXPORT_SYMBOL to drivers/staging users. 2011-10-31 19:32:08 -04:00
audio.h Staging: line6: another upstream sync 2010-08-31 15:28:16 -07:00
capture.c staging: line6: alloc/free buffers in hw_params/hw_free 2011-11-26 16:14:12 -08:00
capture.h Staging: line6: another upstream sync 2010-08-31 15:28:16 -07:00
config.h Staging: line6: minor coding style cleanups 2010-09-21 16:58:00 -07:00
control.c Staging: line6: fix up my fixup for some sysfs attribute permissions 2010-11-18 11:27:20 -08:00
control.h Staging: line6: another upstream sync 2010-08-31 15:28:16 -07:00
driver.c staging: line6: add Pod HD300 support 2011-11-26 16:14:11 -08:00
driver.h Staging: line6: minor coding style cleanups 2010-09-21 16:58:00 -07:00
dumprequest.c Staging: line6: another upstream sync 2010-08-31 15:28:16 -07:00
dumprequest.h Staging: line6: another upstream sync 2010-08-31 15:28:16 -07:00
Kconfig staging: line6: sync with upstream 2010-08-31 15:28:15 -07:00
Makefile staging: line6: add Pod HD300 support 2011-11-26 16:14:11 -08:00
midi.c staging: line6: add missing MIDI postprocessing case for POD HD300 2011-11-26 16:14:11 -08:00
midi.h Staging: line6: another upstream sync 2010-08-31 15:28:16 -07:00
midibuf.c Staging: line6: another upstream sync 2010-08-31 15:28:16 -07:00
midibuf.h Staging: line6: another upstream sync 2010-08-31 15:28:16 -07:00
pcm.c staging: line6: alloc/free buffers in hw_params/hw_free 2011-11-26 16:14:12 -08:00
pcm.h Staging: line6: minor coding style cleanups 2010-09-21 16:58:00 -07:00
playback.c staging: line6: alloc/free buffers in hw_params/hw_free 2011-11-26 16:14:12 -08:00
playback.h Staging: line6: minor coding style cleanups 2010-09-21 16:58:00 -07:00
pod.c Staging: line6: fix up my fixup for some sysfs attribute permissions 2010-11-18 11:27:20 -08:00
pod.h Staging: line6: another upstream sync 2010-08-31 15:28:16 -07:00
podhd.c staging: line6: add Pod HD300 support 2011-11-26 16:14:11 -08:00
podhd.h staging: line6: add Pod HD300 support 2011-11-26 16:14:11 -08:00
revision.h Staging: line6: workaround for null pointer bug 2010-09-20 17:04:35 -07:00
toneport.c Staging: line6: fix up my fixup for some sysfs attribute permissions 2010-11-18 11:27:20 -08:00
toneport.h Staging: line6: another upstream sync 2010-08-31 15:28:16 -07:00
usbdefs.h staging: line6: add Pod HD300 support 2011-11-26 16:14:11 -08:00
variax.c Staging: line6: fix up my fixup for some sysfs attribute permissions 2010-11-18 11:27:20 -08:00
variax.h Staging: line6: another upstream sync 2010-08-31 15:28:16 -07:00