mirror of
				https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux
				synced 2025-11-04 16:52:06 +10:00 
			
		
		
		
	ALSA: compress: make use of runtime buffer for copy
Default copy function uses kmalloc to allocate buffers, lets check if the runtime buffers are setup before making this allocations. This can be useful if the buffers are dma buffers. Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> Acked-by: Vinod Koul <vkoul@kernel.org> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
		
							parent
							
								
									ba02eed9f3
								
							
						
					
					
						commit
						d00f749b00
					
				@ -171,7 +171,8 @@ static int snd_compr_free(struct inode *inode, struct file *f)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	data->stream.ops->free(&data->stream);
 | 
			
		||||
	kfree(data->stream.runtime->buffer);
 | 
			
		||||
	if (!data->stream.runtime->dma_buffer_p)
 | 
			
		||||
		kfree(data->stream.runtime->buffer);
 | 
			
		||||
	kfree(data->stream.runtime);
 | 
			
		||||
	kfree(data);
 | 
			
		||||
	return 0;
 | 
			
		||||
@ -505,7 +506,7 @@ static int snd_compr_allocate_buffer(struct snd_compr_stream *stream,
 | 
			
		||||
		struct snd_compr_params *params)
 | 
			
		||||
{
 | 
			
		||||
	unsigned int buffer_size;
 | 
			
		||||
	void *buffer;
 | 
			
		||||
	void *buffer = NULL;
 | 
			
		||||
 | 
			
		||||
	buffer_size = params->buffer.fragment_size * params->buffer.fragments;
 | 
			
		||||
	if (stream->ops->copy) {
 | 
			
		||||
@ -514,7 +515,18 @@ static int snd_compr_allocate_buffer(struct snd_compr_stream *stream,
 | 
			
		||||
		 * the data from core
 | 
			
		||||
		 */
 | 
			
		||||
	} else {
 | 
			
		||||
		buffer = kmalloc(buffer_size, GFP_KERNEL);
 | 
			
		||||
		if (stream->runtime->dma_buffer_p) {
 | 
			
		||||
 | 
			
		||||
			if (buffer_size > stream->runtime->dma_buffer_p->bytes)
 | 
			
		||||
				dev_err(&stream->device->dev,
 | 
			
		||||
						"Not enough DMA buffer");
 | 
			
		||||
			else
 | 
			
		||||
				buffer = stream->runtime->dma_buffer_p->area;
 | 
			
		||||
 | 
			
		||||
		} else {
 | 
			
		||||
			buffer = kmalloc(buffer_size, GFP_KERNEL);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (!buffer)
 | 
			
		||||
			return -ENOMEM;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user