• Home
  • Raw
  • Download

Lines Matching refs:zhdr

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