Lines Matching full:vm

97 static void create_main_memslot(struct kvm_vm *vm)  in create_main_memslot()  argument
101 vm_userspace_mem_region_add(vm, VM_MEM_SRC_ANONYMOUS, 0, 0, MAIN_PAGE_COUNT, 0); in create_main_memslot()
104 vm->memslots[i] = 0; in create_main_memslot()
107 static void create_test_memslot(struct kvm_vm *vm) in create_test_memslot() argument
109 vm_userspace_mem_region_add(vm, in create_test_memslot()
111 TEST_DATA_START_GFN << vm->page_shift, in create_test_memslot()
116 vm->memslots[MEM_REGION_TEST_DATA] = TEST_DATA_MEMSLOT; in create_test_memslot()
119 static void create_memslots(struct kvm_vm *vm) in create_memslots() argument
122 * Our VM has the following memory layout: in create_memslots()
135 create_main_memslot(vm); in create_memslots()
136 create_test_memslot(vm); in create_memslots()
139 static void finish_vm_setup(struct kvm_vm *vm) in finish_vm_setup() argument
143 kvm_vm_elf_load(vm, program_invocation_name); in finish_vm_setup()
145 slot0 = memslot2region(vm, 0); in finish_vm_setup()
146 ucall_init(vm, slot0->region.guest_phys_addr + slot0->region.memory_size); in finish_vm_setup()
148 kvm_arch_vm_post_create(vm); in finish_vm_setup()
153 struct kvm_vm *vm; in create_vm_two_memslots() local
155 vm = vm_create_barebones(); in create_vm_two_memslots()
157 create_memslots(vm); in create_vm_two_memslots()
159 finish_vm_setup(vm); in create_vm_two_memslots()
161 return vm; in create_vm_two_memslots()
164 static void enable_cmma(struct kvm_vm *vm) in enable_cmma() argument
168 r = __kvm_device_attr_set(vm->fd, KVM_S390_VM_MEM_CTRL, KVM_S390_VM_MEM_ENABLE_CMMA, NULL); in enable_cmma()
172 static void enable_dirty_tracking(struct kvm_vm *vm) in enable_dirty_tracking() argument
174 vm_mem_region_set_flags(vm, 0, KVM_MEM_LOG_DIRTY_PAGES); in enable_dirty_tracking()
175 vm_mem_region_set_flags(vm, TEST_DATA_MEMSLOT, KVM_MEM_LOG_DIRTY_PAGES); in enable_dirty_tracking()
178 static int __enable_migration_mode(struct kvm_vm *vm) in __enable_migration_mode() argument
180 return __kvm_device_attr_set(vm->fd, in __enable_migration_mode()
187 static void enable_migration_mode(struct kvm_vm *vm) in enable_migration_mode() argument
189 int r = __enable_migration_mode(vm); in enable_migration_mode()
194 static bool is_migration_mode_on(struct kvm_vm *vm) in is_migration_mode_on() argument
199 r = __kvm_device_attr_get(vm->fd, in is_migration_mode_on()
208 static int vm_get_cmma_bits(struct kvm_vm *vm, u64 flags, int *errno_out) in vm_get_cmma_bits() argument
221 rc = __vm_ioctl(vm, KVM_S390_GET_CMMA_BITS, &args); in vm_get_cmma_bits()
229 struct kvm_vm *vm = create_vm_two_memslots(); in test_get_cmma_basic() local
234 rc = vm_get_cmma_bits(vm, 0, &errno_out); in test_get_cmma_basic()
238 enable_cmma(vm); in test_get_cmma_basic()
239 vcpu = vm_vcpu_add(vm, 1, guest_do_one_essa); in test_get_cmma_basic()
244 rc = vm_get_cmma_bits(vm, 0, &errno_out); in test_get_cmma_basic()
249 rc = vm_get_cmma_bits(vm, KVM_S390_CMMA_PEEK, &errno_out); in test_get_cmma_basic()
253 enable_dirty_tracking(vm); in test_get_cmma_basic()
254 enable_migration_mode(vm); in test_get_cmma_basic()
257 rc = vm_get_cmma_bits(vm, 0xfeedc0fe, &errno_out); in test_get_cmma_basic()
261 kvm_vm_free(vm); in test_get_cmma_basic()
274 struct kvm_vm *vm = vm_create_barebones(); in test_migration_mode() local
279 /* enabling migration mode on a VM without memory should fail */ in test_migration_mode()
280 rc = __enable_migration_mode(vm); in test_migration_mode()
283 TEST_ASSERT(!is_migration_mode_on(vm), "migration mode should still be off"); in test_migration_mode()
286 create_memslots(vm); in test_migration_mode()
287 finish_vm_setup(vm); in test_migration_mode()
289 enable_cmma(vm); in test_migration_mode()
290 vcpu = vm_vcpu_add(vm, 1, guest_do_one_essa); in test_migration_mode()
301 rc = __enable_migration_mode(vm); in test_migration_mode()
304 TEST_ASSERT(!is_migration_mode_on(vm), "migration mode should still be off"); in test_migration_mode()
308 enable_dirty_tracking(vm); in test_migration_mode()
311 rc = __enable_migration_mode(vm); in test_migration_mode()
313 TEST_ASSERT(is_migration_mode_on(vm), "migration mode should be on"); in test_migration_mode()
325 TEST_ASSERT(is_migration_mode_on(vm), "migration mode should be on"); in test_migration_mode()
326 vm_userspace_mem_region_add(vm, in test_migration_mode()
328 TEST_DATA_TWO_START_GFN << vm->page_shift, in test_migration_mode()
333 TEST_ASSERT(!is_migration_mode_on(vm), in test_migration_mode()
346 vm_mem_region_set_flags(vm, TEST_DATA_TWO_MEMSLOT, KVM_MEM_LOG_DIRTY_PAGES); in test_migration_mode()
347 rc = __enable_migration_mode(vm); in test_migration_mode()
349 TEST_ASSERT(is_migration_mode_on(vm), "migration mode should be on"); in test_migration_mode()
356 TEST_ASSERT(is_migration_mode_on(vm), "migration mode should be on"); in test_migration_mode()
357 vm_mem_region_set_flags(vm, TEST_DATA_TWO_MEMSLOT, 0); in test_migration_mode()
358 TEST_ASSERT(!is_migration_mode_on(vm), in test_migration_mode()
367 kvm_vm_free(vm); in test_migration_mode()
371 * Given a VM with the MAIN and TEST_DATA memslot, assert that both slots have
376 static void assert_all_slots_cmma_dirty(struct kvm_vm *vm) in assert_all_slots_cmma_dirty() argument
391 vm_ioctl(vm, KVM_S390_GET_CMMA_BITS, &args); in assert_all_slots_cmma_dirty()
404 vm_ioctl(vm, KVM_S390_GET_CMMA_BITS, &args); in assert_all_slots_cmma_dirty()
417 vm_ioctl(vm, KVM_S390_GET_CMMA_BITS, &args); in assert_all_slots_cmma_dirty()
424 * Given a VM, assert no pages are CMMA dirty.
426 static void assert_no_pages_cmma_dirty(struct kvm_vm *vm) in assert_no_pages_cmma_dirty() argument
438 vm_ioctl(vm, KVM_S390_GET_CMMA_BITS, &args); in assert_no_pages_cmma_dirty()
449 struct kvm_vm *vm = create_vm_two_memslots(); in test_get_inital_dirty() local
452 enable_cmma(vm); in test_get_inital_dirty()
453 vcpu = vm_vcpu_add(vm, 1, guest_do_one_essa); in test_get_inital_dirty()
462 enable_dirty_tracking(vm); in test_get_inital_dirty()
463 enable_migration_mode(vm); in test_get_inital_dirty()
465 assert_all_slots_cmma_dirty(vm); in test_get_inital_dirty()
468 assert_no_pages_cmma_dirty(vm); in test_get_inital_dirty()
470 kvm_vm_free(vm); in test_get_inital_dirty()
473 static void query_cmma_range(struct kvm_vm *vm, in query_cmma_range() argument
484 vm_ioctl(vm, KVM_S390_GET_CMMA_BITS, res_out); in query_cmma_range()
506 struct kvm_vm *vm = create_vm_two_memslots(); in test_get_skip_holes() local
511 enable_cmma(vm); in test_get_skip_holes()
512 vcpu = vm_vcpu_add(vm, 1, guest_dirty_test_data); in test_get_skip_holes()
523 enable_dirty_tracking(vm); in test_get_skip_holes()
524 enable_migration_mode(vm); in test_get_skip_holes()
527 assert_all_slots_cmma_dirty(vm); in test_get_skip_holes()
536 * main memslot was not touched by the VM, this should yield the first in test_get_skip_holes()
542 query_cmma_range(vm, 0, 1, &log); in test_get_skip_holes()
554 query_cmma_range(vm, TEST_DATA_START_GFN + TEST_DATA_PAGE_COUNT, 0x20, &log); in test_get_skip_holes()
569 query_cmma_range(vm, gfn_offset, 0x20, &log); in test_get_skip_holes()
582 query_cmma_range(vm, TEST_DATA_START_GFN, 1, &log); in test_get_skip_holes()
598 query_cmma_range(vm, gfn_offset, 15, &log); in test_get_skip_holes()
611 query_cmma_range(vm, gfn_offset, 17, &log); in test_get_skip_holes()
625 query_cmma_range(vm, gfn_offset, 25, &log); in test_get_skip_holes()
635 query_cmma_range(vm, gfn_offset, 0x40 - 0x33, &log); in test_get_skip_holes()
642 query_cmma_range(vm, gfn_offset, TEST_DATA_PAGE_COUNT - 0x61, &log); in test_get_skip_holes()
645 assert_no_pages_cmma_dirty(vm); in test_get_skip_holes()
664 * temporary VM and then query the CMMA feature of the VM.
668 struct kvm_vm *vm = vm_create_barebones(); in machine_has_cmma() local
671 r = !__kvm_has_device_attr(vm->fd, KVM_S390_VM_MEM_CTRL, KVM_S390_VM_MEM_ENABLE_CMMA); in machine_has_cmma()
672 kvm_vm_free(vm); in machine_has_cmma()