Lines Matching refs:bm
476 static void memory_bm_position_reset(struct memory_bitmap *bm) in memory_bm_position_reset() argument
478 bm->cur.zone = list_entry(bm->zones.next, struct mem_zone_bm_rtree, in memory_bm_position_reset()
480 bm->cur.node = list_entry(bm->cur.zone->leaves.next, in memory_bm_position_reset()
482 bm->cur.node_pfn = 0; in memory_bm_position_reset()
483 bm->cur.node_bit = 0; in memory_bm_position_reset()
486 static void memory_bm_free(struct memory_bitmap *bm, int clear_nosave_free);
571 memory_bm_create(struct memory_bitmap *bm, gfp_t gfp_mask, int safe_needed) in memory_bm_create() argument
579 INIT_LIST_HEAD(&bm->zones); in memory_bm_create()
594 list_add_tail(&zone->list, &bm->zones); in memory_bm_create()
597 bm->p_list = ca.chain; in memory_bm_create()
598 memory_bm_position_reset(bm); in memory_bm_create()
604 bm->p_list = ca.chain; in memory_bm_create()
605 memory_bm_free(bm, PG_UNSAFE_CLEAR); in memory_bm_create()
612 static void memory_bm_free(struct memory_bitmap *bm, int clear_nosave_free) in memory_bm_free() argument
616 list_for_each_entry(zone, &bm->zones, list) in memory_bm_free()
619 free_list_of_pages(bm->p_list, clear_nosave_free); in memory_bm_free()
621 INIT_LIST_HEAD(&bm->zones); in memory_bm_free()
634 static int memory_bm_find_bit(struct memory_bitmap *bm, unsigned long pfn, in memory_bm_find_bit() argument
641 zone = bm->cur.zone; in memory_bm_find_bit()
649 list_for_each_entry(curr, &bm->zones, list) { in memory_bm_find_bit()
665 node = bm->cur.node; in memory_bm_find_bit()
666 if (((pfn - zone->start_pfn) & ~BM_BLOCK_MASK) == bm->cur.node_pfn) in memory_bm_find_bit()
683 bm->cur.zone = zone; in memory_bm_find_bit()
684 bm->cur.node = node; in memory_bm_find_bit()
685 bm->cur.node_pfn = (pfn - zone->start_pfn) & ~BM_BLOCK_MASK; in memory_bm_find_bit()
694 static void memory_bm_set_bit(struct memory_bitmap *bm, unsigned long pfn) in memory_bm_set_bit() argument
700 error = memory_bm_find_bit(bm, pfn, &addr, &bit); in memory_bm_set_bit()
705 static int mem_bm_set_bit_check(struct memory_bitmap *bm, unsigned long pfn) in mem_bm_set_bit_check() argument
711 error = memory_bm_find_bit(bm, pfn, &addr, &bit); in mem_bm_set_bit_check()
718 static void memory_bm_clear_bit(struct memory_bitmap *bm, unsigned long pfn) in memory_bm_clear_bit() argument
724 error = memory_bm_find_bit(bm, pfn, &addr, &bit); in memory_bm_clear_bit()
729 static void memory_bm_clear_current(struct memory_bitmap *bm) in memory_bm_clear_current() argument
733 bit = max(bm->cur.node_bit - 1, 0); in memory_bm_clear_current()
734 clear_bit(bit, bm->cur.node->data); in memory_bm_clear_current()
737 static int memory_bm_test_bit(struct memory_bitmap *bm, unsigned long pfn) in memory_bm_test_bit() argument
743 error = memory_bm_find_bit(bm, pfn, &addr, &bit); in memory_bm_test_bit()
748 static bool memory_bm_pfn_present(struct memory_bitmap *bm, unsigned long pfn) in memory_bm_pfn_present() argument
753 return !memory_bm_find_bit(bm, pfn, &addr, &bit); in memory_bm_pfn_present()
766 static bool rtree_next_node(struct memory_bitmap *bm) in rtree_next_node() argument
768 bm->cur.node = list_entry(bm->cur.node->list.next, in rtree_next_node()
770 if (&bm->cur.node->list != &bm->cur.zone->leaves) { in rtree_next_node()
771 bm->cur.node_pfn += BM_BITS_PER_BLOCK; in rtree_next_node()
772 bm->cur.node_bit = 0; in rtree_next_node()
778 bm->cur.zone = list_entry(bm->cur.zone->list.next, in rtree_next_node()
780 if (&bm->cur.zone->list != &bm->zones) { in rtree_next_node()
781 bm->cur.node = list_entry(bm->cur.zone->leaves.next, in rtree_next_node()
783 bm->cur.node_pfn = 0; in rtree_next_node()
784 bm->cur.node_bit = 0; in rtree_next_node()
802 static unsigned long memory_bm_next_pfn(struct memory_bitmap *bm) in memory_bm_next_pfn() argument
808 pages = bm->cur.zone->end_pfn - bm->cur.zone->start_pfn; in memory_bm_next_pfn()
809 bits = min(pages - bm->cur.node_pfn, BM_BITS_PER_BLOCK); in memory_bm_next_pfn()
810 bit = find_next_bit(bm->cur.node->data, bits, in memory_bm_next_pfn()
811 bm->cur.node_bit); in memory_bm_next_pfn()
813 pfn = bm->cur.zone->start_pfn + bm->cur.node_pfn + bit; in memory_bm_next_pfn()
814 bm->cur.node_bit = bit + 1; in memory_bm_next_pfn()
817 } while (rtree_next_node(bm)); in memory_bm_next_pfn()
930 static void mark_nosave_pages(struct memory_bitmap *bm) in mark_nosave_pages() argument
953 mem_bm_set_bit_check(bm, pfn); in mark_nosave_pages()
1771 alloc_highmem_pages(struct memory_bitmap *bm, unsigned int nr_highmem) in alloc_highmem_pages() argument
1783 memory_bm_set_bit(bm, page_to_pfn(page)); in alloc_highmem_pages()
1791 alloc_highmem_pages(struct memory_bitmap *bm, unsigned int n) { return 0; } in alloc_highmem_pages() argument
1926 pack_pfns(unsigned long *buf, struct memory_bitmap *bm) in pack_pfns() argument
1931 buf[j] = memory_bm_next_pfn(bm); in pack_pfns()
2008 static int mark_unsafe_pages(struct memory_bitmap *bm) in mark_unsafe_pages() argument
2022 memory_bm_position_reset(bm); in mark_unsafe_pages()
2024 pfn = memory_bm_next_pfn(bm); in mark_unsafe_pages()
2087 static int unpack_orig_pfns(unsigned long *buf, struct memory_bitmap *bm) in unpack_orig_pfns() argument
2098 if (memory_bm_pfn_present(bm, buf[j])) in unpack_orig_pfns()
2099 memory_bm_set_bit(bm, buf[j]); in unpack_orig_pfns()
2136 static unsigned int count_highmem_image_pages(struct memory_bitmap *bm) in count_highmem_image_pages() argument
2141 memory_bm_position_reset(bm); in count_highmem_image_pages()
2142 pfn = memory_bm_next_pfn(bm); in count_highmem_image_pages()
2147 pfn = memory_bm_next_pfn(bm); in count_highmem_image_pages()
2169 prepare_highmem_image(struct memory_bitmap *bm, unsigned int *nr_highmem_p) in prepare_highmem_image() argument
2173 if (memory_bm_create(bm, GFP_ATOMIC, PG_SAFE)) in prepare_highmem_image()
2192 memory_bm_set_bit(bm, page_to_pfn(page)); in prepare_highmem_image()
2199 memory_bm_position_reset(bm); in prepare_highmem_image()
2200 safe_highmem_bm = bm; in prepare_highmem_image()
2298 count_highmem_image_pages(struct memory_bitmap *bm) { return 0; } in count_highmem_image_pages() argument
2301 prepare_highmem_image(struct memory_bitmap *bm, unsigned int *nr_highmem_p) in prepare_highmem_image() argument
2334 prepare_image(struct memory_bitmap *new_bm, struct memory_bitmap *bm) in prepare_image() argument
2344 nr_highmem = count_highmem_image_pages(bm); in prepare_image()
2345 error = mark_unsafe_pages(bm); in prepare_image()
2353 duplicate_memory_bitmap(new_bm, bm); in prepare_image()
2354 memory_bm_free(bm, PG_UNSAFE_KEEP); in prepare_image()
2356 error = prepare_highmem_image(bm, &nr_highmem); in prepare_image()
2417 static void *get_buffer(struct memory_bitmap *bm, struct chain_allocator *ca) in get_buffer() argument
2421 unsigned long pfn = memory_bm_next_pfn(bm); in get_buffer()