diff mbox

ASoC: Intel: correct the fixed free block allocation

Message ID 1419297165-28401-1-git-send-email-yang.jie@intel.com (mailing list archive)
State Accepted
Commit 25f97549b5a19a373922e07c3e0f0b0b56a49148
Headers show

Commit Message

Jie, Yang Dec. 23, 2014, 1:12 a.m. UTC
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: Jie Yang <yang.jie@intel.com>
---
 sound/soc/intel/sst-firmware.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

Comments

Mark Brown Dec. 24, 2014, 12:14 p.m. UTC | #1
On Tue, Dec 23, 2014 at 09:12:45AM +0800, Jie Yang wrote:
> 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.

Applied, thanks.
diff mbox

Patch

diff --git a/sound/soc/intel/sst-firmware.c b/sound/soc/intel/sst-firmware.c
index 4a5bde9..ef2e8b5 100644
--- a/sound/soc/intel/sst-firmware.c
+++ b/sound/soc/intel/sst-firmware.c
@@ -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)