Lines Matching defs:zhdr
242 struct zbud_header *zhdr = page_address(page);
243 zhdr->first_chunks = 0;
244 zhdr->last_chunks = 0;
245 INIT_LIST_HEAD(&zhdr->buddy);
246 INIT_LIST_HEAD(&zhdr->lru);
247 zhdr->under_reclaim = false;
248 return zhdr;
252 static void free_zbud_page(struct zbud_header *zhdr)
254 __free_page(virt_to_page(zhdr));
261 static unsigned long encode_handle(struct zbud_header *zhdr, enum buddy bud)
271 handle = (unsigned long)zhdr;
276 handle += PAGE_SIZE - (zhdr->last_chunks << CHUNK_SHIFT);
287 static int num_free_chunks(struct zbud_header *zhdr)
293 return NCHUNKS - zhdr->first_chunks - zhdr->last_chunks;
359 struct zbud_header *zhdr = NULL;
373 zhdr = list_first_entry(&pool->unbuddied[i],
375 list_del(&zhdr->buddy);
376 if (zhdr->first_chunks == 0)
391 zhdr = init_zbud_page(page);
396 zhdr->first_chunks = chunks;
398 zhdr->last_chunks = chunks;
400 if (zhdr->first_chunks == 0 || zhdr->last_chunks == 0) {
402 freechunks = num_free_chunks(zhdr);
403 list_add(&zhdr->buddy, &pool->unbuddied[freechunks]);
406 list_add(&zhdr->buddy, &pool->buddied);
410 if (!list_empty(&zhdr->lru))
411 list_del(&zhdr->lru);
412 list_add(&zhdr->lru, &pool->lru);
414 *handle = encode_handle(zhdr, bud);
432 struct zbud_header *zhdr;
436 zhdr = handle_to_zbud_header(handle);
440 zhdr->last_chunks = 0;
442 zhdr->first_chunks = 0;
444 if (zhdr->under_reclaim) {
451 list_del(&zhdr->buddy);
453 if (zhdr->first_chunks == 0 && zhdr->last_chunks == 0) {
455 list_del(&zhdr->lru);
456 free_zbud_page(zhdr);
460 freechunks = num_free_chunks(zhdr);
461 list_add(&zhdr->buddy, &pool->unbuddied[freechunks]);
505 struct zbud_header *zhdr;
515 zhdr = list_last_entry(&pool->lru, struct zbud_header, lru);
516 list_del(&zhdr->lru);
517 list_del(&zhdr->buddy);
519 zhdr->under_reclaim = true;
526 if (zhdr->first_chunks)
527 first_handle = encode_handle(zhdr, FIRST);
528 if (zhdr->last_chunks)
529 last_handle = encode_handle(zhdr, LAST);
545 zhdr->under_reclaim = false;
546 if (zhdr->first_chunks == 0 && zhdr->last_chunks == 0) {
551 free_zbud_page(zhdr);
555 } else if (zhdr->first_chunks == 0 ||
556 zhdr->last_chunks == 0) {
558 freechunks = num_free_chunks(zhdr);
559 list_add(&zhdr->buddy, &pool->unbuddied[freechunks]);
562 list_add(&zhdr->buddy, &pool->buddied);
566 list_add(&zhdr->lru, &pool->lru);