Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 25f97549 authored by Jie Yang's avatar Jie Yang Committed by Mark Brown
Browse files

ASoC: Intel: correct the fixed free block allocation



For block span more than 1 section, when allocate it from
a free block, we need allocate the remain buffers within
the block, and then continue alloc the rest of needed
size buffer.

Here also make sure this free block is moved from free
list to used list, and add it to block_list which may
be used for power gating disabling later.

Signed-off-by: default avatarJie Yang <yang.jie@intel.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent c6905d62
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -763,8 +763,12 @@ static int block_alloc_fixed(struct sst_dsp *dsp, struct sst_block_allocator *ba
		/* does block span more than 1 section */
		if (ba->offset >= block->offset && ba->offset < block_end) {

			/* add block */
			list_move(&block->list, &dsp->used_block_list);
			list_add(&block->module_list, block_list);
			/* align ba to block boundary */
			ba->offset = block->offset;
			ba->size -= block_end - ba->offset;
			ba->offset = block_end;

			err = block_alloc_contiguous(dsp, ba, block_list);
			if (err < 0)