Lines Matching defs:pool

433  * Routines for the event pool and event structs
436 * initialize_event_pool: - Allocates and initializes the event pool for a host
437 * @pool: event_pool to be initialized
438 * @size: Number of events in pool
439 * @hostdata: ibmvscsi_host_data who owns the event pool
443 static int initialize_event_pool(struct event_pool *pool,
448 pool->size = size;
449 pool->next = 0;
450 pool->events = kcalloc(pool->size, sizeof(*pool->events), GFP_KERNEL);
451 if (!pool->events)
454 pool->iu_storage =
456 pool->size * sizeof(*pool->iu_storage),
457 &pool->iu_token, 0);
458 if (!pool->iu_storage) {
459 kfree(pool->events);
463 for (i = 0; i < pool->size; ++i) {
464 struct srp_event_struct *evt = &pool->events[i];
469 evt->crq.IU_data_ptr = cpu_to_be64(pool->iu_token +
471 evt->xfer_iu = pool->iu_storage + i;
481 * release_event_pool: - Frees memory of an event pool of a host
482 * @pool: event_pool to be released
483 * @hostdata: ibmvscsi_host_data who owns the even pool
487 static void release_event_pool(struct event_pool *pool,
491 for (i = 0; i < pool->size; ++i) {
492 if (atomic_read(&pool->events[i].free) != 1)
494 if (pool->events[i].ext_list) {
497 pool->events[i].ext_list,
498 pool->events[i].ext_list_token);
502 dev_warn(hostdata->dev, "releasing event pool with %d "
504 kfree(pool->events);
506 pool->size * sizeof(*pool->iu_storage),
507 pool->iu_storage, pool->iu_token);
512 * @pool: event_pool that contains the event
517 static int valid_event_struct(struct event_pool *pool,
520 int index = evt - pool->events;
521 if (index < 0 || index >= pool->size) /* outside of bounds */
523 if (evt != pool->events + index) /* unaligned */
530 * @pool: event_pool that contains the event
534 static void free_event_struct(struct event_pool *pool,
537 if (!valid_event_struct(pool, evt)) {
539 "(not in pool %p)\n", evt, pool->events);
550 * get_evt_struct: - Gets the next free event in pool
551 * @pool: event_pool that contains the events to be searched
557 static struct srp_event_struct *get_event_struct(struct event_pool *pool)
560 int poolsize = pool->size;
561 int offset = pool->next;
565 if (!atomic_dec_if_positive(&pool->events[offset].free)) {
566 pool->next = offset;
567 return &pool->events[offset];
571 printk(KERN_ERR "ibmvscsi: found no event struct in pool!\n");
803 free_event_struct(&evt->hostdata->pool, evt);
969 free_event_struct(&hostdata->pool, evt_struct);
983 free_event_struct(&hostdata->pool, evt_struct);
1052 evt_struct = get_event_struct(&hostdata->pool);
1067 free_event_struct(&hostdata->pool, evt_struct);
1201 struct srp_event_struct *evt_struct = get_event_struct(&hostdata->pool);
1270 evt_struct = get_event_struct(&hostdata->pool);
1362 evt_struct = get_event_struct(&hostdata->pool);
1438 evt_struct = get_event_struct(&hostdata->pool);
1518 evt = get_event_struct(&hostdata->pool);
1615 free_event_struct(&found_evt->hostdata->pool, found_evt);
1641 evt = get_event_struct(&hostdata->pool);
1720 free_event_struct(&tmp_evt->hostdata->pool,
1826 if (!valid_event_struct(&hostdata->pool, evt_struct)) {
1857 free_event_struct(&evt_struct->hostdata->pool, evt_struct);
2267 if (initialize_event_pool(&hostdata->pool, max_events, hostdata) != 0) {
2268 dev_err(&vdev->dev, "couldn't initialize event pool\n");
2325 release_event_pool(&hostdata->pool, hostdata);
2346 release_event_pool(&hostdata->pool, hostdata);