Lines Matching refs:chunk

39 static inline size_t chunk_size(const struct gen_pool_chunk *chunk)  in chunk_size()  argument
41 return chunk->end_addr - chunk->start_addr + 1; in chunk_size()
184 struct gen_pool_chunk *chunk; in gen_pool_add_virt() local
189 chunk = kzalloc_node(nbytes, GFP_KERNEL, nid); in gen_pool_add_virt()
190 if (unlikely(chunk == NULL)) in gen_pool_add_virt()
193 chunk->phys_addr = phys; in gen_pool_add_virt()
194 chunk->start_addr = virt; in gen_pool_add_virt()
195 chunk->end_addr = virt + size - 1; in gen_pool_add_virt()
196 atomic_set(&chunk->avail, size); in gen_pool_add_virt()
199 list_add_rcu(&chunk->next_chunk, &pool->chunks); in gen_pool_add_virt()
215 struct gen_pool_chunk *chunk; in gen_pool_virt_to_phys() local
219 list_for_each_entry_rcu(chunk, &pool->chunks, next_chunk) { in gen_pool_virt_to_phys()
220 if (addr >= chunk->start_addr && addr <= chunk->end_addr) { in gen_pool_virt_to_phys()
221 paddr = chunk->phys_addr + (addr - chunk->start_addr); in gen_pool_virt_to_phys()
241 struct gen_pool_chunk *chunk; in gen_pool_destroy() local
246 chunk = list_entry(_chunk, struct gen_pool_chunk, next_chunk); in gen_pool_destroy()
247 list_del(&chunk->next_chunk); in gen_pool_destroy()
249 end_bit = chunk_size(chunk) >> order; in gen_pool_destroy()
250 bit = find_next_bit(chunk->bits, end_bit, 0); in gen_pool_destroy()
253 kfree(chunk); in gen_pool_destroy()
272 struct gen_pool_chunk *chunk; in gen_pool_alloc() local
286 list_for_each_entry_rcu(chunk, &pool->chunks, next_chunk) { in gen_pool_alloc()
287 if (size > atomic_read(&chunk->avail)) in gen_pool_alloc()
290 end_bit = chunk_size(chunk) >> order; in gen_pool_alloc()
292 start_bit = pool->algo(chunk->bits, end_bit, start_bit, nbits, in gen_pool_alloc()
296 remain = bitmap_set_ll(chunk->bits, start_bit, nbits); in gen_pool_alloc()
298 remain = bitmap_clear_ll(chunk->bits, start_bit, in gen_pool_alloc()
304 addr = chunk->start_addr + ((unsigned long)start_bit << order); in gen_pool_alloc()
306 atomic_sub(size, &chunk->avail); in gen_pool_alloc()
355 struct gen_pool_chunk *chunk; in gen_pool_free() local
365 list_for_each_entry_rcu(chunk, &pool->chunks, next_chunk) { in gen_pool_free()
366 if (addr >= chunk->start_addr && addr <= chunk->end_addr) { in gen_pool_free()
367 BUG_ON(addr + size - 1 > chunk->end_addr); in gen_pool_free()
368 start_bit = (addr - chunk->start_addr) >> order; in gen_pool_free()
369 remain = bitmap_clear_ll(chunk->bits, start_bit, nbits); in gen_pool_free()
372 atomic_add(size, &chunk->avail); in gen_pool_free()
392 void (*func)(struct gen_pool *pool, struct gen_pool_chunk *chunk, void *data), in gen_pool_for_each_chunk() argument
395 struct gen_pool_chunk *chunk; in gen_pool_for_each_chunk() local
398 list_for_each_entry_rcu(chunk, &(pool)->chunks, next_chunk) in gen_pool_for_each_chunk()
399 func(pool, chunk, data); in gen_pool_for_each_chunk()
418 struct gen_pool_chunk *chunk; in addr_in_gen_pool() local
421 list_for_each_entry_rcu(chunk, &(pool)->chunks, next_chunk) { in addr_in_gen_pool()
422 if (start >= chunk->start_addr && start <= chunk->end_addr) { in addr_in_gen_pool()
423 if (end <= chunk->end_addr) { in addr_in_gen_pool()
441 struct gen_pool_chunk *chunk; in gen_pool_avail() local
445 list_for_each_entry_rcu(chunk, &pool->chunks, next_chunk) in gen_pool_avail()
446 avail += atomic_read(&chunk->avail); in gen_pool_avail()
460 struct gen_pool_chunk *chunk; in gen_pool_size() local
464 list_for_each_entry_rcu(chunk, &pool->chunks, next_chunk) in gen_pool_size()
465 size += chunk_size(chunk); in gen_pool_size()