diff options
Diffstat (limited to 'sound/core/memalloc.c')
| -rw-r--r-- | sound/core/memalloc.c | 7 | 
1 files changed, 6 insertions, 1 deletions
| diff --git a/sound/core/memalloc.c b/sound/core/memalloc.c index f0c3b1d6da81..a7b46ec72f32 100644 --- a/sound/core/memalloc.c +++ b/sound/core/memalloc.c @@ -277,11 +277,16 @@ int snd_dma_alloc_pages_fallback(int type, struct device *device, size_t size,  	int err;  	while ((err = snd_dma_alloc_pages(type, device, size, dmab)) < 0) { +		size_t aligned_size;  		if (err != -ENOMEM)  			return err; -		size >>= 1;  		if (size <= PAGE_SIZE)  			return -ENOMEM; +		aligned_size = PAGE_SIZE << get_order(size); +		if (size != aligned_size) +			size = aligned_size; +		else +			size >>= 1;  	}  	if (! dmab->area)  		return -ENOMEM; |