Lines Matching full:chunks
618 * @chunks: chunks array from vmbus_alloc_buffer(), or NULL
619 * @chunk_cnt: number of entries in @chunks
621 * When @chunks is NULL the buffer is a plain vzalloc() allocation.
626 void vmbus_free_buffer(void *addr, struct page **chunks, u32 chunk_cnt) in vmbus_free_buffer() argument
630 if (!chunks) { in vmbus_free_buffer()
639 (unsigned long)page_address(chunks[i]); in vmbus_free_buffer()
640 unsigned int order = folio_order(page_folio(chunks[i])); in vmbus_free_buffer()
644 __free_pages(chunks[i], order); in vmbus_free_buffer()
647 kvfree(chunks); in vmbus_free_buffer()
656 * @chunks_out: on success, set to the array of underlying chunks, or NULL when
658 * @chunk_cnt_out: on success, set to the number of chunks
663 * physically-contiguous chunks, starting at MAX_PAGE_ORDER and falling back to
666 * chunks are combined into a virtually-contiguous range via vmap().
678 struct page **chunks = NULL; in vmbus_alloc_buffer() local
697 chunks = kvmalloc_objs(*chunks, nr_pages, GFP_KERNEL | __GFP_ZERO); in vmbus_alloc_buffer()
698 if (!chunks) in vmbus_alloc_buffer()
739 chunks[chunk_cnt++] = page; in vmbus_alloc_buffer()
754 *chunks_out = chunks; in vmbus_alloc_buffer()
760 vmbus_free_buffer(NULL, chunks, chunk_cnt); in vmbus_alloc_buffer()