Lines Matching full:bbm
52 * * Big Block Mode (BBM): A Big Block (BB) spans 1..X Linux memory blocks.
88 * State of a Big Block (BB) in BBM, covering 1..X Linux memory blocks.
158 /* If set, the driver is in SBM, otherwise in BBM. */
223 } bbm; member
228 * sbm.sb_states, bbm.bb_count, and bbm.bb_states
346 return addr / vm->bbm.bb_size; in virtio_mem_phys_to_bb_id()
355 return bb_id * vm->bbm.bb_size; in virtio_mem_bb_id_to_phys()
377 const unsigned long idx = bb_id - vm->bbm.first_bb_id; in virtio_mem_bbm_set_bb_state()
380 old_state = vm->bbm.bb_states[idx]; in virtio_mem_bbm_set_bb_state()
381 vm->bbm.bb_states[idx] = state; in virtio_mem_bbm_set_bb_state()
383 BUG_ON(vm->bbm.bb_count[old_state] == 0); in virtio_mem_bbm_set_bb_state()
384 vm->bbm.bb_count[old_state]--; in virtio_mem_bbm_set_bb_state()
385 vm->bbm.bb_count[state]++; in virtio_mem_bbm_set_bb_state()
394 return vm->bbm.bb_states[bb_id - vm->bbm.first_bb_id]; in virtio_mem_bbm_get_bb_state()
402 unsigned long old_bytes = vm->bbm.next_bb_id - vm->bbm.first_bb_id; in virtio_mem_bbm_bb_states_prepare_next_bb()
408 if (vm->bbm.bb_states && old_pages == new_pages) in virtio_mem_bbm_bb_states_prepare_next_bb()
416 if (vm->bbm.bb_states) in virtio_mem_bbm_bb_states_prepare_next_bb()
417 memcpy(new_array, vm->bbm.bb_states, old_pages * PAGE_SIZE); in virtio_mem_bbm_bb_states_prepare_next_bb()
418 vfree(vm->bbm.bb_states); in virtio_mem_bbm_bb_states_prepare_next_bb()
419 vm->bbm.bb_states = new_array; in virtio_mem_bbm_bb_states_prepare_next_bb()
426 for (_bb_id = vm->bbm.first_bb_id; \
427 _bb_id < vm->bbm.next_bb_id && _vm->bbm.bb_count[_state]; \
432 for (_bb_id = vm->bbm.next_bb_id - 1; \
433 _bb_id >= vm->bbm.first_bb_id && _vm->bbm.bb_count[_state]; \
686 const uint64_t size = vm->bbm.bb_size; in virtio_mem_bbm_add_bb()
818 const uint64_t size = vm->bbm.bb_size; in virtio_mem_bbm_offline_and_remove_bb()
1017 * In BBM, we only care about onlining/offlining happening in virtio_mem_memory_notifier_cb()
1563 const uint64_t size = vm->bbm.bb_size; in virtio_mem_bbm_unplug_bb()
1576 const uint64_t size = vm->bbm.bb_size; in virtio_mem_bbm_plug_bb()
1864 if (vm->bbm.next_bb_id > vm->bbm.last_usable_bb_id) in virtio_mem_bbm_prepare_next_bb()
1872 vm->bbm.bb_count[VIRTIO_MEM_BBM_BB_UNUSED]++; in virtio_mem_bbm_prepare_next_bb()
1873 *bb_id = vm->bbm.next_bb_id; in virtio_mem_bbm_prepare_next_bb()
1874 vm->bbm.next_bb_id++; in virtio_mem_bbm_prepare_next_bb()
1880 uint64_t nb_bb = diff / vm->bbm.bb_size; in virtio_mem_bbm_plug_request()
1889 if (!virtio_mem_could_add_memory(vm, vm->bbm.bb_size)) in virtio_mem_bbm_plug_request()
1902 if (!virtio_mem_could_add_memory(vm, vm->bbm.bb_size)) in virtio_mem_bbm_plug_request()
2162 const unsigned long nr_pages = PFN_DOWN(vm->bbm.bb_size); in virtio_mem_bbm_offline_remove_and_unplug_bb()
2228 const unsigned long nr_pages = PFN_DOWN(vm->bbm.bb_size); in virtio_mem_bbm_bb_is_offline()
2247 const unsigned long nr_pages = PFN_DOWN(vm->bbm.bb_size); in virtio_mem_bbm_bb_is_movable()
2265 uint64_t nb_bb = diff / vm->bbm.bb_size; in virtio_mem_bbm_unplug_request()
2392 vm->bbm.last_usable_bb_id = virtio_mem_phys_to_bb_id(vm, in virtio_mem_refresh_config()
2394 if (!IS_ALIGNED(end_addr + 1, vm->bbm.bb_size)) in virtio_mem_refresh_config()
2395 vm->bbm.last_usable_bb_id--; in virtio_mem_refresh_config()
2577 /* BBM: At least one Linux memory block. */ in virtio_mem_init_hotplug()
2578 vm->bbm.bb_size = max_t(uint64_t, vm->device_block_size, in virtio_mem_init_hotplug()
2585 } else if (bbm_block_size < vm->bbm.bb_size) { in virtio_mem_init_hotplug()
2589 vm->bbm.bb_size = bbm_block_size; in virtio_mem_init_hotplug()
2595 vm->bbm.bb_size - 1; in virtio_mem_init_hotplug()
2596 vm->bbm.first_bb_id = virtio_mem_phys_to_bb_id(vm, addr); in virtio_mem_init_hotplug()
2597 vm->bbm.next_bb_id = vm->bbm.first_bb_id; in virtio_mem_init_hotplug()
2600 vm->offline_threshold = max_t(uint64_t, 2 * vm->bbm.bb_size, in virtio_mem_init_hotplug()
2611 (unsigned long long)vm->bbm.bb_size); in virtio_mem_init_hotplug()
2622 unit_pages = PHYS_PFN(vm->bbm.bb_size); in virtio_mem_init_hotplug()
3046 vfree(vm->bbm.bb_states); in virtio_mem_deinit_hotplug()