Lines Matching refs:mempool
2025 dma_object = ring->mempool->memblocks_dma_arr;
2480 static void __vxge_hw_mempool_destroy(struct vxge_hw_mempool *mempool)
2483 struct __vxge_hw_device *devh = mempool->devh;
2485 for (i = 0; i < mempool->memblocks_allocated; i++) {
2488 vxge_assert(mempool->memblocks_arr[i]);
2489 vxge_assert(mempool->memblocks_dma_arr + i);
2491 dma_object = mempool->memblocks_dma_arr + i;
2493 for (j = 0; j < mempool->items_per_memblock; j++) {
2494 u32 index = i * mempool->items_per_memblock + j;
2497 if (index >= mempool->items_current)
2501 vfree(mempool->memblocks_priv_arr[i]);
2503 __vxge_hw_blockpool_free(devh, mempool->memblocks_arr[i],
2504 mempool->memblock_size, dma_object);
2507 vfree(mempool->items_arr);
2508 vfree(mempool->memblocks_dma_arr);
2509 vfree(mempool->memblocks_priv_arr);
2510 vfree(mempool->memblocks_arr);
2511 vfree(mempool);
2516 * Will resize mempool up to %num_allocate value.
2519 __vxge_hw_mempool_grow(struct vxge_hw_mempool *mempool, u32 num_allocate,
2522 u32 i, first_time = mempool->memblocks_allocated == 0 ? 1 : 0;
2523 u32 n_items = mempool->items_per_memblock;
2524 u32 start_block_idx = mempool->memblocks_allocated;
2525 u32 end_block_idx = mempool->memblocks_allocated + num_allocate;
2530 if (end_block_idx > mempool->memblocks_max) {
2539 mempool->memblocks_dma_arr + i;
2544 * mempool's user request. Each time mempool grows, it will
2547 mempool->memblocks_priv_arr[i] =
2548 vzalloc(array_size(mempool->items_priv_size, n_items));
2549 if (mempool->memblocks_priv_arr[i] == NULL) {
2555 mempool->memblocks_arr[i] =
2556 __vxge_hw_blockpool_malloc(mempool->devh,
2557 mempool->memblock_size, dma_object);
2558 if (mempool->memblocks_arr[i] == NULL) {
2559 vfree(mempool->memblocks_priv_arr[i]);
2565 mempool->memblocks_allocated++;
2567 memset(mempool->memblocks_arr[i], 0, mempool->memblock_size);
2569 the_memblock = mempool->memblocks_arr[i];
2575 if (first_time && index >= mempool->items_initial)
2578 mempool->items_arr[index] =
2579 ((char *)the_memblock + j*mempool->item_size);
2582 if (mempool->item_func_alloc != NULL)
2583 mempool->item_func_alloc(mempool, i,
2586 mempool->items_current = index + 1;
2589 if (first_time && mempool->items_current ==
2590 mempool->items_initial)
2616 struct vxge_hw_mempool *mempool = NULL;
2624 mempool = vzalloc(sizeof(struct vxge_hw_mempool));
2625 if (mempool == NULL) {
2630 mempool->devh = devh;
2631 mempool->memblock_size = memblock_size;
2632 mempool->items_max = items_max;
2633 mempool->items_initial = items_initial;
2634 mempool->item_size = item_size;
2635 mempool->items_priv_size = items_priv_size;
2636 mempool->item_func_alloc = mp_callback->item_func_alloc;
2637 mempool->userdata = userdata;
2639 mempool->memblocks_allocated = 0;
2641 mempool->items_per_memblock = memblock_size / item_size;
2643 mempool->memblocks_max = (items_max + mempool->items_per_memblock - 1) /
2644 mempool->items_per_memblock;
2647 mempool->memblocks_arr =
2648 vzalloc(array_size(sizeof(void *), mempool->memblocks_max));
2649 if (mempool->memblocks_arr == NULL) {
2650 __vxge_hw_mempool_destroy(mempool);
2652 mempool = NULL;
2657 mempool->memblocks_priv_arr =
2658 vzalloc(array_size(sizeof(void *), mempool->memblocks_max));
2659 if (mempool->memblocks_priv_arr == NULL) {
2660 __vxge_hw_mempool_destroy(mempool);
2662 mempool = NULL;
2667 mempool->memblocks_dma_arr =
2669 mempool->memblocks_max));
2670 if (mempool->memblocks_dma_arr == NULL) {
2671 __vxge_hw_mempool_destroy(mempool);
2673 mempool = NULL;
2678 mempool->items_arr = vzalloc(array_size(sizeof(void *),
2679 mempool->items_max));
2680 if (mempool->items_arr == NULL) {
2681 __vxge_hw_mempool_destroy(mempool);
2683 mempool = NULL;
2688 memblocks_to_allocate = (mempool->items_initial +
2689 mempool->items_per_memblock - 1) /
2690 mempool->items_per_memblock;
2692 /* pre-allocate the mempool */
2693 status = __vxge_hw_mempool_grow(mempool, memblocks_to_allocate,
2696 __vxge_hw_mempool_destroy(mempool);
2698 mempool = NULL;
2703 return mempool;
2773 if (ring->mempool)
2774 __vxge_hw_mempool_destroy(ring->mempool);
2853 ring->mempool = __vxge_hw_mempool_create(hldev,
2861 if (ring->mempool == NULL) {
3377 if (fifo->mempool)
3378 __vxge_hw_mempool_destroy(fifo->mempool);
3526 fifo->mempool =
3536 if (fifo->mempool == NULL) {