[alsa-devel] [PATCH] ALSA: snd-aloop: make preallocated buffer size configurable
Default of 2MB of physically-contiguous memory can be too high for embedded solutions, make the size configurable.
Signed-off-by: Pierre-Louis Bossart pierre-louis.bossart@linux.intel.com --- sound/drivers/Kconfig | 15 +++++++++++++++ sound/drivers/aloop.c | 6 +++--- 2 files changed, 18 insertions(+), 3 deletions(-)
diff --git a/sound/drivers/Kconfig b/sound/drivers/Kconfig index c896116..ad51067 100644 --- a/sound/drivers/Kconfig +++ b/sound/drivers/Kconfig @@ -93,6 +93,21 @@ config SND_ALOOP To compile this driver as a module, choose M here: the module will be called snd-aloop.
+if SND_ALOOP +config SND_ALOOP_PREALLOC_SIZE + int "Pre-allocated buffer size for aloop driver" + range 0 32768 + default 2048 + help + Specifies the default pre-allocated buffer-size in kB for the + snd-aloop driver. The default 2048 is chosen just + for compatibility reasons. Some distributions may want to + use a smaller size when only one stream is used. + + Note that the pre-allocation size can be changed dynamically + via a proc file (/proc/asound/card*/pcm*/sub*/prealloc), too. +endif + config SND_VIRMIDI tristate "Virtual MIDI soundcard" depends on SND_SEQUENCER diff --git a/sound/drivers/aloop.c b/sound/drivers/aloop.c index a0da775..f945573 100644 --- a/sound/drivers/aloop.c +++ b/sound/drivers/aloop.c @@ -556,11 +556,11 @@ static struct snd_pcm_hardware loopback_pcm_hardware = .rate_max = 192000, .channels_min = 1, .channels_max = 32, - .buffer_bytes_max = 2 * 1024 * 1024, + .buffer_bytes_max = CONFIG_SND_ALOOP_PREALLOC_SIZE * 1024, .period_bytes_min = 64, /* note check overflow in frac_pos() using pcm_rate_shift before changing period_bytes_max value */ - .period_bytes_max = 1024 * 1024, + .period_bytes_max = CONFIG_SND_ALOOP_PREALLOC_SIZE * 1024, .periods_min = 1, .periods_max = 1024, .fifo_size = 0, @@ -774,7 +774,7 @@ static int __devinit loopback_pcm_new(struct loopback *loopback,
snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_CONTINUOUS, snd_dma_continuous_data(GFP_KERNEL), - 0, 2 * 1024 * 1024); + 0, CONFIG_SND_ALOOP_PREALLOC_SIZE * 1024); return 0; }
At Tue, 20 Sep 2011 14:02:12 -0500, Pierre-Louis Bossart wrote:
Default of 2MB of physically-contiguous memory can be too high for embedded solutions, make the size configurable.
Hm, maybe better to have an option for global limit of preallocation? The problem is not necessarily specific to snd-aloop.
thanks,
Takashi
Signed-off-by: Pierre-Louis Bossart pierre-louis.bossart@linux.intel.com
sound/drivers/Kconfig | 15 +++++++++++++++ sound/drivers/aloop.c | 6 +++--- 2 files changed, 18 insertions(+), 3 deletions(-)
diff --git a/sound/drivers/Kconfig b/sound/drivers/Kconfig index c896116..ad51067 100644 --- a/sound/drivers/Kconfig +++ b/sound/drivers/Kconfig @@ -93,6 +93,21 @@ config SND_ALOOP To compile this driver as a module, choose M here: the module will be called snd-aloop.
+if SND_ALOOP +config SND_ALOOP_PREALLOC_SIZE
- int "Pre-allocated buffer size for aloop driver"
- range 0 32768
- default 2048
- help
Specifies the default pre-allocated buffer-size in kB for the
snd-aloop driver. The default 2048 is chosen just
for compatibility reasons. Some distributions may want to
use a smaller size when only one stream is used.
Note that the pre-allocation size can be changed dynamically
via a proc file (/proc/asound/card*/pcm*/sub*/prealloc), too.
+endif
config SND_VIRMIDI tristate "Virtual MIDI soundcard" depends on SND_SEQUENCER diff --git a/sound/drivers/aloop.c b/sound/drivers/aloop.c index a0da775..f945573 100644 --- a/sound/drivers/aloop.c +++ b/sound/drivers/aloop.c @@ -556,11 +556,11 @@ static struct snd_pcm_hardware loopback_pcm_hardware = .rate_max = 192000, .channels_min = 1, .channels_max = 32,
- .buffer_bytes_max = 2 * 1024 * 1024,
- .buffer_bytes_max = CONFIG_SND_ALOOP_PREALLOC_SIZE * 1024, .period_bytes_min = 64, /* note check overflow in frac_pos() using pcm_rate_shift before changing period_bytes_max value */
- .period_bytes_max = 1024 * 1024,
- .period_bytes_max = CONFIG_SND_ALOOP_PREALLOC_SIZE * 1024, .periods_min = 1, .periods_max = 1024, .fifo_size = 0,
@@ -774,7 +774,7 @@ static int __devinit loopback_pcm_new(struct loopback *loopback,
snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_CONTINUOUS, snd_dma_continuous_data(GFP_KERNEL),
0, 2 * 1024 * 1024);
return 0;0, CONFIG_SND_ALOOP_PREALLOC_SIZE * 1024);
}
-- 1.7.6
Alsa-devel mailing list Alsa-devel@alsa-project.org http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
Default of 2MB of physically-contiguous memory can be too high for embedded solutions, make the size configurable.
Hm, maybe better to have an option for global limit of preallocation? The problem is not necessarily specific to snd-aloop.
Not sure I understand the comment. This code is essentially the same as the configuration option for HDAudio, and the parameter value defines the amount of preallocated memory, with a limit to 32MB. -Pierre
participants (2)
-
Pierre-Louis Bossart
-
Takashi Iwai