Lines Matching +full:block +full:- +full:size

1 // SPDX-License-Identifier: GPL-2.0-or-later
32 hdr->size = memsize; in snd_util_memhdr_new()
33 mutex_init(&hdr->block_mutex); in snd_util_memhdr_new()
34 INIT_LIST_HEAD(&hdr->block); in snd_util_memhdr_new()
49 while ((p = hdr->block.next) != &hdr->block) { in snd_util_memhdr_free()
57 * allocate a memory block (without mutex)
60 __snd_util_mem_alloc(struct snd_util_memhdr *hdr, int size) in __snd_util_mem_alloc() argument
66 if (snd_BUG_ON(!hdr || size <= 0)) in __snd_util_mem_alloc()
70 units = size; in __snd_util_mem_alloc()
73 if (units > hdr->size) in __snd_util_mem_alloc()
76 /* look for empty block */ in __snd_util_mem_alloc()
78 list_for_each(p, &hdr->block) { in __snd_util_mem_alloc()
80 if (blk->offset - prev_offset >= units) in __snd_util_mem_alloc()
82 prev_offset = blk->offset + blk->size; in __snd_util_mem_alloc()
84 if (hdr->size - prev_offset < units) in __snd_util_mem_alloc()
88 return __snd_util_memblk_new(hdr, units, p->prev); in __snd_util_mem_alloc()
93 * create a new memory block with the given size
94 * the block is linked next to prev
102 blk = kmalloc(sizeof(struct snd_util_memblk) + hdr->block_extra_size, in __snd_util_memblk_new()
107 if (prev == &hdr->block) in __snd_util_memblk_new()
108 blk->offset = 0; in __snd_util_memblk_new()
111 blk->offset = p->offset + p->size; in __snd_util_memblk_new()
113 blk->size = units; in __snd_util_memblk_new()
114 list_add(&blk->list, prev); in __snd_util_memblk_new()
115 hdr->nblocks++; in __snd_util_memblk_new()
116 hdr->used += units; in __snd_util_memblk_new()
122 * allocate a memory block (with mutex)
125 snd_util_mem_alloc(struct snd_util_memhdr *hdr, int size) in snd_util_mem_alloc() argument
128 mutex_lock(&hdr->block_mutex); in snd_util_mem_alloc()
129 blk = __snd_util_mem_alloc(hdr, size); in snd_util_mem_alloc()
130 mutex_unlock(&hdr->block_mutex); in snd_util_mem_alloc()
136 * remove the block from linked-list and free resource
142 list_del(&blk->list); in __snd_util_mem_free()
143 hdr->nblocks--; in __snd_util_mem_free()
144 hdr->used -= blk->size; in __snd_util_mem_free()
149 * free a memory block (with mutex)
154 return -EINVAL; in snd_util_mem_free()
156 mutex_lock(&hdr->block_mutex); in snd_util_mem_free()
158 mutex_unlock(&hdr->block_mutex); in snd_util_mem_free()
163 * return available memory size
167 unsigned int size; in snd_util_mem_avail() local
168 mutex_lock(&hdr->block_mutex); in snd_util_mem_avail()
169 size = hdr->size - hdr->used; in snd_util_mem_avail()
170 mutex_unlock(&hdr->block_mutex); in snd_util_mem_avail()
171 return size; in snd_util_mem_avail()