Lines Matching refs:res_pool
37 struct fsl_mc_resource_pool *res_pool; in fsl_mc_resource_pool_add_device() local
49 res_pool = &mc_bus->resource_pools[pool_type]; in fsl_mc_resource_pool_add_device()
50 if (res_pool->type != pool_type) in fsl_mc_resource_pool_add_device()
52 if (res_pool->mc_bus != mc_bus) in fsl_mc_resource_pool_add_device()
55 mutex_lock(&res_pool->mutex); in fsl_mc_resource_pool_add_device()
57 if (res_pool->max_count < 0) in fsl_mc_resource_pool_add_device()
59 if (res_pool->free_count < 0 || in fsl_mc_resource_pool_add_device()
60 res_pool->free_count > res_pool->max_count) in fsl_mc_resource_pool_add_device()
75 resource->parent_pool = res_pool; in fsl_mc_resource_pool_add_device()
77 list_add_tail(&resource->node, &res_pool->free_list); in fsl_mc_resource_pool_add_device()
79 res_pool->free_count++; in fsl_mc_resource_pool_add_device()
80 res_pool->max_count++; in fsl_mc_resource_pool_add_device()
83 mutex_unlock(&res_pool->mutex); in fsl_mc_resource_pool_add_device()
102 struct fsl_mc_resource_pool *res_pool; in fsl_mc_resource_pool_remove_device() local
115 res_pool = resource->parent_pool; in fsl_mc_resource_pool_remove_device()
116 if (res_pool != &mc_bus->resource_pools[resource->type]) { in fsl_mc_resource_pool_remove_device()
121 mutex_lock(&res_pool->mutex); in fsl_mc_resource_pool_remove_device()
123 if (res_pool->max_count <= 0) { in fsl_mc_resource_pool_remove_device()
127 if (res_pool->free_count <= 0 || in fsl_mc_resource_pool_remove_device()
128 res_pool->free_count > res_pool->max_count) { in fsl_mc_resource_pool_remove_device()
146 res_pool->free_count--; in fsl_mc_resource_pool_remove_device()
147 res_pool->max_count--; in fsl_mc_resource_pool_remove_device()
153 mutex_unlock(&res_pool->mutex); in fsl_mc_resource_pool_remove_device()
185 struct fsl_mc_resource_pool *res_pool; in fsl_mc_resource_allocate() local
197 res_pool = &mc_bus->resource_pools[pool_type]; in fsl_mc_resource_allocate()
198 if (res_pool->mc_bus != mc_bus) in fsl_mc_resource_allocate()
201 mutex_lock(&res_pool->mutex); in fsl_mc_resource_allocate()
202 resource = list_first_entry_or_null(&res_pool->free_list, in fsl_mc_resource_allocate()
215 if (resource->parent_pool != res_pool) in fsl_mc_resource_allocate()
217 if (res_pool->free_count <= 0 || in fsl_mc_resource_allocate()
218 res_pool->free_count > res_pool->max_count) in fsl_mc_resource_allocate()
223 res_pool->free_count--; in fsl_mc_resource_allocate()
226 mutex_unlock(&res_pool->mutex); in fsl_mc_resource_allocate()
235 struct fsl_mc_resource_pool *res_pool; in fsl_mc_resource_free() local
237 res_pool = resource->parent_pool; in fsl_mc_resource_free()
238 if (resource->type != res_pool->type) in fsl_mc_resource_free()
241 mutex_lock(&res_pool->mutex); in fsl_mc_resource_free()
242 if (res_pool->free_count < 0 || in fsl_mc_resource_free()
243 res_pool->free_count >= res_pool->max_count) in fsl_mc_resource_free()
249 list_add_tail(&resource->node, &res_pool->free_list); in fsl_mc_resource_free()
250 res_pool->free_count++; in fsl_mc_resource_free()
252 mutex_unlock(&res_pool->mutex); in fsl_mc_resource_free()
363 struct fsl_mc_resource_pool *res_pool = in fsl_mc_populate_irq_pool() local
393 mc_dev_irq->resource.type = res_pool->type; in fsl_mc_populate_irq_pool()
395 mc_dev_irq->resource.parent_pool = res_pool; in fsl_mc_populate_irq_pool()
399 list_add_tail(&mc_dev_irq->resource.node, &res_pool->free_list); in fsl_mc_populate_irq_pool()
402 res_pool->max_count = irq_count; in fsl_mc_populate_irq_pool()
403 res_pool->free_count = irq_count; in fsl_mc_populate_irq_pool()
420 struct fsl_mc_resource_pool *res_pool = in fsl_mc_cleanup_irq_pool() local
426 if (res_pool->max_count == 0) in fsl_mc_cleanup_irq_pool()
429 if (res_pool->free_count != res_pool->max_count) in fsl_mc_cleanup_irq_pool()
432 INIT_LIST_HEAD(&res_pool->free_list); in fsl_mc_cleanup_irq_pool()
433 res_pool->max_count = 0; in fsl_mc_cleanup_irq_pool()
434 res_pool->free_count = 0; in fsl_mc_cleanup_irq_pool()
451 struct fsl_mc_resource_pool *res_pool; in fsl_mc_allocate_irqs() local
468 res_pool = &mc_bus->resource_pools[FSL_MC_POOL_IRQ]; in fsl_mc_allocate_irqs()
469 if (res_pool->free_count < irq_count) { in fsl_mc_allocate_irqs()
546 struct fsl_mc_resource_pool *res_pool = in fsl_mc_init_all_resource_pools() local
549 res_pool->type = pool_type; in fsl_mc_init_all_resource_pools()
550 res_pool->max_count = 0; in fsl_mc_init_all_resource_pools()
551 res_pool->free_count = 0; in fsl_mc_init_all_resource_pools()
552 res_pool->mc_bus = mc_bus; in fsl_mc_init_all_resource_pools()
553 INIT_LIST_HEAD(&res_pool->free_list); in fsl_mc_init_all_resource_pools()
554 mutex_init(&res_pool->mutex); in fsl_mc_init_all_resource_pools()
564 struct fsl_mc_resource_pool *res_pool = in fsl_mc_cleanup_resource_pool() local
567 list_for_each_entry_safe(resource, next, &res_pool->free_list, node) in fsl_mc_cleanup_resource_pool()