Lines Matching refs:zhdr
138 struct zbud_header *zhdr = page_address(page); in init_zbud_page() local
139 zhdr->first_chunks = 0; in init_zbud_page()
140 zhdr->last_chunks = 0; in init_zbud_page()
141 INIT_LIST_HEAD(&zhdr->buddy); in init_zbud_page()
142 return zhdr; in init_zbud_page()
146 static void free_zbud_page(struct zbud_header *zhdr) in free_zbud_page() argument
148 __free_page(virt_to_page(zhdr)); in free_zbud_page()
155 static unsigned long encode_handle(struct zbud_header *zhdr, enum buddy bud) in encode_handle() argument
165 handle = (unsigned long)zhdr; in encode_handle()
170 handle += PAGE_SIZE - (zhdr->last_chunks << CHUNK_SHIFT); in encode_handle()
181 static int num_free_chunks(struct zbud_header *zhdr) in num_free_chunks() argument
187 return NCHUNKS - zhdr->first_chunks - zhdr->last_chunks; in num_free_chunks()
250 struct zbud_header *zhdr = NULL; in zbud_alloc() local
264 zhdr = list_first_entry(&pool->unbuddied[i], in zbud_alloc()
266 list_del(&zhdr->buddy); in zbud_alloc()
267 if (zhdr->first_chunks == 0) in zbud_alloc()
282 zhdr = init_zbud_page(page); in zbud_alloc()
287 zhdr->first_chunks = chunks; in zbud_alloc()
289 zhdr->last_chunks = chunks; in zbud_alloc()
291 if (zhdr->first_chunks == 0 || zhdr->last_chunks == 0) { in zbud_alloc()
293 freechunks = num_free_chunks(zhdr); in zbud_alloc()
294 list_add(&zhdr->buddy, &pool->unbuddied[freechunks]); in zbud_alloc()
297 list_add(&zhdr->buddy, &pool->buddied); in zbud_alloc()
300 *handle = encode_handle(zhdr, bud); in zbud_alloc()
313 struct zbud_header *zhdr; in zbud_free() local
317 zhdr = handle_to_zbud_header(handle); in zbud_free()
321 zhdr->last_chunks = 0; in zbud_free()
323 zhdr->first_chunks = 0; in zbud_free()
326 list_del(&zhdr->buddy); in zbud_free()
328 if (zhdr->first_chunks == 0 && zhdr->last_chunks == 0) { in zbud_free()
330 free_zbud_page(zhdr); in zbud_free()
334 freechunks = num_free_chunks(zhdr); in zbud_free()
335 list_add(&zhdr->buddy, &pool->unbuddied[freechunks]); in zbud_free()