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, GFP_KERNEL);
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
533 static void free_event_struct(struct event_pool *pool,
536 if (!valid_event_struct(pool, evt)) {
538 "(not in pool %p)\n", evt, pool->events);
549 * get_event_struct() - Gets the next free event in pool
550 * @pool: event_pool that contains the events to be searched
556 static struct srp_event_struct *get_event_struct(struct event_pool *pool)
559 int poolsize = pool->size;
560 int offset = pool->next;
564 if (!atomic_dec_if_positive(&pool->events[offset].free)) {
565 pool->next = offset;
566 return &pool->events[offset];
570 printk(KERN_ERR "ibmvscsi: found no event struct in pool!\n");
804 free_event_struct(&evt->hostdata->pool, evt);
970 free_event_struct(&hostdata->pool, evt_struct);
984 free_event_struct(&hostdata->pool, evt_struct);
1053 evt_struct = get_event_struct(&hostdata->pool);
1069 free_event_struct(&hostdata->pool, evt_struct);
1203 struct srp_event_struct *evt_struct = get_event_struct(&hostdata->pool);
1272 evt_struct = get_event_struct(&hostdata->pool);
1364 evt_struct = get_event_struct(&hostdata->pool);
1440 evt_struct = get_event_struct(&hostdata->pool);
1519 evt = get_event_struct(&hostdata->pool);
1616 free_event_struct(&found_evt->hostdata->pool, found_evt);
1642 evt = get_event_struct(&hostdata->pool);
1721 free_event_struct(&tmp_evt->hostdata->pool,
1827 if (!valid_event_struct(&hostdata->pool, evt_struct)) {
1858 free_event_struct(&evt_struct->hostdata->pool, evt_struct);
2269 if (initialize_event_pool(&hostdata->pool, max_events, hostdata) != 0) {
2270 dev_err(&vdev->dev, "couldn't initialize event pool\n");
2327 release_event_pool(&hostdata->pool, hostdata);
2348 release_event_pool(&hostdata->pool, hostdata);