Lines Matching refs:vm

97 static void create_main_memslot(struct kvm_vm *vm)
101 vm_userspace_mem_region_add(vm, VM_MEM_SRC_ANONYMOUS, 0, 0, MAIN_PAGE_COUNT, 0);
104 vm->memslots[i] = 0;
107 static void create_test_memslot(struct kvm_vm *vm)
109 vm_userspace_mem_region_add(vm,
111 TEST_DATA_START_GFN << vm->page_shift,
116 vm->memslots[MEM_REGION_TEST_DATA] = TEST_DATA_MEMSLOT;
119 static void create_memslots(struct kvm_vm *vm)
135 create_main_memslot(vm);
136 create_test_memslot(vm);
139 static void finish_vm_setup(struct kvm_vm *vm)
143 kvm_vm_elf_load(vm, program_invocation_name);
145 slot0 = memslot2region(vm, 0);
146 ucall_init(vm, slot0->region.guest_phys_addr + slot0->region.memory_size);
148 kvm_arch_vm_post_create(vm);
153 struct kvm_vm *vm;
155 vm = vm_create_barebones();
157 create_memslots(vm);
159 finish_vm_setup(vm);
161 return vm;
164 static void enable_cmma(struct kvm_vm *vm)
168 r = __kvm_device_attr_set(vm->fd, KVM_S390_VM_MEM_CTRL, KVM_S390_VM_MEM_ENABLE_CMMA, NULL);
172 static void enable_dirty_tracking(struct kvm_vm *vm)
174 vm_mem_region_set_flags(vm, 0, KVM_MEM_LOG_DIRTY_PAGES);
175 vm_mem_region_set_flags(vm, TEST_DATA_MEMSLOT, KVM_MEM_LOG_DIRTY_PAGES);
178 static int __enable_migration_mode(struct kvm_vm *vm)
180 return __kvm_device_attr_set(vm->fd,
187 static void enable_migration_mode(struct kvm_vm *vm)
189 int r = __enable_migration_mode(vm);
194 static bool is_migration_mode_on(struct kvm_vm *vm)
199 r = __kvm_device_attr_get(vm->fd,
208 static int vm_get_cmma_bits(struct kvm_vm *vm, u64 flags, int *errno_out)
221 rc = __vm_ioctl(vm, KVM_S390_GET_CMMA_BITS, &args);
229 struct kvm_vm *vm = create_vm_two_memslots();
234 rc = vm_get_cmma_bits(vm, 0, &errno_out);
238 enable_cmma(vm);
239 vcpu = vm_vcpu_add(vm, 1, guest_do_one_essa);
244 rc = vm_get_cmma_bits(vm, 0, &errno_out);
249 rc = vm_get_cmma_bits(vm, KVM_S390_CMMA_PEEK, &errno_out);
253 enable_dirty_tracking(vm);
254 enable_migration_mode(vm);
257 rc = vm_get_cmma_bits(vm, 0xfeedc0fe, &errno_out);
261 kvm_vm_free(vm);
274 struct kvm_vm *vm = vm_create_barebones();
280 rc = __enable_migration_mode(vm);
283 TEST_ASSERT(!is_migration_mode_on(vm), "migration mode should still be off");
286 create_memslots(vm);
287 finish_vm_setup(vm);
289 enable_cmma(vm);
290 vcpu = vm_vcpu_add(vm, 1, guest_do_one_essa);
301 rc = __enable_migration_mode(vm);
304 TEST_ASSERT(!is_migration_mode_on(vm), "migration mode should still be off");
308 enable_dirty_tracking(vm);
311 rc = __enable_migration_mode(vm);
313 TEST_ASSERT(is_migration_mode_on(vm), "migration mode should be on");
325 TEST_ASSERT(is_migration_mode_on(vm), "migration mode should be on");
326 vm_userspace_mem_region_add(vm,
328 TEST_DATA_TWO_START_GFN << vm->page_shift,
333 TEST_ASSERT(!is_migration_mode_on(vm),
346 vm_mem_region_set_flags(vm, TEST_DATA_TWO_MEMSLOT, KVM_MEM_LOG_DIRTY_PAGES);
347 rc = __enable_migration_mode(vm);
349 TEST_ASSERT(is_migration_mode_on(vm), "migration mode should be on");
356 TEST_ASSERT(is_migration_mode_on(vm), "migration mode should be on");
357 vm_mem_region_set_flags(vm, TEST_DATA_TWO_MEMSLOT, 0);
358 TEST_ASSERT(!is_migration_mode_on(vm),
367 kvm_vm_free(vm);
376 static void assert_all_slots_cmma_dirty(struct kvm_vm *vm)
391 vm_ioctl(vm, KVM_S390_GET_CMMA_BITS, &args);
404 vm_ioctl(vm, KVM_S390_GET_CMMA_BITS, &args);
417 vm_ioctl(vm, KVM_S390_GET_CMMA_BITS, &args);
426 static void assert_no_pages_cmma_dirty(struct kvm_vm *vm)
438 vm_ioctl(vm, KVM_S390_GET_CMMA_BITS, &args);
449 struct kvm_vm *vm = create_vm_two_memslots();
452 enable_cmma(vm);
453 vcpu = vm_vcpu_add(vm, 1, guest_do_one_essa);
462 enable_dirty_tracking(vm);
463 enable_migration_mode(vm);
465 assert_all_slots_cmma_dirty(vm);
468 assert_no_pages_cmma_dirty(vm);
470 kvm_vm_free(vm);
473 static void query_cmma_range(struct kvm_vm *vm,
484 vm_ioctl(vm, KVM_S390_GET_CMMA_BITS, res_out);
506 struct kvm_vm *vm = create_vm_two_memslots();
511 enable_cmma(vm);
512 vcpu = vm_vcpu_add(vm, 1, guest_dirty_test_data);
523 enable_dirty_tracking(vm);
524 enable_migration_mode(vm);
527 assert_all_slots_cmma_dirty(vm);
542 query_cmma_range(vm, 0, 1, &log);
554 query_cmma_range(vm, TEST_DATA_START_GFN + TEST_DATA_PAGE_COUNT, 0x20, &log);
569 query_cmma_range(vm, gfn_offset, 0x20, &log);
582 query_cmma_range(vm, TEST_DATA_START_GFN, 1, &log);
598 query_cmma_range(vm, gfn_offset, 15, &log);
611 query_cmma_range(vm, gfn_offset, 17, &log);
625 query_cmma_range(vm, gfn_offset, 25, &log);
635 query_cmma_range(vm, gfn_offset, 0x40 - 0x33, &log);
642 query_cmma_range(vm, gfn_offset, TEST_DATA_PAGE_COUNT - 0x61, &log);
645 assert_no_pages_cmma_dirty(vm);
668 struct kvm_vm *vm = vm_create_barebones();
671 r = !__kvm_has_device_attr(vm->fd, KVM_S390_VM_MEM_CTRL, KVM_S390_VM_MEM_ENABLE_CMMA);
672 kvm_vm_free(vm);