Lines Matching full:bbm
43 "Use a safe unplug mechanism in BBM, avoiding long/endless loops");
54 * * Big Block Mode (BBM): A Big Block (BB) spans 1..X Linux memory blocks.
90 * 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. */
216 } bbm; member
221 * sbm.sb_states, bbm.bb_count, and bbm.bb_states
321 return addr / vm->bbm.bb_size; in virtio_mem_phys_to_bb_id()
330 return bb_id * vm->bbm.bb_size; in virtio_mem_bb_id_to_phys()
352 const unsigned long idx = bb_id - vm->bbm.first_bb_id; in virtio_mem_bbm_set_bb_state()
355 old_state = vm->bbm.bb_states[idx]; in virtio_mem_bbm_set_bb_state()
356 vm->bbm.bb_states[idx] = state; in virtio_mem_bbm_set_bb_state()
358 BUG_ON(vm->bbm.bb_count[old_state] == 0); in virtio_mem_bbm_set_bb_state()
359 vm->bbm.bb_count[old_state]--; in virtio_mem_bbm_set_bb_state()
360 vm->bbm.bb_count[state]++; in virtio_mem_bbm_set_bb_state()
369 return vm->bbm.bb_states[bb_id - vm->bbm.first_bb_id]; in virtio_mem_bbm_get_bb_state()
377 unsigned long old_bytes = vm->bbm.next_bb_id - vm->bbm.first_bb_id; in virtio_mem_bbm_bb_states_prepare_next_bb()
383 if (vm->bbm.bb_states && old_pages == new_pages) in virtio_mem_bbm_bb_states_prepare_next_bb()
391 if (vm->bbm.bb_states) in virtio_mem_bbm_bb_states_prepare_next_bb()
392 memcpy(new_array, vm->bbm.bb_states, old_pages * PAGE_SIZE); in virtio_mem_bbm_bb_states_prepare_next_bb()
393 vfree(vm->bbm.bb_states); in virtio_mem_bbm_bb_states_prepare_next_bb()
394 vm->bbm.bb_states = new_array; in virtio_mem_bbm_bb_states_prepare_next_bb()
401 for (_bb_id = vm->bbm.first_bb_id; \
402 _bb_id < vm->bbm.next_bb_id && _vm->bbm.bb_count[_state]; \
407 for (_bb_id = vm->bbm.next_bb_id - 1; \
408 _bb_id >= vm->bbm.first_bb_id && _vm->bbm.bb_count[_state]; \
661 const uint64_t size = vm->bbm.bb_size; in virtio_mem_bbm_add_bb()
761 const uint64_t size = vm->bbm.bb_size; in virtio_mem_bbm_offline_and_remove_bb()
961 * In BBM, we only care about onlining/offlining happening in virtio_mem_memory_notifier_cb()
1442 const uint64_t size = vm->bbm.bb_size; in virtio_mem_bbm_unplug_bb()
1455 const uint64_t size = vm->bbm.bb_size; in virtio_mem_bbm_plug_bb()
1743 if (vm->bbm.next_bb_id > vm->bbm.last_usable_bb_id) in virtio_mem_bbm_prepare_next_bb()
1751 vm->bbm.bb_count[VIRTIO_MEM_BBM_BB_UNUSED]++; in virtio_mem_bbm_prepare_next_bb()
1752 *bb_id = vm->bbm.next_bb_id; in virtio_mem_bbm_prepare_next_bb()
1753 vm->bbm.next_bb_id++; in virtio_mem_bbm_prepare_next_bb()
1759 uint64_t nb_bb = diff / vm->bbm.bb_size; in virtio_mem_bbm_plug_request()
1768 if (!virtio_mem_could_add_memory(vm, vm->bbm.bb_size)) in virtio_mem_bbm_plug_request()
1781 if (!virtio_mem_could_add_memory(vm, vm->bbm.bb_size)) in virtio_mem_bbm_plug_request()
2051 const unsigned long nr_pages = PFN_DOWN(vm->bbm.bb_size); in virtio_mem_bbm_offline_remove_and_unplug_bb()
2123 const unsigned long nr_pages = PFN_DOWN(vm->bbm.bb_size); in virtio_mem_bbm_bb_is_offline()
2142 const unsigned long nr_pages = PFN_DOWN(vm->bbm.bb_size); in virtio_mem_bbm_bb_is_movable()
2160 uint64_t nb_bb = diff / vm->bbm.bb_size; in virtio_mem_bbm_unplug_request()
2265 vm->bbm.last_usable_bb_id = virtio_mem_phys_to_bb_id(vm, in virtio_mem_refresh_config()
2267 if (!IS_ALIGNED(end_addr + 1, vm->bbm.bb_size)) in virtio_mem_refresh_config()
2268 vm->bbm.last_usable_bb_id--; in virtio_mem_refresh_config()
2472 /* BBM: At least one Linux memory block. */ in virtio_mem_init()
2473 vm->bbm.bb_size = max_t(uint64_t, vm->device_block_size, in virtio_mem_init()
2480 } else if (bbm_block_size < vm->bbm.bb_size) { in virtio_mem_init()
2484 vm->bbm.bb_size = bbm_block_size; in virtio_mem_init()
2490 vm->bbm.bb_size - 1; in virtio_mem_init()
2491 vm->bbm.first_bb_id = virtio_mem_phys_to_bb_id(vm, addr); in virtio_mem_init()
2492 vm->bbm.next_bb_id = vm->bbm.first_bb_id; in virtio_mem_init()
2495 vm->offline_threshold = max_t(uint64_t, 2 * vm->bbm.bb_size, in virtio_mem_init()
2510 (unsigned long long)vm->bbm.bb_size); in virtio_mem_init()
2613 unit_pages = PHYS_PFN(vm->bbm.bb_size); in virtio_mem_probe()
2721 vfree(vm->bbm.bb_states); in virtio_mem_remove()